import { FindPlansParams, IPlansAdapter, IPlan, SysAdminUpdatePlanParams } from "./Plans.interface"; import { Document, Model, Schema, model } from "mongoose"; export interface IPlanDocument extends Omit, Document {} export class PlansAdapterMongoose implements IPlansAdapter { schema: Schema; planList: Model; 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("Plan", this.schema); } public async find(filters: FindPlansParams): Promise { return this.planList.find(filters).exec(); } public async findOne(filters: FindPlansParams): Promise { return this.planList.findOne(filters).exec(); } public async updateOne(planId: string, data: Omit): Promise { await this.planList.updateOne({ _id: planId }, { $set: data }).exec(); } }