SaveChatMessageHandler
parent
50e9c3b311
commit
235b6b52cc
|
@ -0,0 +1,44 @@
|
|||
using AutoMapper;
|
||||
using Chatbot.Api.Application.Commands;
|
||||
using Chatbot.Api.Application.Events;
|
||||
using Chatbot.Api.Domain.Entities;
|
||||
using Chatbot.Api.Domain.Repositories;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Chatbot.Api.Application.CommandHandlers
|
||||
{
|
||||
public class SaveChatMessageHandler : IRequestHandler<SaveChatMessage, ChatMessageSaved>
|
||||
{
|
||||
private readonly ILogger<SaveChatMessageHandler> _logger;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IChatRepository _chatRepository;
|
||||
|
||||
public SaveChatMessageHandler(ILogger<SaveChatMessageHandler> logger, IMapper mapper, IChatRepository chatRepository)
|
||||
{
|
||||
_logger = logger;
|
||||
_mapper = mapper;
|
||||
_chatRepository = chatRepository;
|
||||
}
|
||||
|
||||
public async Task<ChatMessageSaved> Handle(SaveChatMessage request, CancellationToken cancellationToken)
|
||||
{
|
||||
try
|
||||
{
|
||||
var message = _mapper.Map<ChatMessage>(request);
|
||||
await _chatRepository.Add(message);
|
||||
|
||||
return new ChatMessageSaved(true, null);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
var correlationIdMsg = $"CorrelationId: {request.Metadata.CorrelationId}";
|
||||
_logger.LogError(ex, $"An unexpected error has occurred. {correlationIdMsg}");
|
||||
return new ChatMessageSaved(false, $"{ex.Message} {correlationIdMsg}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
using Chatbot.Api.Application.Events;
|
||||
using System;
|
||||
|
||||
namespace Chatbot.Api.Application.Commands
|
||||
{
|
||||
public class SaveChatMessage : Command<ChatMessageSaved>
|
||||
{
|
||||
public Guid ChatId { get; }
|
||||
public int MessageSourceId { get; }
|
||||
public DateTime MessageDate { get; }
|
||||
public string MessageContent { get; }
|
||||
|
||||
public SaveChatMessage(Guid chatId, int messageSourceId, DateTime messageDate, string messageContent)
|
||||
: base(new Metadata() { CorrelationId = Guid.NewGuid() })
|
||||
{
|
||||
ChatId = chatId;
|
||||
MessageSourceId = messageSourceId;
|
||||
MessageDate = messageDate;
|
||||
MessageContent = messageContent;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,14 @@
|
|||
namespace Chatbot.Api.Application.Events
|
||||
{
|
||||
public class ChatMessageSaved
|
||||
{
|
||||
public bool Success { get; }
|
||||
public string Message { get; }
|
||||
|
||||
public ChatMessageSaved(bool success, string message)
|
||||
{
|
||||
Success = success;
|
||||
Message = message;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@ namespace Chatbot.Api.Domain.Data.DbContexts
|
|||
base.OnModelCreating(modelBuilder);
|
||||
|
||||
modelBuilder.ApplyConfiguration(new ChatConfiguration());
|
||||
modelBuilder.ApplyConfiguration(new ChatMessageConfiguration());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
using Chatbot.Api.Domain.Entities;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Builders;
|
||||
|
||||
namespace Chatbot.Api.Domain.Data.EntityTypeConfiguration
|
||||
{
|
||||
class ChatMessageConfiguration : IEntityTypeConfiguration<ChatMessage>
|
||||
{
|
||||
public void Configure(EntityTypeBuilder<ChatMessage> builder)
|
||||
{
|
||||
builder.ToTable("ChatMessage").HasKey(key => key.MessageId);
|
||||
builder.Property(e => e.MessageId).ValueGeneratedOnAdd();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -29,5 +29,11 @@ namespace Chatbot.Api.Domain.Data.Repositories
|
|||
|
||||
return chat;
|
||||
}
|
||||
|
||||
public async Task Add<T>(T entity) where T : class
|
||||
{
|
||||
_dbContext.Add(entity);
|
||||
await _dbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
using System;
|
||||
|
||||
namespace Chatbot.Api.Domain.Entities
|
||||
{
|
||||
public class ChatMessage
|
||||
{
|
||||
public int MessageId { get; set; }
|
||||
public Guid ChatId { get; set; }
|
||||
public int MessageSourceId { get; set; }
|
||||
public DateTime MessageDate { get; set; }
|
||||
public string MessageContent { get; set; }
|
||||
}
|
||||
}
|
|
@ -7,5 +7,6 @@ namespace Chatbot.Api.Domain.Repositories
|
|||
public interface IChatRepository
|
||||
{
|
||||
Task<Chat> CreateChat(Guid sessionId);
|
||||
Task Add<T>(T entity) where T : class;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue