53 lines
2.4 KiB
TypeScript
53 lines
2.4 KiB
TypeScript
import { FindPlansParams, IPlansAdapter, IPlan, SysAdminUpdatePlanParams } from "./Plans.interface";
|
|
import { Document, Model, Schema, model } from "mongoose";
|
|
|
|
export interface IPlanDocument extends Omit<IPlan, "id">, Document {}
|
|
|
|
export class PlansAdapterMongoose implements IPlansAdapter {
|
|
schema: Schema;
|
|
planList: Model<IPlanDocument>;
|
|
|
|
constructor() {
|
|
this.schema = new Schema({
|
|
name: { type: String, required: true, unique: true },
|
|
description: { type: String, required: true },
|
|
features: { type: Array, required: true, default: [] },
|
|
code: { type: String, required: true, unique: true },
|
|
price: { type: Number, required: true },
|
|
annualPrice: { type: Number, required: true },
|
|
limitOrganizations: { type: Number, required: true },
|
|
limitEmployees: { type: Number, required: true },
|
|
limitServices: { type: Number, required: true },
|
|
limitAppointments: { type: Number, required: true },
|
|
limitClients: { type: Number, required: true },
|
|
limitRepeats: { type: Number, required: true },
|
|
mailNotifications: { type: Boolean, required: true },
|
|
smsNotifications: { type: Boolean, required: true },
|
|
wapNotifications: { type: Boolean, required: true },
|
|
payments: { type: Boolean, required: false },
|
|
bot: { type: Boolean, required: true },
|
|
active: { type: Boolean, required: true },
|
|
mpPlanId: { type: String, required: false },
|
|
dateLimit: { type: Boolean, required: true },
|
|
discount3Months: { type: Number, required: false },
|
|
discount6Months: { type: Number, required: false },
|
|
discount12Months: { type: Number, required: false },
|
|
featured: { type: Boolean, required: false },
|
|
});
|
|
|
|
this.planList = model<IPlanDocument>("Plan", this.schema);
|
|
}
|
|
|
|
public async find(filters: FindPlansParams): Promise<IPlan[]> {
|
|
return this.planList.find(filters).exec();
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|