using Application.Services.Database; namespace Application.Endpoints.Doctors.Profile; public class DoctorProfileHandler { private readonly IDoctorRepository _doctorRepository; public DoctorProfileHandler(IDoctorRepository doctorRepository) { _doctorRepository = doctorRepository; } public async Task HandleGet(Guid id) { var doctor = await _doctorRepository.GetByIdAsync(id).ConfigureAwait(false); if (doctor != null) { return new BaseResponse { Success = true, Message = $"Retrieved doctor with id: {id}", Data = doctor }; } return new BaseResponse { Success = false, Message = $"Doctor with id: {id} not found", Data = null }; } public async Task HandleGetAll() { var doctors = await _doctorRepository.GetAllAsync().ConfigureAwait(false); if (doctors.Any()) { return new BaseResponse { Success = true, Message = "Retrieved doctors", Data = doctors.ToList() }; } return new BaseResponse { Success = false, Message = "Doctors not found", Data = null }; } public async Task HandleUpdate(Guid id, DoctorProfileDTO updateDto) { var validation = new DoctorProfileValidation(_doctorRepository); var validationResult = await validation.ValidateAsync(updateDto); if (!validationResult.IsValid) { var errorMessage = validationResult.Errors.Select(e => e.ErrorMessage).ToList(); return new BaseResponse { Success = false, Message = string.Join(", ", errorMessage), Data = null }; } var doctorToUpdate = await _doctorRepository.GetByIdAsync(id); if (doctorToUpdate == null) { return new BaseResponse { Success = false, Message = "Doctor not found for given Id", Data = null }; } doctorToUpdate.Email = updateDto.Email; doctorToUpdate.Password = updateDto.Password; doctorToUpdate.Name = updateDto.Name; doctorToUpdate.Description = updateDto.Description; await _doctorRepository.UpdateAsync(doctorToUpdate); return new BaseResponse { Success = true, Message = "Doctor updated successfully", Data = doctorToUpdate }; } public async Task HandleDelete(Guid id) { var doctorToDelete = await _doctorRepository.GetByIdAsync(id); if (doctorToDelete == null) { return new BaseResponse { Success = false, Message = $"Doctor with id: {id} does not exist", Data = null }; } await _doctorRepository.DeleteAsync(doctorToDelete); return new BaseResponse { Success = true, Message = $"Doctor with id: {id} was succesfully deleted", Data = doctorToDelete }; } }