From 50e9c3b31159eabbe5cc3dbd7cd49f229ceec3e2 Mon Sep 17 00:00:00 2001 From: Tudor Stanciu Date: Sat, 6 Jun 2020 23:18:41 +0300 Subject: [PATCH] create chat --- .../Mappings/MappingProfile.cs | 1 + Chatbot.Application/Queries/GetChat.cs | 43 +++++++++++++++++++ .../DbContexts/ChatDbContext.cs | 11 ++++- .../DependencyInjectionExtensions.cs | 10 +++++ .../ChatConfiguration.cs | 14 ++++++ .../Repositories/ChatRepository.cs | 33 ++++++++++++++ Chatbot.Domain/Entities/Chat.cs | 12 ++++++ .../Repositories/IChatRepository.cs | 11 +++++ 8 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 Chatbot.Application/Queries/GetChat.cs create mode 100644 Chatbot.Domain.Data/EntityTypeConfiguration/ChatConfiguration.cs create mode 100644 Chatbot.Domain.Data/Repositories/ChatRepository.cs create mode 100644 Chatbot.Domain/Entities/Chat.cs create mode 100644 Chatbot.Domain/Repositories/IChatRepository.cs diff --git a/Chatbot.Application/Mappings/MappingProfile.cs b/Chatbot.Application/Mappings/MappingProfile.cs index fa9ef3b..237b8ec 100644 --- a/Chatbot.Application/Mappings/MappingProfile.cs +++ b/Chatbot.Application/Mappings/MappingProfile.cs @@ -10,6 +10,7 @@ namespace Chatbot.Api.Application.Mappings { CreateMap(); CreateMap(); + CreateMap(); } } } \ No newline at end of file diff --git a/Chatbot.Application/Queries/GetChat.cs b/Chatbot.Application/Queries/GetChat.cs new file mode 100644 index 0000000..4b56bf4 --- /dev/null +++ b/Chatbot.Application/Queries/GetChat.cs @@ -0,0 +1,43 @@ +using AutoMapper; +using Chatbot.Api.Domain.Repositories; +using MediatR; +using System; +using System.Threading; +using System.Threading.Tasks; + +namespace Chatbot.Api.Application.Queries +{ + public class GetChat + { + public class Query : Query + { + public Guid SessionId { get; set; } + public Query() { } + } + + public class Model + { + public Guid ChatId { get; set; } + } + + public class QueryHandler : IRequestHandler + { + private readonly IChatRepository _chatRepository; + private readonly IMapper _mapper; + + public QueryHandler(IChatRepository chatRepository, IMapper mapper) + { + _chatRepository = chatRepository; + _mapper = mapper; + } + + public async Task Handle(Query request, CancellationToken cancellationToken) + { + var chat = await _chatRepository.CreateChat(request.SessionId); + var result = _mapper.Map(chat); + + return result; + } + } + } +} diff --git a/Chatbot.Domain.Data/DbContexts/ChatDbContext.cs b/Chatbot.Domain.Data/DbContexts/ChatDbContext.cs index 10d3aef..d0d6288 100644 --- a/Chatbot.Domain.Data/DbContexts/ChatDbContext.cs +++ b/Chatbot.Domain.Data/DbContexts/ChatDbContext.cs @@ -1,9 +1,13 @@ -using Microsoft.EntityFrameworkCore; +using Chatbot.Api.Domain.Data.EntityTypeConfiguration; +using Chatbot.Api.Domain.Entities; +using Microsoft.EntityFrameworkCore; namespace Chatbot.Api.Domain.Data.DbContexts { public class ChatDbContext : DbContext { + public DbSet Chats { get; set; } + public ChatDbContext(DbContextOptions options) : base(options) { @@ -11,6 +15,11 @@ namespace Chatbot.Api.Domain.Data.DbContexts base.ChangeTracker.AutoDetectChangesEnabled = true; } + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + modelBuilder.ApplyConfiguration(new ChatConfiguration()); + } } } diff --git a/Chatbot.Domain.Data/DependencyInjectionExtensions.cs b/Chatbot.Domain.Data/DependencyInjectionExtensions.cs index a93b8e3..74032c1 100644 --- a/Chatbot.Domain.Data/DependencyInjectionExtensions.cs +++ b/Chatbot.Domain.Data/DependencyInjectionExtensions.cs @@ -13,6 +13,7 @@ namespace Chatbot.Api.Domain.Data { services.AddScoped(); services.AddScoped(); + services.AddScoped(); services .AddDbContextPool( @@ -31,6 +32,15 @@ namespace Chatbot.Api.Domain.Data var connectionString = configuration.GetConnectionString("DatabaseConnection"); options.UseSqlServer(connectionString); }); + + services + .AddDbContextPool( + (serviceProvider, options) => + { + var configuration = serviceProvider.GetService(); + var connectionString = configuration.GetConnectionString("DatabaseConnection"); + options.UseSqlServer(connectionString); + }); } } } diff --git a/Chatbot.Domain.Data/EntityTypeConfiguration/ChatConfiguration.cs b/Chatbot.Domain.Data/EntityTypeConfiguration/ChatConfiguration.cs new file mode 100644 index 0000000..d12ec13 --- /dev/null +++ b/Chatbot.Domain.Data/EntityTypeConfiguration/ChatConfiguration.cs @@ -0,0 +1,14 @@ +using Chatbot.Api.Domain.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Chatbot.Api.Domain.Data.EntityTypeConfiguration +{ + class ChatConfiguration : IEntityTypeConfiguration + { + public void Configure(EntityTypeBuilder builder) + { + builder.ToTable("Chat").HasKey(key => key.ChatId); + } + } +} diff --git a/Chatbot.Domain.Data/Repositories/ChatRepository.cs b/Chatbot.Domain.Data/Repositories/ChatRepository.cs new file mode 100644 index 0000000..f2c98c4 --- /dev/null +++ b/Chatbot.Domain.Data/Repositories/ChatRepository.cs @@ -0,0 +1,33 @@ +using Chatbot.Api.Domain.Data.DbContexts; +using Chatbot.Api.Domain.Entities; +using Chatbot.Api.Domain.Repositories; +using System; +using System.Threading.Tasks; + +namespace Chatbot.Api.Domain.Data.Repositories +{ + class ChatRepository : IChatRepository + { + private readonly ChatDbContext _dbContext; + + public ChatRepository(ChatDbContext dbContext) + { + _dbContext = dbContext; + } + + public async Task CreateChat(Guid sessionId) + { + var chat = new Chat() + { + ChatId = Guid.NewGuid(), + SessionId = sessionId, + StartDate = DateTime.Now + }; + + _dbContext.Add(chat); + await _dbContext.SaveChangesAsync(); + + return chat; + } + } +} diff --git a/Chatbot.Domain/Entities/Chat.cs b/Chatbot.Domain/Entities/Chat.cs new file mode 100644 index 0000000..ff8a390 --- /dev/null +++ b/Chatbot.Domain/Entities/Chat.cs @@ -0,0 +1,12 @@ +using System; + +namespace Chatbot.Api.Domain.Entities +{ + public class Chat + { + public Guid ChatId { get; set; } + public Guid SessionId { get; set; } + public DateTime StartDate { get; set; } + public DateTime? StopDate { get; set; } + } +} diff --git a/Chatbot.Domain/Repositories/IChatRepository.cs b/Chatbot.Domain/Repositories/IChatRepository.cs new file mode 100644 index 0000000..82262d5 --- /dev/null +++ b/Chatbot.Domain/Repositories/IChatRepository.cs @@ -0,0 +1,11 @@ +using Chatbot.Api.Domain.Entities; +using System; +using System.Threading.Tasks; + +namespace Chatbot.Api.Domain.Repositories +{ + public interface IChatRepository + { + Task CreateChat(Guid sessionId); + } +}