mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 14:47:53 +01:00
* Added subscriptions to all members when group subs * Added unsub when group cancels * Give user a subscription when they join a subbed group * Removed subscription when user leaves or is removed from group * Fixed linting issues: * Added tests for users with a subscription being upgraded to group plan * Added tests for checking if existing recurring user sub gets updated during group plan. Added better merging for plans * Added test for existing gift subscriptions * Added additional months to user when they have an existing recurring subscription and get upgraded to group sub * Adds test for user who has cancelled with date termined in the future * Added test to ensure date termined is reset * Added tests for extra months carrying over * Added test for gems bought field * Add tests to for fields that should remain when upgrading * Added test for all payment methods * Added prevention for when a user joins a second group plan * Fixed subscribing tests * Separated group plan payment tests * Added prevention of editing a user with a unlimited sub * Add tests to ensure group keeps plan if they are in two and leave one * Ensured users with two group plans do not get cancelled when on group plan is cancelled * Ensured users without group sub are untouched when group cancels * Fixed lint issues * Added new emails * Added fix for cron tests * Add restore to stubbed methods * Ensured cancelled group subscriptions are updated * Changed group plan exist check to check for date terminated * Updated you cannont delete active group message * Removed description requirement * Added upgrade group plan for Amazon payments * Fixed lint issues * Fixed broken tests * Fixed user delete tests * Fixed function calls * Hid cancel button if user has group plan * Hide difficulty from rewards * Prevented add user functions to be called when group plan is cancelled * Fixed merge issue * Correctly displayed group price * Added message when you are about to join canclled group plan * Fixed linting issues * Updated tests to have no redirect to homes * Allowed leaving a group with a canceld subscription * Fixed spelling issues * Prevented user from changing leader with active sub * Added payment details title to replace subscription title * Ensured we do not count leader when displaying upcoming cost * Prevented party tasks from being displayed twice * Prevented cancelling and already cancelled sub * Fixed styles of subscriptions * Added more specific mystery item tests * Fixed test to refer to leader * Extended test range to account for short months * Fixed merge conflicts * Updated yarn file * Added missing locales * Trigger notification * Removed yarn * Fixed locales * Fixed scope mispelling * Fixed line endings * Removed extra advanced options from rewards * Prevent group leader from leaving an active group plan * Fixed issue with extra months applied to cancelled group plan * Ensured member count is calculated when updatedGroupPlan * Updated amazon payment method constant name * Added comment to cancel sub user method * Fixed smantic issues * Added unite test for user isSubscribed and hasNotCancelled * Add tests for isSubscribed and hasNotCanceled * Changed default days remaining to 2 days for group plans * Fixed logic with adding canceled notice to group invite
113 lines
2.0 KiB
JavaScript
113 lines
2.0 KiB
JavaScript
/* eslint-disable no-use-before-define */
|
|
import moment from 'moment';
|
|
import { requester } from './requester';
|
|
import {
|
|
getDocument as getDocumentFromMongo,
|
|
updateDocument as updateDocumentInMongo,
|
|
} from '../mongo';
|
|
import {
|
|
assign,
|
|
each,
|
|
isEmpty,
|
|
set,
|
|
} from 'lodash';
|
|
|
|
class ApiObject {
|
|
constructor (options) {
|
|
assign(this, options);
|
|
}
|
|
|
|
async update (options) {
|
|
if (isEmpty(options)) {
|
|
return;
|
|
}
|
|
|
|
await updateDocumentInMongo(this._docType, this, options);
|
|
|
|
_updateLocalParameters(this, options);
|
|
|
|
return this;
|
|
}
|
|
|
|
async sync () {
|
|
let updatedDoc = await getDocumentFromMongo(this._docType, this);
|
|
|
|
assign(this, updatedDoc);
|
|
|
|
return this;
|
|
}
|
|
}
|
|
|
|
export class ApiUser extends ApiObject {
|
|
constructor (options) {
|
|
super(options);
|
|
|
|
this._docType = 'users';
|
|
|
|
let _requester = requester(this);
|
|
|
|
this.get = _requester.get;
|
|
this.post = _requester.post;
|
|
this.put = _requester.put;
|
|
this.del = _requester.del;
|
|
}
|
|
}
|
|
|
|
export class ApiGroup extends ApiObject {
|
|
constructor (options) {
|
|
super(options);
|
|
|
|
this._docType = 'groups';
|
|
}
|
|
|
|
async addChat (chat) {
|
|
let group = this;
|
|
|
|
if (!chat) {
|
|
chat = {
|
|
id: 'Test_ID',
|
|
text: 'Test message',
|
|
flagCount: 0,
|
|
timestamp: Date(),
|
|
likes: {},
|
|
flags: {},
|
|
uuid: group.leader,
|
|
contributor: {},
|
|
backer: {},
|
|
user: group.leader,
|
|
};
|
|
}
|
|
|
|
let update = { chat };
|
|
|
|
return await this.update(update);
|
|
}
|
|
|
|
async createCancelledSubscription () {
|
|
let update = {
|
|
purchased: {
|
|
plan: {
|
|
customerId: 'example-customer',
|
|
dateTerminated: moment().add(1, 'days').toDate(),
|
|
},
|
|
},
|
|
};
|
|
|
|
return await this.update(update);
|
|
}
|
|
}
|
|
|
|
export class ApiChallenge extends ApiObject {
|
|
constructor (options) {
|
|
super(options);
|
|
|
|
this._docType = 'challenges';
|
|
}
|
|
}
|
|
|
|
function _updateLocalParameters (doc, update) {
|
|
each(update, (value, param) => {
|
|
set(doc, param, value);
|
|
});
|
|
}
|