import { IPlanUsageCycleDocument } from "./PlanUsageCycle.Adapter.Mongoose"; export interface IPlanUsageCycle { id?: string; userId: string; subscriptionId?: string; planId: string; cycleStart: Date; cycleEnd: Date; appointmentsCount: number; creationDate: Date; updateDate: Date; } export type FindPlanUsageCycleParams = { userId?: string; subscriptionId?: string; planId?: string; cycleStart?: Date; cycleEnd?: Date; }; export type CreatePlanUsageCycleParams = { userId: string; subscriptionId?: string; planId: string; cycleStart: Date; cycleEnd: Date; appointmentsCount?: number; }; export type CurrentPlanUsageCycleParams = { userId: string; now?: Date; limit?: number; }; export type SetPlanUsageCycleAppointmentsParams = CurrentPlanUsageCycleParams & { appointmentsCount: number; }; export type SysAdminRecalculatePlanUsageCycleParams = { userId: string; }; export type SysAdminRecalculatePlanUsageCycleResult = { userId: string; subscriptionId: string; planId: string; cycleStart: Date; cycleEnd: Date; organizationsCount: number; employeesCount: number; servicesCount: number; clientsCount: number; repeatsCount: number; appointmentsCount: number; }; export type UpdatePlanUsageCycleParams = { userId: string; subscriptionId: string; planId: string; cycleStart: Date; cycleEnd: Date; }; export type CalculateCurrentCycleParams = { subscriptionStartDate: Date; now?: Date; }; export type PlanUsageCycleRange = { cycleStart: Date; cycleEnd: Date; }; export interface IPlanUsageCycleAdapter { findOne(filters: FindPlanUsageCycleParams): Promise; create(data: CreatePlanUsageCycleParams): Promise; getOrCreateCurrent(data: UpdatePlanUsageCycleParams): Promise; incrementAppointments(data: UpdatePlanUsageCycleParams & { quantity: number }): Promise; incrementAppointmentsIfWithinLimit( data: UpdatePlanUsageCycleParams & { quantity: number; limit: number } ): Promise; setAppointmentsCount( data: UpdatePlanUsageCycleParams & { appointmentsCount: number } ): Promise; } export interface IPlanUsageCycleManager { planUsageCycle: IPlanUsageCycleAdapter; getCurrentCycle(data: CurrentPlanUsageCycleParams): Promise; addAppointment(data: CurrentPlanUsageCycleParams & { quantity?: number }): Promise; reserveAppointment(data: CurrentPlanUsageCycleParams & { quantity?: number }): Promise; releaseAppointment(data: CurrentPlanUsageCycleParams & { quantity?: number }): Promise; getAppointmentsCount(data: CurrentPlanUsageCycleParams): Promise; setAppointmentsCount(data: SetPlanUsageCycleAppointmentsParams): Promise; }