Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace O2NextGen.Sdk.NetCore.Models.smalltalk
{
public class ChatEvent
{
public long Id { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace O2NextGen.Sdk.NetCore.Models.smalltalk
{

public class ChatMessageViewModel
{

}

}
Original file line number Diff line number Diff line change
@@ -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<ChatMessage> Messages { get; set; }
public List<ChatEvent> Events { get; set; }
public List<ChatSessionInvite> Invites { get; set; }
public string Name { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace O2NextGen.Sdk.NetCore.Models.smalltalk
{
public abstract class ChatSessionInvite
{
public long Id { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk
{
public class ChatEventTests
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk
{
public class ChatMessageTests
{

}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk
{
public class ChatSessionInviteTests
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Tests.O2NextGen.Sdk.NetCore.Models.smalltalk
{
public class ChatSessionTests
{
}
}
Original file line number Diff line number Diff line change
@@ -1,34 +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/chat")]
[ApiController]
public class ChatController : ControllerBase
{
#region Fields

private readonly IHostingEnvironment _environment;
private readonly ILogger<VersionController> _logger;
private readonly IChatManager _chatManager;

#endregion


#region Ctors

public ChatController(IHostingEnvironment environment, ILogger<VersionController> logger)
public ChatController(IHostingEnvironment environment, ILogger<VersionController> logger,
IChatManager chatManager)
{
_environment = environment;
_logger = logger;
_chatManager = chatManager;
}

#endregion


#region Methods


[HttpGet]
[Route("session/{sessionId}/messages/{id}")]
public async Task<IActionResult> GetByIdAsync(long sessionId, long id, CancellationToken ct)
{
var resultSession = await _chatManager.GetMessageByIdAsync(sessionId, id, ct);
return Ok(resultSession.ToViewModel());
}

[HttpGet]
[Route("session/{sessionId}/messages")]
public async Task<IActionResult> GetMessagesAsync(long sessionId, CancellationToken ct)
{
var resultWithMessages = await _chatManager.GetMessages(sessionId, ct);
return Ok(resultWithMessages.ToViewModel());
}

[HttpPost]
[HttpPut]
[Route("session/{sessionId}/messages")]
public async Task<IActionResult> AddAsync(long sessionId, ChatMessage chatMessage, CancellationToken ct)
{
if (chatMessage == null)
throw new System.ArgumentNullException(nameof(chatMessage));

ChatMessageModel resultSession = await _chatManager.AddMessage(sessionId, chatMessage.ToModel(), ct);

return Ok(resultSession.ToViewModel());
}

[HttpPut]
[Route("session/{sessionId}/messages/{id}")]
public async Task<IActionResult> UpdateAsync(long sessionId, long id, ChatMessage model, CancellationToken ct)
{
var certificate = await _chatManager.UpdateMessageAsync(sessionId, model.ToModel(), ct);
return Ok(certificate.ToViewModel());
}

[HttpDelete]
[Route("session/{sessionId}/messages/{id}")]
public async Task<IActionResult> RemoveAsync(long sessionId, long id, CancellationToken ct)
{
await _chatManager.RemoveMessageAsync(sessionId,id, ct);
return NoContent();
}

#endregion
}
}
}
Original file line number Diff line number Diff line change
@@ -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<VersionController> _logger;

#endregion


#region Ctors

public UserController(IHostingEnvironment environment, ILogger<VersionController> logger)
{
_environment = environment;
_logger = logger;
}

#endregion


#region Methods



#endregion
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -33,19 +35,18 @@ public static IServiceCollection AddBusiness(this IServiceCollection services)
//more business services...

services.AddSingleton<IChatService, InMemoryChatService>();
services.AddSingleton<ISessionManager, InMemorySessionManager>();
services.AddSingleton<IChatManager, ChatManager>();
return services;
}

public static IServiceCollection AddRequiredMvcComponents(this IServiceCollection services)
{
//services.AddTransient<ApiExceptionFilter>();

var mvcBuilder = services.AddMvc(options =>
{
// options.Filters.Add<ApiExceptionFilter>();
var mvcBuilder = services.AddMvcCore(options => {
//options.Filters.Add<ApiExceptionFilter>();
});
mvcBuilder.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

mvcBuilder.AddJsonFormatters();
return services;
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
using O2NextGen.Sdk.NetCore.Models.smalltalk;
using O2NextGen.SmallTalk.Business.Models;
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<ChatMessage> ToViewModel(
this IReadOnlyCollection<ChatMessageModel> models)
{
if (models.Count == 0)
{
return Array.Empty<ChatMessage>();
}

var subscription = new ChatMessage[models.Count];
var i = 0;
foreach (var model in models)
{
subscription[i] = ToViewModel(model);
++i;
}

return new ReadOnlyCollection<ChatMessage>(subscription);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,11 @@
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" />
<PackageReference Include="Microsoft.Extensions.Options" Version="2.2.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\..\SDKs\O2NG.Sdk.NetCore\O2NG.Sdk.NetCore.Models\O2NextGen.Sdk.NetCore.Models.csproj" />
<ProjectReference Include="..\O2NextGen.SmallTalk.Business\O2NextGen.SmallTalk.Business.csproj" />
<ProjectReference Include="..\O2NextGen.SmallTalk.Data\O2NextGen.SmallTalk.Data.csproj" />
<ProjectReference Include="..\O2NextGen.SmallTalk.Impl\O2NextGen.SmallTalk.Impl.csproj" />
Expand Down

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace O2NextGen.SmallTalk.Business.Models
{
public class ChatEventModel
{
}
}
Original file line number Diff line number Diff line change
@@ -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; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace O2NextGen.SmallTalk.Business.Models
{
public class ChatSessionInviteModel
{
}
}
Loading