import { TextObjectFilterResult } from "../../Models/TextObjectFilter.model"; import AppointmentList from "../../Models/Appointments/Appointments"; import { CreateImmediateAppointmentNotificationJobsParams, AppointmentNotificationPreviewParams, AppointmentNotificationPreviewResult, AppointmentAdminByClientView, AppointmentAdminByDateView, CreateAppointmentParams, MoveAppointmentParams, ChangeServiceParams, DeleteAppointmentParams, FindAppointmentsParams, FindAppointmentSchedulesParams, IAppointment, UpdateAppointmentParams, FindAppointmentsByUserParams, FindAppointmentsByCollaboratorParams, SendAppointmentNotificationParams, GetAppointmentEventParams, AppointmentEventByClient, ApplyAppointmentDiscountParams, DeleteAppointmentDiscountParams, SendWapSystemNotificationParams, GetAvailableDatesParams, GetAvailableDatesResult, FindAppointmentsByUserPaginatedParams, FindAppointmentsByCollaboratorPaginatedParams, PaginatedAppointmentEventByClientResult, } from "../../Models/Appointments/Appointments.Interface"; import { connect } from "mongoose"; import { validatePermissionsByCompany } from "../../helpers/check"; export class AppointmentService { public async createAppointment(data: CreateAppointmentParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const newAppointment = await AppointmentList.createAppointment(data); return newAppointment; } public async moveAppointmentForce(data: MoveAppointmentParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.moveAppointmentForce(data); } public async changeServiceForce(data: ChangeServiceParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.changeServiceForce(data); } public async updateAppointment(data: UpdateAppointmentParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.updateAppointment(data); } public async deleteAppointment(data: DeleteAppointmentParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.deleteAppointment(data); } public async findAppointmentsAdminByDate( data: FindAppointmentsParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); if (!data.companyId || !data.sessionUser) { throw new Error("No se ha encontrado la organización o el usuario de sesión"); } await validatePermissionsByCompany({ companyId: data.companyId, sessionUser: data.sessionUser, }); const appointments = await AppointmentList.findAppointmentsAdminByDate(data); return appointments; } public async getAppointmentEvent( data: GetAppointmentEventParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const appointment = await AppointmentList.getAppointmentEvent(data); return appointment; } public async findAppointmentsAdminByClient( data: FindAppointmentsParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const appointments = await AppointmentList.findAppointmentsAdminByClient(data); return appointments; } public async findAppointmentsByUser( data: FindAppointmentsByUserParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const appointments = await AppointmentList.findAppointmentsByUser(data); return appointments; } public async findAppointmentsByCollaborator( data: FindAppointmentsByCollaboratorParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const appointments = await AppointmentList.findAppointmentsByCollaborator(data); return appointments; } public async findAppointmentsByUserPaginated( data: FindAppointmentsByUserPaginatedParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const appointments = await AppointmentList.findAppointmentsByUserPaginated(data); return appointments; } public async findAppointmentsByCollaboratorPaginated( data: FindAppointmentsByCollaboratorPaginatedParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const appointments = await AppointmentList.findAppointmentsByCollaboratorPaginated(data); return appointments; } public async getSchedules( data: FindAppointmentSchedulesParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); const schedules = await AppointmentList.getSchedules(data); return schedules; } public async sendWapNotification(data: SendAppointmentNotificationParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.sendWapNotification(data); } public async sendWapSystemNotification(data: SendWapSystemNotificationParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.sendWapSystemNotification(data); } public async sendEmailNotification(data: SendAppointmentNotificationParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.sendEmailNotification(data); } public async createImmediateNotificationJobs(data: CreateImmediateAppointmentNotificationJobsParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.createImmediateNotificationJobs(data); } public async getAppointmentNotificationPreview(data: AppointmentNotificationPreviewParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); return AppointmentList.getAppointmentNotificationPreview(data); } public async applyDiscount(data: ApplyAppointmentDiscountParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.applyDiscount(data); } public async deleteDiscount(data: DeleteAppointmentDiscountParams): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); await AppointmentList.deleteDiscount(data); } public async getAvailableDates( data: GetAvailableDatesParams ): Promise { await connect(`${process.env.DATABASE_CONNECTION}`); return AppointmentList.getAvailableDates(data); } }