UseCase ValidateAvailableTimes no CrazyStack Node.js
A aula "UseCase ValidateAvailableTimes" é destinada a criar uma camada de validação para garantir que o horário selecionado pelo usuário esteja disponível para agendamento. Ela irá utilizar o UseCase "LoadAvailableTimes" criado na aula anterior e comparar o horário selecionado pelo usuário com o array de horários disponíveis retornados pelo "LoadAvailableTimes". Se o horário estiver disponível, a função retornará verdadeiro, caso contrário, retornará falso. Dessa forma, é possível garantir que o horário agendado seja válido e evitar problemas com horários duplicados ou já agendados.
import { intervalsOverlapping } from "@/application/helpers/dateFns";
import { QueryVerifyAvailableTimes } from "@/slices/appointment/entities/AppointmentEntity";
import { LoadAvailableTimes } from "@/slices/appointment/useCases/loadAvailableTimes";
export type ValidateAvailableTimes = (
query: QueryVerifyAvailableTimes
) => Promise<any | null>;
export const validateAvailableTimes =
(loadAvailableTimes: LoadAvailableTimes) => async (query: QueryVerifyAvailableTimes) => {
const { initDate = null, endDate = null } = query || {};
if (
!initDate ||
!endDate ||
endDate === initDate ||
new Date(endDate).getTime() <= new Date(initDate).getTime()
) {
return false;
}
const { timeAvailable = null, timeAvailableProfessional = null } =
(await loadAvailableTimes(query)) || {};
if (!timeAvailable && !timeAvailableProfessional) {
return false;
}
const result = timeAvailable?.find(({ time }: any) => {
return new Date(time).getTime() === new Date(initDate).getTime();
});
if (!result) {
const resultAlternative = timeAvailableProfessional?.find((time: any) => {
return intervalsOverlapping(
new Date(initDate),
new Date(endDate),
new Date(time.initDate),
new Date(time.endDate)
);
});
return !!resultAlternative;
}
return true;
};
Esse use case é importante em um sistema de agendamentos online porque ele permite verificar se um determinado horário está disponível para agendamento. Ele é responsável por validar se as datas de início e fim do agendamento são válidas e se estão disponíveis no sistema. Ele utiliza a função "loadAvailableTimes" para carregar os horários disponíveis para o profissional e o estabelecimento, e em seguida, verifica se o horário solicitado está contido nesses horários. Ele também utiliza a função "intervalsOverlapping" para verificar se o horário solicitado colide com horários já agendados. Com esse use case, é possível garantir que os agendamentos são feitos de forma precisa e evitar conflitos de horários.