import { uuid } from 'uuidv4'; import { isEqual, getMonth, getDate, getYear } from 'date-fns'; import ICraeteAppointmentDTO from '@modules/appointments/dtos/ICreateAppointmentDTO'; import IFindByDateDTO from '@modules/appointments/dtos/IFindByDateDTO'; import IFindAllInMonthFromProviderDTO from '@modules/appointments/dtos/IFindAllInMonthFromProviderDTO'; import IFindAllInDayFromProviderDTO from '@modules/appointments/dtos/IFindAllInDayFromProviderDTO'; import IAppointmentsRepository from '@modules/appointments/repositories/IAppointmentsRepository'; import Appointment from '@modules/appointments/infra/typeorm/entities/Appointment'; class AppointmentsRepository implements IAppointmentsRepository { private appointments: Appointment[] = []; public async findByDate({ date, provider_id, }: IFindByDateDTO): Promise<Appointment | undefined> { const findAppointment = this.appointments.find( appointment => isEqual(appointment.date, date) && appointment.provider_id === provider_id, ); return findAppointment; } public async findAllInMonthFromProvider({ provider_id, month, year, }: IFindAllInMonthFromProviderDTO): Promise<Appointment[]> { const appointments = this.appointments.filter(appointment => { return ( appointment.provider_id === provider_id && getMonth(appointment.date) + 1 === month && getYear(appointment.date) === year ); }); return appointments; } public async findAllInDayFromProvider({ provider_id, day, month, year, }: IFindAllInDayFromProviderDTO): Promise<Appointment[]> { const appointments = this.appointments.filter(appointment => { return ( appointment.provider_id === provider_id && getDate(appointment.date) === day && getMonth(appointment.date) + 1 === month && getYear(appointment.date) === year ); }); return appointments; } public async create({ provider_id, user_id, date, }: ICraeteAppointmentDTO): Promise<Appointment> { const appointment = new Appointment(); Object.assign(appointment, { id: uuid(), date, provider_id, user_id }); this.appointments.push(appointment); return appointment; } } export default AppointmentsRepository;