59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
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<BaseResponse> 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<Chat>(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
|
|
};
|
|
}
|
|
} |