diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/BoardController.cs b/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/BoardController.cs new file mode 100644 index 00000000..0b546b72 --- /dev/null +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/BoardController.cs @@ -0,0 +1,73 @@ +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("board")] + public class BoardController : Controller + { + private readonly IEmailSender _emailSender; + private readonly IEmailSenderService _emailSenderService; + + public BoardController(IEmailSender emailSender, IEmailSenderService emailSenderService) + { + _emailSender = emailSender; + _emailSenderService = emailSenderService; + } + + [HttpGet] + [Route("")] + public async Task Index() + { + var models = await _emailSenderService.GetAllAsync(CancellationToken.None); + return View(models.ToViewModel()); + } + + [HttpGet] + [Route("{id}")] + public async Task Detail(long id) + { + var emailRequest = await _emailSenderService.GetByIdAsync(id, CancellationToken.None); + if (emailRequest == null) + return NotFound(); + return View(emailRequest.ToViewModel()); + } + + [HttpPost] + [Route("id")] + [ValidateAntiForgeryToken] + public async Task Edit(long id, MailRequestViewModel model) + { + var certificate = await _emailSenderService.GetByIdAsync(id, CancellationToken.None); + if (certificate == null) + return NotFound(); + certificate.From = model.From; + certificate.To = model.To; + certificate.Subject = model.Subject; + certificate.Body = model.Body; + + return RedirectToAction("Index"); + } + + [HttpGet] + [Route("create")] + public IActionResult Create() + { + return View(); + } + + [HttpPost] + [Route("")] + public async Task CreateReally(MailRequestViewModel model) + { + var emailRequest = await _emailSenderService.AddAsync(model.ToModel(), CancellationToken.None); + await _emailSender.Send(model.To, model.Subject, model.Body); + return RedirectToAction("Index"); + } + } +} \ No newline at end of file diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/EmailSenderController.cs b/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/EmailSenderController.cs index ffb380f1..e685ff3a 100644 --- a/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/EmailSenderController.cs +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/EmailSenderController.cs @@ -1,6 +1,4 @@ -using System.Collections.Generic; -using System.Linq; -using System.Threading; +using System.Threading; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using O2NextGen.ESender.Api.Helpers; @@ -10,66 +8,69 @@ namespace O2NextGen.ESender.Api.Controllers { - [Route("emailsender")] - public class EmailSenderController : Controller + [Route("api/[controller]")] + public class EmailSenderController : ControllerBase { + #region Fields + private readonly IEmailSender _emailSender; private readonly IEmailSenderService _emailSenderService; + + #endregion + #region Ctors public EmailSenderController(IEmailSender emailSender, IEmailSenderService emailSenderService) { _emailSender = emailSender; _emailSenderService = emailSenderService; } + #endregion + + #region Methods [HttpGet] [Route("")] - public async Task Index() + public async Task GetAllAsync() { var models = await _emailSenderService.GetAllAsync(CancellationToken.None); - return View(models.ToViewModel()); + return Ok(models.ToViewModel()); } [HttpGet] [Route("{id}")] - public async Task Detail(long id) + public async Task GetByIdAsync(long id, CancellationToken ct) { - var emailRequest =await _emailSenderService.GetByIdAsync(id, CancellationToken.None); - if (emailRequest == null) + var certificate = await _emailSenderService.GetByIdAsync(id, ct); + if (certificate == null) return NotFound(); - return View(emailRequest.ToViewModel()); + return Ok(certificate.ToViewModel()); } - [HttpPost] + [HttpPut] [Route("id")] - [ValidateAntiForgeryToken] - public async Task Edit(long id, MailRequestViewModel model) + public async Task UpdateAsync(long id, MailRequestViewModel model, CancellationToken ct) { - var certificate = await _emailSenderService.GetByIdAsync(id, CancellationToken.None); - if (certificate == null) - return NotFound(); - certificate.From = model.From; - certificate.To = model.To; - certificate.Subject = model.Subject; - certificate.Body = model.Body; - - return RedirectToAction("Index"); + var certificate = await _emailSenderService.UpdateAsync(model.ToModel(), ct); + return Ok(certificate.ToViewModel()); } - [HttpGet] - [Route("create")] - public IActionResult Create() + [HttpPost] + [HttpPut] + [Route("")] + public async Task AddAsync(MailRequestViewModel model, CancellationToken ct) { - return View(); + var certificate = await _emailSenderService.AddAsync(model.ToModel(), ct); + return CreatedAtAction(nameof(GetByIdAsync), new {id = certificate.Id}, certificate); } - [HttpPost] - [Route("")] - public async Task CreateReally(MailRequestViewModel model) + #endregion + + [HttpDelete] + [Route("id")] + public async Task RemoveAsync(long id,CancellationToken ct) { - var emailRequest = await _emailSenderService.AddAsync(model.ToModel(), CancellationToken.None); - await _emailSender.Send(model.To, model.Subject, model.Body); - return RedirectToAction("Index"); + await _emailSenderService.RemoveAsync(id, ct); + return NoContent(); } } } diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/ValuesController.cs b/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/ValuesController.cs deleted file mode 100644 index 4272947e..00000000 --- a/src/Services/e-sender/O2NextGen.ESender.Api/Controllers/ValuesController.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections.Generic; -using Microsoft.AspNetCore.Mvc; - -namespace O2NextGen.ESender.Api.Controllers -{ - [Route("api/[controller]")] - [ApiController] - public class ValuesController : ControllerBase - { - // GET api/values - [HttpGet] - public ActionResult> Get() - { - return new string[] { "value1", "value2" }; - } - - // GET api/values/5 - [HttpGet("{id}")] - public ActionResult Get(int id) - { - return "value"; - } - - // POST api/values - [HttpPost] - public void Post([FromBody] string value) - { - } - - // PUT api/values/5 - [HttpPut("{id}")] - public void Put(int id, [FromBody] string value) - { - } - - // DELETE api/values/5 - [HttpDelete("{id}")] - public void Delete(int id) - { - } - } -} - diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Filters/ApiExceptionFilter.cs b/src/Services/e-sender/O2NextGen.ESender.Api/Filters/ApiExceptionFilter.cs new file mode 100644 index 00000000..bbb0d6f6 --- /dev/null +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Filters/ApiExceptionFilter.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.Filters; +using Microsoft.EntityFrameworkCore; + +namespace O2NextGen.ESender.Api.Filters +{ + public class ApiExceptionFilter: IExceptionFilter + + { + public void OnException(ExceptionContext context) + { + if (context.ExceptionHandled is DbUpdateConcurrencyException) + { + context.Result = + new ConflictObjectResult(new {Message = "Entity was updated, please refresh your copy."}); + } + } + } +} \ No newline at end of file diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/IoC/ServiceCollectionExtensions.cs b/src/Services/e-sender/O2NextGen.ESender.Api/IoC/ServiceCollectionExtensions.cs index 8ee99a4c..a6ed6969 100644 --- a/src/Services/e-sender/O2NextGen.ESender.Api/IoC/ServiceCollectionExtensions.cs +++ b/src/Services/e-sender/O2NextGen.ESender.Api/IoC/ServiceCollectionExtensions.cs @@ -1,6 +1,8 @@ using System; +using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; +using O2NextGen.ESender.Api.Filters; using O2NextGen.ESender.Api.Helpers; using O2NextGen.ESender.Business.Services; using O2NextGen.ESender.Impl.Services; @@ -34,5 +36,15 @@ public static IServiceCollection AddBusiness(this IServiceCollection services) services.AddSingleton(); return services; } + + public static IServiceCollection AddRequiredMvcComponents(this IServiceCollection services) + { + services.AddTransient(); + + var mvcBuilder = services.AddMvcCore(options => { options.Filters.Add(); }); + mvcBuilder.SetCompatibilityVersion(CompatibilityVersion.Version_2_2); + mvcBuilder.AddJsonFormatters(); + return services; + } } } \ No newline at end of file diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/O2NextGen.ESender.Api.csproj b/src/Services/e-sender/O2NextGen.ESender.Api/O2NextGen.ESender.Api.csproj index 505d3612..ed6214b2 100644 --- a/src/Services/e-sender/O2NextGen.ESender.Api/O2NextGen.ESender.Api.csproj +++ b/src/Services/e-sender/O2NextGen.ESender.Api/O2NextGen.ESender.Api.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Startup.cs b/src/Services/e-sender/O2NextGen.ESender.Api/Startup.cs index 4d78a1aa..7c9ddff9 100644 --- a/src/Services/e-sender/O2NextGen.ESender.Api/Startup.cs +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Startup.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Builder; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; @@ -35,6 +36,16 @@ public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseHsts(); } + app.Use(async (context, next) => + { + context.Response.OnStarting(() => + { + context.Response.Headers.Add("X-Power-By", "O2NextGen: E-Sender"); + return Task.CompletedTask; + }); + + await next.Invoke(); + }); app.UseHttpsRedirection(); app.UseMvc(); } diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Create.cshtml b/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Create.cshtml similarity index 82% rename from src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Create.cshtml rename to src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Create.cshtml index 4ed455cc..ae9c83ec 100644 --- a/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Create.cshtml +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Create.cshtml @@ -1,6 +1,6 @@ @model MailRequestViewModel -
+ diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Detail.cshtml b/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Detail.cshtml similarity index 81% rename from src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Detail.cshtml rename to src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Detail.cshtml index ee3fb28c..d4e189e3 100644 --- a/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Detail.cshtml +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Detail.cshtml @@ -1,7 +1,7 @@  @model MailRequestViewModel - + diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Index.cshtml b/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Index.cshtml new file mode 100644 index 00000000..f5349c98 --- /dev/null +++ b/src/Services/e-sender/O2NextGen.ESender.Api/Views/Board/Index.cshtml @@ -0,0 +1,63 @@ +@model IEnumerable +

E-Sender Service

+

Administration board v1.0.0.0

+ + + + + + + + + + + + + @foreach (var b in Model) + { + + + + + + + + } + +
+ @Html.DisplayNameFor(model => model.Id) + + @Html.DisplayNameFor(model => model.From) + + @Html.DisplayNameFor(model => model.To) + + @Html.DisplayNameFor(model => model.Subject) + + @Html.DisplayNameFor(model => model.Body) +
+ @Html.DisplayFor(modelItem => b.Id) + + @Html.DisplayFor(modelItem => b.From) + + @Html.DisplayFor(modelItem => b.To) + + @Html.DisplayFor(modelItem => b.Subject) + + @Html.DisplayFor(modelItem => b.Body) +
+@* @foreach (var certificate in Model) *@ +@* { *@ +@*
  • *@ +@* @certificate.Id | @certificate.From | @certificate.To | @certificate.Subject | @certificate.Body *@ +@* $1$ | Edit #1# *@ +@*
  • *@ +@* } *@ + +@* Create *@ \ No newline at end of file diff --git a/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Index.cshtml b/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Index.cshtml deleted file mode 100644 index 65f66232..00000000 --- a/src/Services/e-sender/O2NextGen.ESender.Api/Views/EmailSender/Index.cshtml +++ /dev/null @@ -1,10 +0,0 @@ -@model IEnumerable - -@foreach (var certificate in Model) -{ -
  • - @certificate.Id @certificate.From @certificate.To @certificate.Subject @certificate.Body | Edit -
  • -} - -Create \ No newline at end of file