feat: implement sysadmin subscription management and plan usage cycle recalculation tools
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { FindPlansParams, IPlansAdapter, IPlan } from "./Plans.interface";
|
||||
import { FindPlansParams, IPlansAdapter, IPlan, SysAdminUpdatePlanParams } from "./Plans.interface";
|
||||
import { Document, Model, Schema, model } from "mongoose";
|
||||
|
||||
export interface IPlanDocument extends Omit<IPlan, "id">, Document {}
|
||||
@@ -45,4 +45,8 @@ export class PlansAdapterMongoose implements IPlansAdapter {
|
||||
public async findOne(filters: FindPlansParams): Promise<IPlanDocument | null> {
|
||||
return this.planList.findOne(filters).exec();
|
||||
}
|
||||
|
||||
public async updateOne(planId: string, data: Omit<SysAdminUpdatePlanParams, "planId">): Promise<void> {
|
||||
await this.planList.updateOne({ _id: planId }, { $set: data }).exec();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,33 @@ export type FindPlansParams = {
|
||||
price?: number;
|
||||
};
|
||||
|
||||
export type SysAdminUpdatePlanParams = {
|
||||
planId: string;
|
||||
name?: string;
|
||||
description?: string;
|
||||
features?: string[];
|
||||
code?: string;
|
||||
price?: number;
|
||||
annualPrice?: number;
|
||||
limitOrganizations?: number;
|
||||
limitEmployees?: number;
|
||||
limitServices?: number;
|
||||
limitAppointments?: number;
|
||||
limitClients?: number;
|
||||
limitRepeats?: number;
|
||||
mailNotifications?: boolean;
|
||||
smsNotifications?: boolean;
|
||||
wapNotifications?: boolean;
|
||||
payments?: boolean;
|
||||
bot?: boolean;
|
||||
active?: boolean;
|
||||
dateLimit?: boolean;
|
||||
discount3Months?: number;
|
||||
discount6Months?: number;
|
||||
discount12Months?: number;
|
||||
featured?: boolean;
|
||||
};
|
||||
|
||||
export interface IPlan {
|
||||
id?: string;
|
||||
name: string;
|
||||
@@ -44,10 +71,12 @@ export interface IPlan {
|
||||
export interface IPlansAdapter {
|
||||
find(filters: FindPlansParams): Promise<IPlan[]>;
|
||||
findOne(filters: FindPlansParams): Promise<IPlan | null>;
|
||||
updateOne(planId: string, data: Omit<SysAdminUpdatePlanParams, "planId">): Promise<void>;
|
||||
}
|
||||
|
||||
export interface IPlansManager {
|
||||
plans: IPlansAdapter;
|
||||
find(data: FindPlansParams): Promise<IPlan[]>;
|
||||
findOne(data: FindPlansParams): Promise<IPlan>;
|
||||
sysAdminUpdatePlan(data: SysAdminUpdatePlanParams): Promise<void>;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { isNull } from "../../helpers/IsNull";
|
||||
import { PlansAdapterMongoose } from "./Plans.Adapter.Mongoose";
|
||||
import { FindPlansParams, IPlan, IPlansManager } from "./Plans.interface";
|
||||
import { FindPlansParams, IPlan, IPlansManager, SysAdminUpdatePlanParams } from "./Plans.interface";
|
||||
|
||||
class PlansManager implements IPlansManager {
|
||||
plans: PlansAdapterMongoose;
|
||||
@@ -59,6 +59,12 @@ class PlansManager implements IPlansManager {
|
||||
|
||||
return this.getOnePlan(plan);
|
||||
}
|
||||
|
||||
public async sysAdminUpdatePlan(data: SysAdminUpdatePlanParams): Promise<void> {
|
||||
const { planId, ...planData } = data;
|
||||
await this.findOne({ _id: planId });
|
||||
await this.plans.updateOne(planId, planData);
|
||||
}
|
||||
}
|
||||
|
||||
const PlansList = new PlansManager();
|
||||
|
||||
Reference in New Issue
Block a user