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);
|
base.OnModelCreating(modelBuilder);
|
||||||
|
|
||||||
modelBuilder.ApplyConfiguration(new ChatConfiguration());
|
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;
|
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
|
public interface IChatRepository
|
||||||
{
|
{
|
||||||
Task<Chat> CreateChat(Guid sessionId);
|
Task<Chat> CreateChat(Guid sessionId);
|
||||||
|
Task Add<T>(T entity) where T : class;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue