From d3de1d29b62d72d18da2f35b23a713c4ab2721cc Mon Sep 17 00:00:00 2001 From: Denis Prokhorchik Date: Mon, 28 Mar 2022 05:12:23 +0300 Subject: [PATCH 1/4] feat(issue-175): add skeleton of small-talk --- ...oj => O2NextGen.Sdk.NetCore.Models.csproj} | 0 .../smalltalk/ChatEvent.cs | 7 ++ .../smalltalk/ChatMessage.cs | 10 +++ .../smalltalk/ChatMessageViewModel.cs | 9 ++ .../smalltalk/ChatSession.cs | 15 ++++ .../smalltalk/ChatSessionInvite.cs | 7 ++ ....NetCore.sln => O2NextGen.Sdk.NetCore.sln} | 4 +- ...Tests.O2NextGen.Sdk.NetCore.Models.csproj} | 0 .../smalltalk/ChatEventTests.cs | 6 ++ .../smalltalk/ChatMessageTests.cs | 7 ++ .../smalltalk/ChatSessionInviteTests.cs | 6 ++ .../smalltalk/ChatSessionTests.cs | 6 ++ .../Controllers/ChatController.cs | 56 +++++++++++- .../Controllers/UserController.cs | 34 ++++++++ .../Helpers/ServiceCollectionExtensions.cs | 13 +-- .../Mappings/ChatMessageMappings.cs | 62 +++++++++++++ .../O2NextGen.SmallTalk.Api.csproj | 2 + .../Services/IChatService.cs | 15 ---- .../Models/ChatEventModel.cs | 6 ++ .../Models/ChatMessageModel.cs | 10 +++ .../Models/ChatSessionInviteModel.cs | 6 ++ .../Models/ChatSessionModel.cs | 12 +++ .../Models/SessionModel.cs | 25 ++++++ .../O2NextGen.SmallTalk.Business.csproj | 2 +- .../Services/IAccessManager.cs | 7 ++ .../Services/IChatManager.cs | 12 +++ .../Services/IChatService.cs | 16 ++++ .../Services/ICustomerManager.cs | 7 ++ .../Services/ISessionManager.cs | 16 ++++ .../Services/IUserManager.cs | 10 +++ .../O2NextGen.SmallTalk.Impl.csproj | 4 + .../Services/ChatManager.cs | 51 +++++++++++ .../Services/Creator.cs | 50 +++++++++++ .../Services/InMemoryChatService.cs | 32 ++++--- .../Services/InMemorySessionManager.cs | 87 +++++++++++++++++++ .../smalltalk/O2NextGen.SmallTalk.sln | 44 +++++++--- 36 files changed, 605 insertions(+), 51 deletions(-) rename src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/{O2NG.Sdk.NetCore.Models.csproj => O2NextGen.Sdk.NetCore.Models.csproj} (100%) create mode 100644 src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatEvent.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessage.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageViewModel.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSession.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInvite.cs rename src/SDKs/O2NG.Sdk.NetCore/{O2NG.Sdk.NetCore.sln => O2NextGen.Sdk.NetCore.sln} (79%) rename src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/{Tests.O2NG.Sdk.NetCore.Models.csproj => Tests.O2NextGen.Sdk.NetCore.Models.csproj} (100%) create mode 100644 src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatEventTests.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageTests.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInviteTests.cs create mode 100644 src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionTests.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/UserController.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs delete mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/IChatService.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatEventModel.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatMessageModel.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionInviteModel.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionModel.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/SessionModel.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IAccessManager.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatService.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ICustomerManager.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IUserManager.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs rename src/Services/smalltalk/{O2NextGen.SmallTalk.Api => O2NextGen.SmallTalk.Impl}/Services/InMemoryChatService.cs (56%) create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/O2NG.Sdk.NetCore.Models.csproj b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/O2NextGen.Sdk.NetCore.Models.csproj similarity index 100% rename from src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/O2NG.Sdk.NetCore.Models.csproj rename to src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/O2NextGen.Sdk.NetCore.Models.csproj diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatEvent.cs b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatEvent.cs new file mode 100644 index 00000000..893fec09 --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatEvent.cs @@ -0,0 +1,7 @@ +namespace O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public class ChatEvent + { + public long Id { get; set; } + } +} \ No newline at end of file diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessage.cs b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessage.cs new file mode 100644 index 00000000..5152b63e --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessage.cs @@ -0,0 +1,10 @@ +namespace O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public class ChatMessage + { + public long Id { get; set; } + public long SenderId { get; set; } + public long RecipientId { get; set; } + public string Message { get; set; } + } +} \ No newline at end of file diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageViewModel.cs b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageViewModel.cs new file mode 100644 index 00000000..99e020e8 --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageViewModel.cs @@ -0,0 +1,9 @@ +namespace O2NextGen.Sdk.NetCore.Models.smalltalk +{ + + public class ChatMessageViewModel + { + + } + +} \ No newline at end of file diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSession.cs b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSession.cs new file mode 100644 index 00000000..330d14bd --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSession.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace O2NextGen.Sdk.NetCore.Models.smalltalk +{ + + public class ChatSession + { + public long Id { get; set; } + public int Agents { get; set; } + public List Messages { get; set; } + public List Events { get; set; } + public List Invites { get; set; } + public string Name { get; set; } + } +} \ No newline at end of file diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInvite.cs b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInvite.cs new file mode 100644 index 00000000..26aabc5f --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInvite.cs @@ -0,0 +1,7 @@ +namespace O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public abstract class ChatSessionInvite + { + public long Id { get; set; } + } +} \ No newline at end of file diff --git a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.sln b/src/SDKs/O2NG.Sdk.NetCore/O2NextGen.Sdk.NetCore.sln similarity index 79% rename from src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.sln rename to src/SDKs/O2NG.Sdk.NetCore/O2NextGen.Sdk.NetCore.sln index 797381b5..86f0038e 100644 --- a/src/SDKs/O2NG.Sdk.NetCore/O2NG.Sdk.NetCore.sln +++ b/src/SDKs/O2NG.Sdk.NetCore/O2NextGen.Sdk.NetCore.sln @@ -3,11 +3,11 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.0.32112.339 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NG.Sdk.NetCore.Models", "O2NG.Sdk.NetCore.Models\O2NG.Sdk.NetCore.Models.csproj", "{89B48F28-7C0F-4329-9314-89511DB28429}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NextGen.Sdk.NetCore.Models", "O2NG.Sdk.NetCore.Models\O2NextGen.Sdk.NetCore.Models.csproj", "{89B48F28-7C0F-4329-9314-89511DB28429}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{BEBD1434-109A-46D3-8377-50409D9E15FC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.O2NG.Sdk.NetCore.Models", "Tests\Tests.O2NG.Sdk.NetCore.Models\Tests.O2NG.Sdk.NetCore.Models.csproj", "{9FA54822-4861-41BB-868F-476C517EF5D9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.O2NextGen.Sdk.NetCore.Models", "Tests\Tests.O2NG.Sdk.NetCore.Models\Tests.O2NextGen.Sdk.NetCore.Models.csproj", "{9FA54822-4861-41BB-868F-476C517EF5D9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/Tests.O2NG.Sdk.NetCore.Models.csproj b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/Tests.O2NextGen.Sdk.NetCore.Models.csproj similarity index 100% rename from src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/Tests.O2NG.Sdk.NetCore.Models.csproj rename to src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/Tests.O2NextGen.Sdk.NetCore.Models.csproj diff --git a/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatEventTests.cs b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatEventTests.cs new file mode 100644 index 00000000..4bb1ae30 --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatEventTests.cs @@ -0,0 +1,6 @@ +namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public class ChatEventTests + { + } +} diff --git a/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageTests.cs b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageTests.cs new file mode 100644 index 00000000..8f2db778 --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatMessageTests.cs @@ -0,0 +1,7 @@ +namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public class ChatMessageTests + { + + } +} diff --git a/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInviteTests.cs b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInviteTests.cs new file mode 100644 index 00000000..5883f5ee --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionInviteTests.cs @@ -0,0 +1,6 @@ +namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public class ChatSessionInviteTests + { + } +} diff --git a/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionTests.cs b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionTests.cs new file mode 100644 index 00000000..7dc0c09b --- /dev/null +++ b/src/SDKs/O2NG.Sdk.NetCore/Tests/Tests.O2NG.Sdk.NetCore.Models/smalltalk/ChatSessionTests.cs @@ -0,0 +1,6 @@ +namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk +{ + public class ChatSessionTests + { + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs index 9af8bd78..e377ab7e 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs @@ -1,25 +1,35 @@ using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; +using O2NextGen.SmallTalk.Api.Mappings; +using O2NextGen.SmallTalk.Business.Models; +using O2NextGen.SmallTalk.Business.Services; +using O2NG.Sdk.NetCore.Models.smalltalk; +using System.Threading.Tasks; namespace O2NextGen.SmallTalk.Api.Controllers { + [Route("api/chat")] + [ApiController] public class ChatController : ControllerBase { #region Fields private readonly IHostingEnvironment _environment; private readonly ILogger _logger; + private readonly IChatManager _sessionManager; #endregion #region Ctors - public ChatController(IHostingEnvironment environment, ILogger logger) + public ChatController(IHostingEnvironment environment, ILogger logger, + IChatManager chatManager) { _environment = environment; _logger = logger; + _sessionManager = chatManager; } #endregion @@ -27,8 +37,48 @@ public ChatController(IHostingEnvironment environment, ILogger GetMessagesAsync() + { + var resultSession = await _sessionManager.GetMessages(); + + return Ok(resultSession.ToViewModel()); + } + + [HttpPost] + [HttpPut] + [Route("")] + public async Task SendMessage(ChatMessage chatMessage) + { + if (chatMessage == null) + throw new System.ArgumentNullException(nameof(chatMessage)); + + ChatMessageModel resultSession = await _sessionManager.AddMessage(chatMessage.ToModel()); + + return Ok(resultSession.ToViewModel()); + } + + public void UpdateMessage() + { + throw new System.NotImplementedException(); + } + + public void RemoveMessage() + { + throw new System.NotImplementedException(); + } #endregion } -} +} \ No newline at end of file diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/UserController.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/UserController.cs new file mode 100644 index 00000000..0aa5bc70 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/UserController.cs @@ -0,0 +1,34 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; + +namespace O2NextGen.SmallTalk.Api.Controllers +{ + public class UserController: ControllerBase + { + #region Fields + + private readonly IHostingEnvironment _environment; + private readonly ILogger _logger; + + #endregion + + + #region Ctors + + public UserController(IHostingEnvironment environment, ILogger logger) + { + _environment = environment; + _logger = logger; + } + + #endregion + + + #region Methods + + + + #endregion + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Helpers/ServiceCollectionExtensions.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Helpers/ServiceCollectionExtensions.cs index 4e2013ac..d0105f3b 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Helpers/ServiceCollectionExtensions.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Helpers/ServiceCollectionExtensions.cs @@ -2,6 +2,8 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using O2NextGen.SmallTalk.Api.Services; +using O2NextGen.SmallTalk.Business.Services; +using O2NextGen.SmallTalk.Impl.Services; using System; namespace O2NextGen.SmallTalk.Api.Helpers @@ -33,19 +35,18 @@ public static IServiceCollection AddBusiness(this IServiceCollection services) //more business services... services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); return services; } public static IServiceCollection AddRequiredMvcComponents(this IServiceCollection services) { - //services.AddTransient(); - - var mvcBuilder = services.AddMvc(options => - { - // options.Filters.Add(); + var mvcBuilder = services.AddMvcCore(options => { + //options.Filters.Add(); }); mvcBuilder.SetCompatibilityVersion(CompatibilityVersion.Version_2_2); - + mvcBuilder.AddJsonFormatters(); return services; } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs new file mode 100644 index 00000000..745dcd29 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs @@ -0,0 +1,62 @@ +using O2NextGen.SmallTalk.Business.Models; +using O2NG.Sdk.NetCore.Models.smalltalk; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace O2NextGen.SmallTalk.Api.Mappings +{ + public static class ChatMessageMappings + { + public static ChatMessage ToViewModel(this ChatMessageModel model) + { + if (model == null) + return null; + + var viewModel = new ChatMessage(); + + //Bindings + viewModel.Id = model.Id; + viewModel.Message = model.Message; + viewModel.SenderId = model.SenderId; + viewModel.RecipientId = model.RecipientId; + + return viewModel; + } + + public static ChatMessageModel ToModel(this ChatMessage viewModel) + { + if (viewModel == null) + return null; + + var model = new ChatMessageModel(); + + //Bindings + model.Id = viewModel.Id; + model.Message = viewModel.Message; + model.SenderId = viewModel.SenderId; + model.RecipientId = viewModel.RecipientId; + + return model; + } + + public static IReadOnlyCollection ToViewModel( + this IReadOnlyCollection models) + { + if (models.Count == 0) + { + return Array.Empty(); + } + + var subscription = new ChatMessage[models.Count]; + var i = 0; + foreach (var model in models) + { + subscription[i] = ToViewModel(model); + ++i; + } + + return new ReadOnlyCollection(subscription); + } + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj index 926e1e12..07394ef8 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj @@ -15,9 +15,11 @@ + + diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/IChatService.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/IChatService.cs deleted file mode 100644 index f23036e4..00000000 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/IChatService.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace O2NextGen.SmallTalk.Api.Services -{ - public interface IChatService - { - Task> GetAllAsync(CancellationToken ct); - Task GetByIdAsync(long id, CancellationToken ct); - Task UpdateAsync(ChatSession certificate, CancellationToken ct); - Task AddAsync(ChatSession certificate, CancellationToken ct); - Task RemoveAsync(long id, CancellationToken ct); - } -} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatEventModel.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatEventModel.cs new file mode 100644 index 00000000..8ac14d22 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatEventModel.cs @@ -0,0 +1,6 @@ +namespace O2NextGen.SmallTalk.Business.Models +{ + public class ChatEventModel + { + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatMessageModel.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatMessageModel.cs new file mode 100644 index 00000000..d18feece --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatMessageModel.cs @@ -0,0 +1,10 @@ +namespace O2NextGen.SmallTalk.Business.Models +{ + public class ChatMessageModel + { + public long Id { get; set; } + public string Message { get; set; } + public long SenderId { get; set; } + public long RecipientId { get; set; } + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionInviteModel.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionInviteModel.cs new file mode 100644 index 00000000..140968d1 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionInviteModel.cs @@ -0,0 +1,6 @@ +namespace O2NextGen.SmallTalk.Business.Models +{ + public class ChatSessionInviteModel + { + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionModel.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionModel.cs new file mode 100644 index 00000000..89db1317 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/ChatSessionModel.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace O2NextGen.SmallTalk.Business.Models +{ + public class ChatSessionModel + { + public long Id { get; set; } + public List Events { get; set; } + public List Messages { get; set; } + public List Invites { get; set; } + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/SessionModel.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/SessionModel.cs new file mode 100644 index 00000000..29c87bd3 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Models/SessionModel.cs @@ -0,0 +1,25 @@ +namespace O2NextGen.SmallTalk.Api.Models +{ + public class SessionModel + { + public long Id { get; set; } + public long CustomerId { get; set; } + + } + + public class UserModel + { + + } + + public class DepartmentModel + { + public string Name { get; set; } + } + + public class SessionMessageModel + { + public long Id { get; set; } + public string Message { get; set; } + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/O2NextGen.SmallTalk.Business.csproj b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/O2NextGen.SmallTalk.Business.csproj index 17ca88b0..ec0b0b9c 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/O2NextGen.SmallTalk.Business.csproj +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/O2NextGen.SmallTalk.Business.csproj @@ -1,4 +1,4 @@ - + netcoreapp2.2 diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IAccessManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IAccessManager.cs new file mode 100644 index 00000000..321263d0 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IAccessManager.cs @@ -0,0 +1,7 @@ +namespace O2NextGen.SmallTalk.Api.Services +{ + public interface IAccessManager + { + + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs new file mode 100644 index 00000000..bb1b170f --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs @@ -0,0 +1,12 @@ +using O2NextGen.SmallTalk.Business.Models; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace O2NextGen.SmallTalk.Business.Services +{ + public interface IChatManager + { + Task AddMessage(ChatMessageModel chatMessageModel); + Task> GetMessages(); + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatService.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatService.cs new file mode 100644 index 00000000..1b9de146 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatService.cs @@ -0,0 +1,16 @@ +using O2NextGen.SmallTalk.Business.Models; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace O2NextGen.SmallTalk.Api.Services +{ + public interface IChatService + { + Task> GetAllAsync(CancellationToken ct); + Task GetByIdAsync(long id, CancellationToken ct); + Task UpdateAsync(ChatSessionModel certificate, CancellationToken ct); + Task AddAsync(ChatSessionModel certificate, CancellationToken ct); + Task RemoveAsync(long id, CancellationToken ct); + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ICustomerManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ICustomerManager.cs new file mode 100644 index 00000000..b5d8b5ff --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ICustomerManager.cs @@ -0,0 +1,7 @@ +namespace O2NextGen.SmallTalk.Api.Services +{ + public interface ICustomerManager + { + + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs new file mode 100644 index 00000000..c8267b77 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs @@ -0,0 +1,16 @@ +using O2NextGen.SmallTalk.Business.Models; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace O2NextGen.SmallTalk.Api.Services +{ + public interface ISessionManager + { + Task> GetAllAsync(CancellationToken ct); + Task AddSessionAsync(ChatSessionModel chatSession, CancellationToken ct); + Task ExistSessionAsync(); + Task GetSessionAsync(); + Task> GetMessages(CancellationToken ct); + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IUserManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IUserManager.cs new file mode 100644 index 00000000..073d0261 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IUserManager.cs @@ -0,0 +1,10 @@ +namespace O2NextGen.SmallTalk.Api.Services +{ + public interface IUserManager + { + void GetUser(); + void GetUsers(); + void GetAgents(); + void GetAgent(); + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/O2NextGen.SmallTalk.Impl.csproj b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/O2NextGen.SmallTalk.Impl.csproj index 17ca88b0..d913f80d 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/O2NextGen.SmallTalk.Impl.csproj +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/O2NextGen.SmallTalk.Impl.csproj @@ -4,4 +4,8 @@ netcoreapp2.2 + + + + diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs new file mode 100644 index 00000000..194fb03b --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs @@ -0,0 +1,51 @@ +using O2NextGen.SmallTalk.Api.Services; +using O2NextGen.SmallTalk.Business.Models; +using O2NextGen.SmallTalk.Business.Services; +using System.Collections.Generic; +using System.Threading.Tasks; + +namespace O2NextGen.SmallTalk.Impl.Services +{ + public class ChatManager : IChatManager + { + private readonly ISessionManager _sessionManager; + + public ChatManager(ISessionManager sessionManager) + { + this._sessionManager = sessionManager ?? + throw new System.ArgumentNullException(nameof(sessionManager)); + } + + + public async Task AddMessage(ChatMessageModel chatMessageModel) + { + var chatMessage = Creator.CreateObject(); + chatMessage.Message = chatMessageModel.Message; + + + ChatSessionModel chatSession = null; + //Checking if a session exists or not + if (await _sessionManager.ExistSessionAsync()) + { + chatSession = await _sessionManager.GetSessionAsync(); + chatSession.Messages.Add(chatMessage); + } + else + { + // new session + var newChatSession = Creator.CreateObject(); + newChatSession.Messages.Add(chatMessage); + chatSession = await _sessionManager.AddSessionAsync(newChatSession, System.Threading.CancellationToken.None); + } + + + return chatMessage; + } + + public async Task> GetMessages() + { + var result = await _sessionManager.GetMessages(System.Threading.CancellationToken.None); + return result; + } + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs new file mode 100644 index 00000000..147997b2 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs @@ -0,0 +1,50 @@ +using O2NextGen.SmallTalk.Business.Models; +using System; + +namespace O2NextGen.SmallTalk.Impl.Services +{ + public class ChatSessionCreator + { + internal static object Create() + { + var model = new ChatSessionModel(); + SetDefaultValues(model); + //SetSystemEvents(chatSession); + return model; + } + + private static void SetSystemEvents(ChatSessionModel chatSessionModel) + { + throw new NotImplementedException(); + } + + private static void SetDefaultValues(ChatSessionModel chatSessionModel) + { + chatSessionModel.Events = new System.Collections.Generic.List(); + chatSessionModel.Messages = new System.Collections.Generic.List(); + chatSessionModel.Invites = new System.Collections.Generic.List(); + } + } + + + internal class Creator where T : class + { + internal static T CreateObject() + { + if(typeof(T) == typeof(ChatSessionModel)) + return (T)ChatSessionCreator.Create(); + if(typeof(T) == typeof(ChatMessageModel)) + return (T)ChatMessageCreator.Create(); + return null; + } + } + + internal class ChatMessageCreator + { + internal static object Create() + { + var chatMessage = new ChatMessageModel(); + return chatMessage; + } + } +} \ No newline at end of file diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/InMemoryChatService.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemoryChatService.cs similarity index 56% rename from src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/InMemoryChatService.cs rename to src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemoryChatService.cs index 45dede40..6c60c218 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/InMemoryChatService.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemoryChatService.cs @@ -1,19 +1,31 @@ -using System.Collections.Generic; +using O2NextGen.SmallTalk.Business.Models; +using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace O2NextGen.SmallTalk.Api.Services { + public class InMemoryChatService : IChatService { #region Fields - private static readonly List Sessions = new List() + private static readonly List Sessions = new List() { - new ChatSession() + new ChatSessionModel() { - Id = 1, Name = "First" + Id = 1, + Messages = new List() + { + new ChatMessageModel() + { + Id=1, + Message = "First massage", + SenderId = 1, + RecipientId = 2, + } + } } }; private long _currentId; @@ -32,31 +44,31 @@ public InMemoryChatService() #region Methods - public async Task> GetAllAsync(CancellationToken ct) + public async Task> GetAllAsync(CancellationToken ct) { await Task.Delay(3000, ct); - return await Task.FromResult>(Sessions.AsReadOnly()); + return await Task.FromResult>(Sessions.AsReadOnly()); } - public async Task GetByIdAsync(long id, CancellationToken ct) + public async Task GetByIdAsync(long id, CancellationToken ct) { await Task.Delay(3000, ct); return await Task.FromResult(Sessions.SingleOrDefault(g => g.Id == id)); } - public async Task UpdateAsync(ChatSession certificate, CancellationToken ct) + public async Task UpdateAsync(ChatSessionModel certificate, CancellationToken ct) { await Task.Delay(5000, ct); var toUpdate = Sessions.SingleOrDefault(g => g.Id == certificate.Id); if (toUpdate == null) return null; - toUpdate.Name = certificate.Name; + toUpdate.Messages = certificate.Messages; return await Task.FromResult(toUpdate); } - public async Task AddAsync(ChatSession certificate, CancellationToken ct) + public async Task AddAsync(ChatSessionModel certificate, CancellationToken ct) { await Task.Delay(3000, ct); certificate.Id = ++_currentId; diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs new file mode 100644 index 00000000..e81874e6 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs @@ -0,0 +1,87 @@ +using O2NextGen.SmallTalk.Business.Models; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace O2NextGen.SmallTalk.Api.Services +{ + public class InMemorySessionManager : ISessionManager + { + #region Fields + + private static readonly List Sessions = new List() + { + new ChatSessionModel() + { + Id = 1, + Messages = new List() + { + new ChatMessageModel() + { + Id=1, + SenderId=1, + RecipientId=2, + Message = "Test message" + }, + new ChatMessageModel() + { + Id=2, + SenderId=1, + RecipientId=2, + Message = "Test message 2" + }, + new ChatMessageModel() + { + Id=2, + SenderId=2, + RecipientId=1, + Message = "Back Test message 1" + }, + } + } + }; + private long _currentId; + + #endregion + + #region Ctors + + public InMemorySessionManager() + { + _currentId = Sessions.Count(); + } + + #endregion + public async Task> GetAllAsync(CancellationToken ct) + { + await Task.Delay(3000, ct); + return await Task.FromResult>(Sessions.AsReadOnly()); + } + + public async Task AddSessionAsync(ChatSessionModel chatSession, CancellationToken ct) + { + await Task.Delay(3000, ct); + chatSession.Id = ++_currentId; + Sessions.Add(chatSession); + return await Task.FromResult(chatSession); + } + + public async Task ExistSessionAsync() + { + return await Task.FromResult(false); + } + + public Task GetSessionAsync() + { + throw new System.NotImplementedException(); + } + + public async Task> GetMessages(CancellationToken ct) + { + await Task.Delay(3000, ct); + var messages = Sessions.First().Messages; + return await Task.FromResult>(messages.AsReadOnly()); + } + } +} diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.sln b/src/Services/smalltalk/O2NextGen.SmallTalk.sln index 4fd06561..7819de1c 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.sln +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.sln @@ -1,27 +1,33 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 25.0.1700.0 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.32112.339 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{64D081A5-7679-4BA4-B1D9-9577379FF16F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.SmallTalk.Api", "O2NextGen.SmallTalk.Api\O2NextGen.SmallTalk.Api.csproj", "{4D3AF6CE-4262-4F0E-9DAC-86A4781C7D96}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NextGen.SmallTalk.Api", "O2NextGen.SmallTalk.Api\O2NextGen.SmallTalk.Api.csproj", "{4D3AF6CE-4262-4F0E-9DAC-86A4781C7D96}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegrationTests.O2NextGen.SmallTalk.Api", "Tests\IntegrationTests.O2NextGen.SmallTalk.Api\IntegrationTests.O2NextGen.SmallTalk.Api.csproj", "{9BBF5376-E08B-4181-9187-2BE4A8787CF4}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegrationTests.O2NextGen.SmallTalk.Api", "Tests\IntegrationTests.O2NextGen.SmallTalk.Api\IntegrationTests.O2NextGen.SmallTalk.Api.csproj", "{9BBF5376-E08B-4181-9187-2BE4A8787CF4}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.O2NextGen.SmallTalk.Api", "Tests\IntegrationTests.O2NextGen.SmallTalk.Api\Tests.O2NextGen.SmallTalk.Api\Tests.O2NextGen.SmallTalk.Api.csproj", "{39D1C8DC-64B2-4496-8B10-D04B0EB82BEA}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.O2NextGen.SmallTalk.Api", "Tests\IntegrationTests.O2NextGen.SmallTalk.Api\Tests.O2NextGen.SmallTalk.Api\Tests.O2NextGen.SmallTalk.Api.csproj", "{39D1C8DC-64B2-4496-8B10-D04B0EB82BEA}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.SmallTalk.Data", "O2NextGen.SmallTalk.Data\O2NextGen.SmallTalk.Data.csproj", "{08CE530B-8272-4A10-A65F-318BBD863B47}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NextGen.SmallTalk.Data", "O2NextGen.SmallTalk.Data\O2NextGen.SmallTalk.Data.csproj", "{08CE530B-8272-4A10-A65F-318BBD863B47}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.SmallTalk.Impl", "O2NextGen.SmallTalk.Impl\O2NextGen.SmallTalk.Impl.csproj", "{D02DEA98-B9B8-419D-A770-435C6EC5A2E6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NextGen.SmallTalk.Impl", "O2NextGen.SmallTalk.Impl\O2NextGen.SmallTalk.Impl.csproj", "{D02DEA98-B9B8-419D-A770-435C6EC5A2E6}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.SmallTalk.Business", "O2NextGen.SmallTalk.Business\O2NextGen.SmallTalk.Business.csproj", "{03EA2F69-4F9E-418E-9401-D95AAC4D92C8}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NextGen.SmallTalk.Business", "O2NextGen.SmallTalk.Business\O2NextGen.SmallTalk.Business.csproj", "{03EA2F69-4F9E-418E-9401-D95AAC4D92C8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.O2NextGen.SmallTalk.Business", "Tests\Tests.O2NextGen.SmallTalk.Business\Tests.O2NextGen.SmallTalk.Business.csproj", "{B025EE5D-EA23-4FEF-8503-B4D819344EFF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.O2NextGen.SmallTalk.Business", "Tests\Tests.O2NextGen.SmallTalk.Business\Tests.O2NextGen.SmallTalk.Business.csproj", "{B025EE5D-EA23-4FEF-8503-B4D819344EFF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.O2NextGen.SmallTalk.Data", "Tests\Tests.O2NextGen.SmallTalk.Data\Tests.O2NextGen.SmallTalk.Data.csproj", "{750729AB-58E4-470C-AB8E-4AC0ED1740BF}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.O2NextGen.SmallTalk.Data", "Tests\Tests.O2NextGen.SmallTalk.Data\Tests.O2NextGen.SmallTalk.Data.csproj", "{750729AB-58E4-470C-AB8E-4AC0ED1740BF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.O2NextGen.SmallTalk.Impl", "Tests\Tests.O2NextGen.SmallTalk.Impl\Tests.O2NextGen.SmallTalk.Impl.csproj", "{D1347913-7AF3-44FF-8E98-908914004ACD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.O2NextGen.SmallTalk.Impl", "Tests\Tests.O2NextGen.SmallTalk.Impl\Tests.O2NextGen.SmallTalk.Impl.csproj", "{D1347913-7AF3-44FF-8E98-908914004ACD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SDKs", "SDKs", "{B03A4DA5-C40A-4C53-924E-59E50D1AD1D8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NG.Sdk.NetCore.Models", "..\..\SDKs\O2NG.Sdk.NetCore\O2NG.Sdk.NetCore.Models\O2NG.Sdk.NetCore.Models.csproj", "{B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NG.Sdk.UnitTester.NetCore", "..\..\SDKs\O2NG.Tester.Sdk\O2NG.Sdk.UnitTester.NetCore\O2NG.Sdk.UnitTester.NetCore.csproj", "{EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -65,18 +71,28 @@ Global {D1347913-7AF3-44FF-8E98-908914004ACD}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1347913-7AF3-44FF-8E98-908914004ACD}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1347913-7AF3-44FF-8E98-908914004ACD}.Release|Any CPU.Build.0 = Release|Any CPU + {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Release|Any CPU.Build.0 = Release|Any CPU + {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {22C24FCD-AA42-4E4F-B590-2632C8AAFE58} - EndGlobalSection GlobalSection(NestedProjects) = preSolution {9BBF5376-E08B-4181-9187-2BE4A8787CF4} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} {39D1C8DC-64B2-4496-8B10-D04B0EB82BEA} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} {B025EE5D-EA23-4FEF-8503-B4D819344EFF} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} {750729AB-58E4-470C-AB8E-4AC0ED1740BF} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} {D1347913-7AF3-44FF-8E98-908914004ACD} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} + {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD} = {B03A4DA5-C40A-4C53-924E-59E50D1AD1D8} + {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D} = {B03A4DA5-C40A-4C53-924E-59E50D1AD1D8} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {22C24FCD-AA42-4E4F-B590-2632C8AAFE58} EndGlobalSection EndGlobal From daaad8fbf52e94bcbed933e1d9c2120234222618 Mon Sep 17 00:00:00 2001 From: Denis Prokhorchik Date: Mon, 28 Mar 2022 05:28:10 +0300 Subject: [PATCH 2/4] feat(issue-175): update the controller logic of small-talk --- .../Controllers/ChatController.cs | 84 ------------------ .../Controllers/MessageController.cs | 88 +++++++++++++++++++ .../Mappings/ChatMessageMappings.cs | 4 +- .../O2NextGen.SmallTalk.Api.csproj | 1 + .../Services/ChatSession.cs | 8 -- .../Services/IChatManager.cs | 8 +- .../Services/ChatManager.cs | 27 ++++-- .../smalltalk/O2NextGen.SmallTalk.sln | 19 ++-- .../Mappings/ChatMessageMappingsTests.cs | 6 ++ 9 files changed, 131 insertions(+), 114 deletions(-) delete mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs create mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs delete mode 100644 src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/ChatSession.cs create mode 100644 src/Services/smalltalk/Tests/IntegrationTests.O2NextGen.SmallTalk.Api/Tests.O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappingsTests.cs diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs deleted file mode 100644 index e377ab7e..00000000 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs +++ /dev/null @@ -1,84 +0,0 @@ -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Logging; -using O2NextGen.SmallTalk.Api.Mappings; -using O2NextGen.SmallTalk.Business.Models; -using O2NextGen.SmallTalk.Business.Services; -using O2NG.Sdk.NetCore.Models.smalltalk; -using System.Threading.Tasks; - -namespace O2NextGen.SmallTalk.Api.Controllers -{ - [Route("api/chat")] - [ApiController] - public class ChatController : ControllerBase - { - #region Fields - - private readonly IHostingEnvironment _environment; - private readonly ILogger _logger; - private readonly IChatManager _sessionManager; - - #endregion - - - #region Ctors - - public ChatController(IHostingEnvironment environment, ILogger logger, - IChatManager chatManager) - { - _environment = environment; - _logger = logger; - _sessionManager = chatManager; - } - - #endregion - - - #region Methods - - public void GetMessageDetail() - { - throw new System.NotImplementedException(); - } - - public void GetMessage() - { - throw new System.NotImplementedException(); - } - - [HttpGet] - [Route("")] - public async Task GetMessagesAsync() - { - var resultSession = await _sessionManager.GetMessages(); - - return Ok(resultSession.ToViewModel()); - } - - [HttpPost] - [HttpPut] - [Route("")] - public async Task SendMessage(ChatMessage chatMessage) - { - if (chatMessage == null) - throw new System.ArgumentNullException(nameof(chatMessage)); - - ChatMessageModel resultSession = await _sessionManager.AddMessage(chatMessage.ToModel()); - - return Ok(resultSession.ToViewModel()); - } - - public void UpdateMessage() - { - throw new System.NotImplementedException(); - } - - public void RemoveMessage() - { - throw new System.NotImplementedException(); - } - - #endregion - } -} \ No newline at end of file diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs new file mode 100644 index 00000000..32e6ca16 --- /dev/null +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs @@ -0,0 +1,88 @@ +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; +using O2NextGen.Sdk.NetCore.Models.smalltalk; +using O2NextGen.SmallTalk.Api.Mappings; +using O2NextGen.SmallTalk.Business.Models; +using O2NextGen.SmallTalk.Business.Services; +using System.Threading; +using System.Threading.Tasks; + +namespace O2NextGen.SmallTalk.Api.Controllers +{ + [Route("api/message")] + [ApiController] + public class MessageController : ControllerBase + { + #region Fields + + private readonly IHostingEnvironment _environment; + private readonly ILogger _logger; + private readonly IChatManager _chatManager; + + #endregion + + + #region Ctors + + public MessageController(IHostingEnvironment environment, ILogger logger, + IChatManager chatManager) + { + _environment = environment; + _logger = logger; + _chatManager = chatManager; + } + + #endregion + + + #region Methods + + [HttpGet] + [Route("{id}")] + public async Task GetByIdAsync(long id, CancellationToken ct) + { + var resultSession = await _chatManager.GetMessageByIdAsync(id, ct); + return Ok(resultSession.ToViewModel()); + } + + [HttpGet] + [Route("")] + public async Task GetMessagesAsync(CancellationToken ct) + { + var resultSession = await _chatManager.GetMessages(ct); + return Ok(resultSession.ToViewModel()); + } + + [HttpPost] + [HttpPut] + [Route("")] + public async Task AddAsync(ChatMessage chatMessage, CancellationToken ct) + { + if (chatMessage == null) + throw new System.ArgumentNullException(nameof(chatMessage)); + + ChatMessageModel resultSession = await _chatManager.AddMessage(chatMessage.ToModel(), ct); + + return Ok(resultSession.ToViewModel()); + } + + [HttpPut] + [Route("id")] + public async Task UpdateAsync(long id, ChatMessage model, CancellationToken ct) + { + var certificate = await _chatManager.UpdateMessageAsync(model.ToModel(), ct); + return Ok(certificate.ToViewModel()); + } + + [HttpDelete] + [Route("id")] + public async Task RemoveAsync(long id, CancellationToken ct) + { + await _chatManager.RemoveMessageAsync(id, ct); + return NoContent(); + } + + #endregion + } +} \ No newline at end of file diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs index 745dcd29..8fce8f1b 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappings.cs @@ -1,5 +1,5 @@ -using O2NextGen.SmallTalk.Business.Models; -using O2NG.Sdk.NetCore.Models.smalltalk; +using O2NextGen.Sdk.NetCore.Models.smalltalk; +using O2NextGen.SmallTalk.Business.Models; using System; using System.Collections.Generic; using System.Collections.ObjectModel; diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj index 07394ef8..b8c9ae74 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj @@ -19,6 +19,7 @@ + diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/ChatSession.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/ChatSession.cs deleted file mode 100644 index 014cec81..00000000 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Services/ChatSession.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace O2NextGen.SmallTalk.Api.Services -{ - public class ChatSession - { - public long Id { get; set; } - public string Name { get; set; } - } -} \ No newline at end of file diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs index bb1b170f..a9809ab6 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs @@ -1,12 +1,16 @@ using O2NextGen.SmallTalk.Business.Models; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace O2NextGen.SmallTalk.Business.Services { public interface IChatManager { - Task AddMessage(ChatMessageModel chatMessageModel); - Task> GetMessages(); + Task AddMessage(ChatMessageModel chatMessageModel, CancellationToken ct); + Task> GetMessages(CancellationToken ct); + Task RemoveMessageAsync(long id, CancellationToken ct); + Task UpdateMessageAsync(ChatMessageModel chatMessageModel, CancellationToken ct); + Task GetMessageByIdAsync(long id, CancellationToken ct); } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs index 194fb03b..f0c537ea 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs @@ -2,6 +2,7 @@ using O2NextGen.SmallTalk.Business.Models; using O2NextGen.SmallTalk.Business.Services; using System.Collections.Generic; +using System.Threading; using System.Threading.Tasks; namespace O2NextGen.SmallTalk.Impl.Services @@ -16,8 +17,8 @@ public ChatManager(ISessionManager sessionManager) throw new System.ArgumentNullException(nameof(sessionManager)); } - - public async Task AddMessage(ChatMessageModel chatMessageModel) + #region Messages + public async Task AddMessage(ChatMessageModel chatMessageModel, CancellationToken ct) { var chatMessage = Creator.CreateObject(); chatMessage.Message = chatMessageModel.Message; @@ -35,17 +36,33 @@ public async Task AddMessage(ChatMessageModel chatMessageModel // new session var newChatSession = Creator.CreateObject(); newChatSession.Messages.Add(chatMessage); - chatSession = await _sessionManager.AddSessionAsync(newChatSession, System.Threading.CancellationToken.None); + chatSession = await _sessionManager.AddSessionAsync(newChatSession, ct); } return chatMessage; } - public async Task> GetMessages() + public Task GetMessageByIdAsync(long id, CancellationToken ct) { - var result = await _sessionManager.GetMessages(System.Threading.CancellationToken.None); + throw new System.NotImplementedException(); + } + + public async Task> GetMessages(CancellationToken ct) + { + var result = await _sessionManager.GetMessages(ct); return result; } + + public Task RemoveMessageAsync(long id, CancellationToken ct) + { + throw new System.NotImplementedException(); + } + + public Task UpdateMessageAsync(ChatMessageModel chatMessageModel, CancellationToken ct) + { + throw new System.NotImplementedException(); + } + #endregion } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.sln b/src/Services/smalltalk/O2NextGen.SmallTalk.sln index 7819de1c..4589eddc 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.sln +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.sln @@ -25,9 +25,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests.O2NextGen.SmallTalk.I EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SDKs", "SDKs", "{B03A4DA5-C40A-4C53-924E-59E50D1AD1D8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NG.Sdk.NetCore.Models", "..\..\SDKs\O2NG.Sdk.NetCore\O2NG.Sdk.NetCore.Models\O2NG.Sdk.NetCore.Models.csproj", "{B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NG.Sdk.UnitTester.NetCore", "..\..\SDKs\O2NG.Tester.Sdk\O2NG.Sdk.UnitTester.NetCore\O2NG.Sdk.UnitTester.NetCore.csproj", "{EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "O2NextGen.Sdk.NetCore.Models", "..\..\SDKs\O2NG.Sdk.NetCore\O2NG.Sdk.NetCore.Models\O2NextGen.Sdk.NetCore.Models.csproj", "{011B24B8-B1CA-4585-9862-916BE9A090AF}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -71,14 +69,10 @@ Global {D1347913-7AF3-44FF-8E98-908914004ACD}.Debug|Any CPU.Build.0 = Debug|Any CPU {D1347913-7AF3-44FF-8E98-908914004ACD}.Release|Any CPU.ActiveCfg = Release|Any CPU {D1347913-7AF3-44FF-8E98-908914004ACD}.Release|Any CPU.Build.0 = Release|Any CPU - {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD}.Release|Any CPU.Build.0 = Release|Any CPU - {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D}.Release|Any CPU.Build.0 = Release|Any CPU + {011B24B8-B1CA-4585-9862-916BE9A090AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {011B24B8-B1CA-4585-9862-916BE9A090AF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {011B24B8-B1CA-4585-9862-916BE9A090AF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {011B24B8-B1CA-4585-9862-916BE9A090AF}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -89,8 +83,7 @@ Global {B025EE5D-EA23-4FEF-8503-B4D819344EFF} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} {750729AB-58E4-470C-AB8E-4AC0ED1740BF} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} {D1347913-7AF3-44FF-8E98-908914004ACD} = {64D081A5-7679-4BA4-B1D9-9577379FF16F} - {B7EC2551-A8FD-4A71-8517-1D8D0B9145DD} = {B03A4DA5-C40A-4C53-924E-59E50D1AD1D8} - {EE6C307D-D904-4AB7-9EC5-CA999ECBBC9D} = {B03A4DA5-C40A-4C53-924E-59E50D1AD1D8} + {011B24B8-B1CA-4585-9862-916BE9A090AF} = {B03A4DA5-C40A-4C53-924E-59E50D1AD1D8} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {22C24FCD-AA42-4E4F-B590-2632C8AAFE58} diff --git a/src/Services/smalltalk/Tests/IntegrationTests.O2NextGen.SmallTalk.Api/Tests.O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappingsTests.cs b/src/Services/smalltalk/Tests/IntegrationTests.O2NextGen.SmallTalk.Api/Tests.O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappingsTests.cs new file mode 100644 index 00000000..7c56d2f0 --- /dev/null +++ b/src/Services/smalltalk/Tests/IntegrationTests.O2NextGen.SmallTalk.Api/Tests.O2NextGen.SmallTalk.Api/Mappings/ChatMessageMappingsTests.cs @@ -0,0 +1,6 @@ +namespace Tests.O2NextGen.SmallTalk.Api.Mappings +{ + public class ChatMessageMappingsTests + { + } +} From 8922a3dfcfab39df2c15971f2a47ba2014b9e498 Mon Sep 17 00:00:00 2001 From: Denis Prokhorchik Date: Sat, 2 Apr 2022 22:25:20 +0300 Subject: [PATCH 3/4] feat(issue-175): update session code --- ...MessageController.cs => ChatController.cs} | 20 +++++----- .../O2NextGen.SmallTalk.Api.csproj | 1 - .../Services/IChatManager.cs | 4 +- .../Services/ISessionManager.cs | 3 +- .../Services/ChatManager.cs | 14 ++++--- .../Services/Creator.cs | 4 +- .../Services/InMemorySessionManager.cs | 40 +++++++++++++++++-- 7 files changed, 63 insertions(+), 23 deletions(-) rename src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/{MessageController.cs => ChatController.cs} (76%) diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs similarity index 76% rename from src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs rename to src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs index 32e6ca16..c49334b3 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/MessageController.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs @@ -10,9 +10,9 @@ namespace O2NextGen.SmallTalk.Api.Controllers { - [Route("api/message")] + [Route("api/chat")] [ApiController] - public class MessageController : ControllerBase + public class ChatController : ControllerBase { #region Fields @@ -25,7 +25,7 @@ public class MessageController : ControllerBase #region Ctors - public MessageController(IHostingEnvironment environment, ILogger logger, + public ChatController(IHostingEnvironment environment, ILogger logger, IChatManager chatManager) { _environment = environment; @@ -39,19 +39,19 @@ public MessageController(IHostingEnvironment environment, ILogger GetByIdAsync(long id, CancellationToken ct) + [Route("session/{sessionId}/messages/{id}")] + public async Task GetByIdAsync(long sessionId, long id, CancellationToken ct) { - var resultSession = await _chatManager.GetMessageByIdAsync(id, ct); + var resultSession = await _chatManager.GetMessageByIdAsync(sessionId, id, ct); return Ok(resultSession.ToViewModel()); } [HttpGet] - [Route("")] - public async Task GetMessagesAsync(CancellationToken ct) + [Route("session/{sessionId}/messages")] + public async Task GetMessagesAsync(long sessionId, CancellationToken ct) { - var resultSession = await _chatManager.GetMessages(ct); - return Ok(resultSession.ToViewModel()); + var resultWithMessages = await _chatManager.GetMessages(sessionId, ct); + return Ok(resultWithMessages.ToViewModel()); } [HttpPost] diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj index b8c9ae74..b0498b02 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/O2NextGen.SmallTalk.Api.csproj @@ -20,7 +20,6 @@ - diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs index a9809ab6..03e0f9ef 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs @@ -8,9 +8,9 @@ namespace O2NextGen.SmallTalk.Business.Services public interface IChatManager { Task AddMessage(ChatMessageModel chatMessageModel, CancellationToken ct); - Task> GetMessages(CancellationToken ct); + Task> GetMessages(long idSession, CancellationToken ct); Task RemoveMessageAsync(long id, CancellationToken ct); Task UpdateMessageAsync(ChatMessageModel chatMessageModel, CancellationToken ct); - Task GetMessageByIdAsync(long id, CancellationToken ct); + Task GetMessageByIdAsync(long id, long id1, CancellationToken ct); } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs index c8267b77..77caa6d0 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs @@ -11,6 +11,7 @@ public interface ISessionManager Task AddSessionAsync(ChatSessionModel chatSession, CancellationToken ct); Task ExistSessionAsync(); Task GetSessionAsync(); - Task> GetMessages(CancellationToken ct); + Task> GetMessages(long idSession, CancellationToken ct); + Task GetMessageByIdAsync(long idSession, long id, CancellationToken ct); } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs index f0c537ea..601f74d0 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs @@ -35,22 +35,26 @@ public async Task AddMessage(ChatMessageModel chatMessageModel { // new session var newChatSession = Creator.CreateObject(); + + var count = newChatSession.Messages.Count; + chatMessage.Id = ++count; + newChatSession.Messages.Add(chatMessage); chatSession = await _sessionManager.AddSessionAsync(newChatSession, ct); } - return chatMessage; } - public Task GetMessageByIdAsync(long id, CancellationToken ct) + public async Task GetMessageByIdAsync(long sessionId, long id, CancellationToken ct) { - throw new System.NotImplementedException(); + var result = await _sessionManager.GetMessageByIdAsync(sessionId, id, ct); + return result; } - public async Task> GetMessages(CancellationToken ct) + public async Task> GetMessages(long idSession,CancellationToken ct) { - var result = await _sessionManager.GetMessages(ct); + var result = await _sessionManager.GetMessages(idSession,ct); return result; } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs index 147997b2..85b63911 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/Creator.cs @@ -43,7 +43,9 @@ internal class ChatMessageCreator { internal static object Create() { - var chatMessage = new ChatMessageModel(); + var chatMessage = new ChatMessageModel() + { + }; return chatMessage; } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs index e81874e6..54eb7e8b 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs @@ -33,11 +33,38 @@ public class InMemorySessionManager : ISessionManager }, new ChatMessageModel() { - Id=2, + Id=3, SenderId=2, RecipientId=1, Message = "Back Test message 1" }, + }, + }, + new ChatSessionModel() + { Id = 2, + Messages = new List() + { + new ChatMessageModel() + { + Id=1, + SenderId=1, + RecipientId=2, + Message = "s2 Test message" + }, + new ChatMessageModel() + { + Id=2, + SenderId=1, + RecipientId=2, + Message = "s2 Test message 2" + }, + new ChatMessageModel() + { + Id=3, + SenderId=2, + RecipientId=1, + Message = "s2 Back Test message 1" + }, } } }; @@ -77,11 +104,18 @@ public Task GetSessionAsync() throw new System.NotImplementedException(); } - public async Task> GetMessages(CancellationToken ct) + public async Task> GetMessages(long idSession, CancellationToken ct) { await Task.Delay(3000, ct); - var messages = Sessions.First().Messages; + var messages = Sessions.Single(_ => _.Id == idSession).Messages; return await Task.FromResult>(messages.AsReadOnly()); } + + public async Task GetMessageByIdAsync(long idSession, long id, CancellationToken ct) + { + await Task.Delay(3000, ct); + var message = Sessions.Single(_ => _.Id == idSession).Messages.Single(_ => _.Id == id); + return await Task.FromResult(message); + } } } From 0e47467e7daf468a4880abc69ce162596006ec72 Mon Sep 17 00:00:00 2001 From: Denis Prokhorchik Date: Sat, 2 Apr 2022 23:01:29 +0300 Subject: [PATCH 4/4] feat(issue-281): add basic func of smalltalk-api --- .../Controllers/ChatController.cs | 18 +++++++++--------- .../Services/IChatManager.cs | 8 ++++---- .../Services/ISessionManager.cs | 4 ++-- .../Services/ChatManager.cs | 12 +++++++----- .../Services/InMemorySessionManager.cs | 10 ++++++---- 5 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs index c49334b3..c73f0b18 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Api/Controllers/ChatController.cs @@ -56,30 +56,30 @@ public async Task GetMessagesAsync(long sessionId, CancellationTo [HttpPost] [HttpPut] - [Route("")] - public async Task AddAsync(ChatMessage chatMessage, CancellationToken ct) + [Route("session/{sessionId}/messages")] + public async Task AddAsync(long sessionId, ChatMessage chatMessage, CancellationToken ct) { if (chatMessage == null) throw new System.ArgumentNullException(nameof(chatMessage)); - ChatMessageModel resultSession = await _chatManager.AddMessage(chatMessage.ToModel(), ct); + ChatMessageModel resultSession = await _chatManager.AddMessage(sessionId, chatMessage.ToModel(), ct); return Ok(resultSession.ToViewModel()); } [HttpPut] - [Route("id")] - public async Task UpdateAsync(long id, ChatMessage model, CancellationToken ct) + [Route("session/{sessionId}/messages/{id}")] + public async Task UpdateAsync(long sessionId, long id, ChatMessage model, CancellationToken ct) { - var certificate = await _chatManager.UpdateMessageAsync(model.ToModel(), ct); + var certificate = await _chatManager.UpdateMessageAsync(sessionId, model.ToModel(), ct); return Ok(certificate.ToViewModel()); } [HttpDelete] - [Route("id")] - public async Task RemoveAsync(long id, CancellationToken ct) + [Route("session/{sessionId}/messages/{id}")] + public async Task RemoveAsync(long sessionId, long id, CancellationToken ct) { - await _chatManager.RemoveMessageAsync(id, ct); + await _chatManager.RemoveMessageAsync(sessionId,id, ct); return NoContent(); } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs index 03e0f9ef..e5e5731c 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/IChatManager.cs @@ -7,10 +7,10 @@ namespace O2NextGen.SmallTalk.Business.Services { public interface IChatManager { - Task AddMessage(ChatMessageModel chatMessageModel, CancellationToken ct); + Task AddMessage(long sessionId, ChatMessageModel chatMessageModel, CancellationToken ct); Task> GetMessages(long idSession, CancellationToken ct); - Task RemoveMessageAsync(long id, CancellationToken ct); - Task UpdateMessageAsync(ChatMessageModel chatMessageModel, CancellationToken ct); - Task GetMessageByIdAsync(long id, long id1, CancellationToken ct); + Task RemoveMessageAsync(long sessionId, long id, CancellationToken ct); + Task UpdateMessageAsync(long sessionId, ChatMessageModel chatMessageModel, CancellationToken ct); + Task GetMessageByIdAsync(long sessionId, long id, CancellationToken ct); } } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs index 77caa6d0..5a1f299e 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Business/Services/ISessionManager.cs @@ -9,8 +9,8 @@ public interface ISessionManager { Task> GetAllAsync(CancellationToken ct); Task AddSessionAsync(ChatSessionModel chatSession, CancellationToken ct); - Task ExistSessionAsync(); - Task GetSessionAsync(); + Task ExistSessionAsync(long sessionId, CancellationToken ct); + Task GetSessionAsync(long sessionId, CancellationToken ct); Task> GetMessages(long idSession, CancellationToken ct); Task GetMessageByIdAsync(long idSession, long id, CancellationToken ct); } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs index 601f74d0..a19d61bd 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/ChatManager.cs @@ -18,7 +18,7 @@ public ChatManager(ISessionManager sessionManager) } #region Messages - public async Task AddMessage(ChatMessageModel chatMessageModel, CancellationToken ct) + public async Task AddMessage(long sessionId,ChatMessageModel chatMessageModel, CancellationToken ct) { var chatMessage = Creator.CreateObject(); chatMessage.Message = chatMessageModel.Message; @@ -26,9 +26,11 @@ public async Task AddMessage(ChatMessageModel chatMessageModel ChatSessionModel chatSession = null; //Checking if a session exists or not - if (await _sessionManager.ExistSessionAsync()) + if (await _sessionManager.ExistSessionAsync(sessionId,ct)) { - chatSession = await _sessionManager.GetSessionAsync(); + chatSession = await _sessionManager.GetSessionAsync(sessionId,ct); + var count = chatSession.Messages.Count; + chatMessage.Id = ++count; chatSession.Messages.Add(chatMessage); } else @@ -58,12 +60,12 @@ public async Task> GetMessages(long idSess return result; } - public Task RemoveMessageAsync(long id, CancellationToken ct) + public Task RemoveMessageAsync(long sessionId, long id, CancellationToken ct) { throw new System.NotImplementedException(); } - public Task UpdateMessageAsync(ChatMessageModel chatMessageModel, CancellationToken ct) + public Task UpdateMessageAsync(long sessionId, ChatMessageModel chatMessageModel, CancellationToken ct) { throw new System.NotImplementedException(); } diff --git a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs index 54eb7e8b..f259ac39 100644 --- a/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs +++ b/src/Services/smalltalk/O2NextGen.SmallTalk.Impl/Services/InMemorySessionManager.cs @@ -94,14 +94,16 @@ public async Task AddSessionAsync(ChatSessionModel chatSession return await Task.FromResult(chatSession); } - public async Task ExistSessionAsync() + public async Task ExistSessionAsync(long sessionId,CancellationToken ct) { - return await Task.FromResult(false); + var result = Sessions.Any(_ => _.Id == sessionId); + return await Task.FromResult(result); } - public Task GetSessionAsync() + public async Task GetSessionAsync(long sessionId,CancellationToken ct) { - throw new System.NotImplementedException(); + var result = Sessions.Single(_ => _.Id == sessionId); + return await Task.FromResult(result); } public async Task> GetMessages(long idSession, CancellationToken ct)