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
12 changes: 12 additions & 0 deletions src/Services/e-sender/O2NextGen.ESender.Api.sln
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ VisualStudioVersion = 25.0.1700.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.ESender.Api", "O2NextGen.ESender.Api\O2NextGen.ESender.Api.csproj", "{89FADD48-B8C5-4923-AA5C-D9FFF0B21E87}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.ESender.Business", "O2NextGen.ESender.Business\O2NextGen.ESender.Business.csproj", "{AEB3AF96-A144-41F3-9F9D-715476640C42}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "O2NextGen.ESender.Impl", "O2NextGen.ESender.Impl\O2NextGen.ESender.Impl.csproj", "{912084D1-1E1A-4170-A345-375621788E06}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -15,6 +19,14 @@ Global
{89FADD48-B8C5-4923-AA5C-D9FFF0B21E87}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89FADD48-B8C5-4923-AA5C-D9FFF0B21E87}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89FADD48-B8C5-4923-AA5C-D9FFF0B21E87}.Release|Any CPU.Build.0 = Release|Any CPU
{AEB3AF96-A144-41F3-9F9D-715476640C42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AEB3AF96-A144-41F3-9F9D-715476640C42}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEB3AF96-A144-41F3-9F9D-715476640C42}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEB3AF96-A144-41F3-9F9D-715476640C42}.Release|Any CPU.Build.0 = Release|Any CPU
{912084D1-1E1A-4170-A345-375621788E06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{912084D1-1E1A-4170-A345-375621788E06}.Debug|Any CPU.Build.0 = Debug|Any CPU
{912084D1-1E1A-4170-A345-375621788E06}.Release|Any CPU.ActiveCfg = Release|Any CPU
{912084D1-1E1A-4170-A345-375621788E06}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
Original file line number Diff line number Diff line change
@@ -1,48 +1,51 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using O2NextGen.ESender.Api.Helpers;
using O2NextGen.ESender.Api.Mappings;
using O2NextGen.ESender.Api.Models;
using O2NextGen.ESender.Business.Services;

namespace O2NextGen.ESender.Api.Controllers
{
[Route("emailsender")]
public class EmailSenderController : Controller
{
private readonly IEmailSender _emailSender;
private readonly IEmailSenderService _emailSenderService;

public EmailSenderController(IEmailSender emailSender)
public EmailSenderController(IEmailSender emailSender, IEmailSenderService emailSenderService)
{
_emailSender = emailSender;
_emailSenderService = emailSenderService;
}
private static long _currentCertificateId = 1;

private static List<MailViewModel> _mailLetters = new List<MailViewModel>()
{
new MailViewModel() {Id = 1, From ="from@eexample.com",To = "example@eexample.com", Subject="theme", Body="<h1>last</h1>"},
new MailViewModel() {Id = 2, From ="from@eexample.com",To = "example@eexample.com", Subject="theme", Body="<h1>last</h1>"},
};

[HttpGet]
[Route("")]
public IActionResult Index() => View(_mailLetters);
public async Task<IActionResult> Index()
{
var models = await _emailSenderService.GetAllAsync(CancellationToken.None);
return View(models.ToViewModel());
}

[HttpGet]
[Route("{id}")]
public IActionResult Detail(long id)
public async Task<IActionResult> Detail(long id)
{
var certificate = _mailLetters.SingleOrDefault(_ => _.Id == id);
if (certificate == null)
var emailRequest =await _emailSenderService.GetByIdAsync(id, CancellationToken.None);
if (emailRequest == null)
return NotFound();
return View(certificate);
return View(emailRequest.ToViewModel());
}

[HttpPost]
[Route("id")]
[ValidateAntiForgeryToken]
public IActionResult Edit(long id, MailViewModel model)
public async Task<IActionResult> Edit(long id, MailRequestViewModel model)
{
var certificate = _mailLetters.SingleOrDefault(_ => _.Id == id);
var certificate = await _emailSenderService.GetByIdAsync(id, CancellationToken.None);
if (certificate == null)
return NotFound();
certificate.From = model.From;
Expand All @@ -62,11 +65,10 @@ public IActionResult Create()

[HttpPost]
[Route("")]
public IActionResult CreateReally(MailViewModel model)
public async Task<IActionResult> CreateReally(MailRequestViewModel model)
{
model.Id = _currentCertificateId++;
_mailLetters.Add(model);
_emailSender.Send(model.To, model.Subject, model.Body);
var emailRequest = await _emailSenderService.AddAsync(model.ToModel(), CancellationToken.None);
await _emailSender.Send(model.To, model.Subject, model.Body);
return RedirectToAction("Index");
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
using System;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using O2NextGen.ESender.Api.Helpers;
using O2NextGen.ESender.Business.Services;
using O2NextGen.ESender.Impl.Services;

namespace O2NextGen.ESender.Api.IoC
{
Expand All @@ -21,5 +24,15 @@ public static TConfig ConfigurePOCO<TConfig>(this IServiceCollection services, I
services.AddSingleton(config);
return config;
}
public static IServiceCollection AddBusiness(this IServiceCollection services)
{
services.AddSingleton<IEmailSenderService, InMemoryEmailSenderService>();
// Include DataLayer
// services.AddScoped<IEmailSenderService, EmailSenderService>();
//more business services...

services.AddSingleton<IEmailSender, EmailSender>();
return services;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using O2NextGen.ESender.Api.Models;
using O2NextGen.ESender.Business.Models;

namespace O2NextGen.ESender.Api.Mappings
{
public static class EmailRequestMappings
{
public static MailRequestViewModel ToViewModel(this EmailRequest model)
{
if (model == null)
return null;

var viewModel = new MailRequestViewModel();

//Bindings
viewModel.Id = model.Id;
viewModel.From = model.From;
viewModel.To = model.To;
viewModel.Subject = model.Subject;
viewModel.Body = model.Body;

return viewModel;
}

public static EmailRequest ToModel(this MailRequestViewModel requestViewModel)
{
if (requestViewModel == null)
return null;

var model = new EmailRequest();

//Bindings
model.Id = requestViewModel.Id;
model.From = requestViewModel.From;
model.To = requestViewModel.To;
model.Subject = requestViewModel.Subject;
model.Body = requestViewModel.Body;

return model;
}

public static IReadOnlyCollection<MailRequestViewModel> ToViewModel(
this IReadOnlyCollection<EmailRequest> models)
{
if (models.Count == 0)
{
return Array.Empty<MailRequestViewModel>();
}

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

return new ReadOnlyCollection<MailRequestViewModel>(subscription);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
namespace O2NextGen.ESender.Api.Models
{
public class MailViewModel
public class MailRequestViewModel
{
public long Id { get; set; }
public string From { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,4 +32,9 @@
<None Remove="Views\" />
<None Remove="Views\EmailSender\" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\O2NextGen.ESender.Business\O2NextGen.ESender.Business.csproj" />
<ProjectReference Include="..\O2NextGen.ESender.Impl\O2NextGen.ESender.Impl.csproj" />
</ItemGroup>
</Project>
2 changes: 1 addition & 1 deletion src/Services/e-sender/O2NextGen.ESender.Api/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ public Startup(IConfiguration appConfiguration)
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddBusiness();
services.ConfigurePOCO<SenderConfig>(AppConfiguration.GetSection("Sender"));
services.AddSingleton<IEmailSender, EmailSender>();
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@model MailViewModel
@model MailRequestViewModel

<form asp-controller="EmailSender" asp-action="CreateReally" method="post">
<label asp-for="From">From</label>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@

@model MailViewModel
@model MailRequestViewModel

<form asp-controller="EmailSender" asp-action="Edit" asp-route-id="@Model.Id">
<label asp-for="From">From</label>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@model IEnumerable<MailViewModel>
@model IEnumerable<MailRequestViewModel>

@foreach (var certificate in Model)
{
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
namespace O2NextGen.ESender.Business.Models
{
public class EmailRequest
{
public long Id { get; set; }
public string From { get; set; }
public string To { get; set; }
public string Subject { get; set; }
public string Body { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>

</Project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using O2NextGen.ESender.Business.Models;

namespace O2NextGen.ESender.Business.Services
{
public interface IEmailSenderService
{
Task<IReadOnlyCollection<EmailRequest>> GetAllAsync(CancellationToken ct);

Task<EmailRequest> GetByIdAsync(long id, CancellationToken ct);

Task<EmailRequest> UpdateAsync(EmailRequest emailRequest, CancellationToken ct);

Task<EmailRequest> AddAsync(EmailRequest emailRequest, CancellationToken ct);

Task RemoveAsync(long id, CancellationToken ct);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using System.Collections.Generic;
using O2NextGen.ESender.Business.Models;

namespace O2NextGen.ESender.Impl.Mappings
{
//
// {
// public static EmailRequest ToService(this EmailRequest entity)
// {
// return entity != null ? new EmailRequest() {Id = entity.Id, Name = entity.Name} : null;
// }
//
// public static EmailRequestEntity ToEntity(this EmailRequest model)
// {
// return model != null ? new EmailRequestEntity() {Id = model.Id, Name = model.Name} : null;
// }
//
// public static IReadOnlyCollection<EmailRequest>
// ToService(this IReadOnlyCollection<EmailRequestEntity> entities) =>
// entities.MapCollection(ToService);
// }
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

namespace O2NextGen.ESender.Impl.Mappings
{
internal static class MappingExtensions
{
public static IReadOnlyCollection<TOut> MapCollection<TIn, TOut>(this IReadOnlyCollection<TIn> input,
Func<TIn, TOut> mapper)
{
if (mapper is null)
{
throw new ArgumentNullException(nameof(mapper));
}

if (input is null || input.Count == 0)
{
return Array.Empty<TOut>();
}

var output = new TOut[input.Count];
var i = 0;
foreach (var entity in input)
{
output[i] = mapper(entity);
i++;
}

return new ReadOnlyCollection<TOut>(output);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\O2NextGen.ESender.Business\O2NextGen.ESender.Business.csproj" />
</ItemGroup>

</Project>
Loading