using Application.Services.Database.MongoDB; using Application.Services.Database.PostgreSQL; using Domain.Entities; namespace Application.Endpoints.Chats.GetChats; public class GetConversationsHandler( IChatMongoDbService chatMongoDbService, IPatientRepository patientRepository, IDoctorRepository doctorRepository) { public async Task HandleGetConversation(GetConversationsCommand getConversationCommand, CancellationToken token) { var validation = new GetConversationsValidator(doctorRepository, patientRepository); var validationResult = await validation.ValidateAsync(getConversationCommand, token); if (!validationResult.IsValid) { var firstError = validationResult.Errors.FirstOrDefault(); var errorCode = int.TryParse(firstError.ErrorCode, out var code) ? code : -1; var errorMessage = firstError.ErrorMessage; return new BaseResponse { StatusCode = errorCode, Message = errorMessage, Data = null }; } var chatId = IdentifierGenerator.GenerateId(getConversationCommand.IdUser1, getConversationCommand.IdUser2); var criteria = new List<(string, string)>(); criteria.Add(("_id", chatId)); Chat? chat = null; var documents = await chatMongoDbService.FindAsync(criteria, token); if (!documents.Any()) { chat = new Chat(); chat.SetId(chatId); await chatMongoDbService.AddAsync(chat, token); } else { chat = documents[0]; } return new BaseResponse { StatusCode = HttpStatusCodes.OK, Message = "Fetching messages.", Data = chat }; } }