From 06de8926e43a30ab448dfd1cb28f5b455e7022ae Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Fri, 15 Sep 2023 16:32:46 +1000 Subject: [PATCH] template controller --- PARR.API/Contracts/V1/ApiRoutes.cs | 23 ++- .../V1/Requests/Queries/TemplateQuery.cs | 10 ++ .../V1/Responses/StatusTemplateResponse.cs | 13 ++ .../V1/Responses/TemplateResponse.cs | 27 ++++ PARR.API/Controllers/V1/EsppDataController.cs | 47 +++--- PARR.API/Controllers/V1/JobController.cs | 1 - .../V1/StatusTemplateController.cs | 42 ++++++ PARR.API/Controllers/V1/TemplateController.cs | 136 ++++++++++++++++++ .../DomainToResponseProfile.cs | 23 ++- PARR.DAL/Models/Template.cs | 1 + PARR.DAL/ParrDalInstaller.cs | 2 + PARR.DAL/Services/IStatusTemplateService.cs | 9 ++ .../Implementations/StatusTemplateService.cs | 20 +++ 13 files changed, 324 insertions(+), 30 deletions(-) create mode 100644 PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs create mode 100644 PARR.API/Contracts/V1/Responses/StatusTemplateResponse.cs create mode 100644 PARR.API/Contracts/V1/Responses/TemplateResponse.cs create mode 100644 PARR.API/Controllers/V1/StatusTemplateController.cs create mode 100644 PARR.API/Controllers/V1/TemplateController.cs create mode 100644 PARR.DAL/Services/IStatusTemplateService.cs create mode 100644 PARR.DAL/Services/Implementations/StatusTemplateService.cs diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs index 90ec6db7..6e55f8a1 100644 --- a/PARR.API/Contracts/V1/ApiRoutes.cs +++ b/PARR.API/Contracts/V1/ApiRoutes.cs @@ -41,16 +41,31 @@ public const string getParam = "{id}"; } - public static class EsppData - { - public const string UploadTemplates = Base + "/espp-data/templates"; + //public static class EsppData + //{ + // public const string UploadTemplates = Base + "/espp-data/templates"; - } + //} public static class Test { public const string GetMyIp = Base + "/tests/my-ip"; + } + public static class Template + { + public const string GetAll = Base + "/templates/"; + public const string Get = Base + "/templates/" + getParam; + public const string SetOkStatus = Base + "/templates/" + getParam + "/status/ok"; + public const string GetByStatusCode = Base + "/templates/status/{statusCode}"; + + + public const string getParam = "{id}"; + } + + public static class StatusTemplate + { + public const string GetAll = Base + "/template-statuses/"; } diff --git a/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs new file mode 100644 index 00000000..86b7ebde --- /dev/null +++ b/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs @@ -0,0 +1,10 @@ +namespace PARR.API.Contracts.V1.Requests.Queries +{ + public class TemplateQuery + { + /// + /// Статус шаблона: 10, 20, 30 + /// + public int? StatusCode { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/StatusTemplateResponse.cs b/PARR.API/Contracts/V1/Responses/StatusTemplateResponse.cs new file mode 100644 index 00000000..f6e3e7bf --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/StatusTemplateResponse.cs @@ -0,0 +1,13 @@ +using System.ComponentModel.DataAnnotations; + +namespace PARR.API.Contracts.V1.Responses +{ + public class StatusTemplateResponse + { + public int Code { get; set; } + + public required string Name { get; set; } + + public required string Description { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Responses/TemplateResponse.cs b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs new file mode 100644 index 00000000..8b8f5813 --- /dev/null +++ b/PARR.API/Contracts/V1/Responses/TemplateResponse.cs @@ -0,0 +1,27 @@ +namespace PARR.API.Contracts.V1.Responses +{ + public class TemplateResponse + { + public required string Name { get; set; } + public bool IsActive { get; set; } + public required string Assignment { get; set; } + public required string Title { get; set; } + public required string Category { get; set; } + public required string Branch { get; set; } + public required string SlaInterval { get; set; } + public required string ConfigurationItem { get; set; } + public required string ContactName { get; set; } + public required string Description { get; set; } + public required string ResolutionCode { get; set; } + public required string Resolution { get; set; } + public required string RzdMTNKprocess { get; set; } + public required string RzdMTNKsubprocess { get; set; } + public required string RzdMTNKtnk { get; set; } + public required string RzdMTNKjob { get; set; } + public required string Assignee { get; set; } + + + public Guid ParrTemplateId { get; set; } + public int StatusCode { get; set; } + } +} diff --git a/PARR.API/Controllers/V1/EsppDataController.cs b/PARR.API/Controllers/V1/EsppDataController.cs index 666d0b56..cb001b78 100644 --- a/PARR.API/Controllers/V1/EsppDataController.cs +++ b/PARR.API/Controllers/V1/EsppDataController.cs @@ -10,6 +10,7 @@ namespace PARR.API.Controllers.V1 { public class EsppDataController : BaseApiController { + private readonly ILogger logger; private readonly IFileService fileService; private readonly StorageSettings storageSettings; @@ -19,36 +20,36 @@ namespace PARR.API.Controllers.V1 StorageSettings storageSettings ) { - Logger = logger; + this.logger = logger; this.fileService = fileService; this.storageSettings = storageSettings; } - public ILogger Logger { get; } + // UploadTemplates - неактуально, так как стали брать данные с RabbitMQ - /// - /// Загрузить файл списка шаблонов полученных из ЕСПП в формате csv - /// - /// - [HttpPost(ApiRoutes.EsppData.UploadTemplates)] - public async Task UploadTemplates([BindRequired] IFormFile file) - { - if (!fileService.IsExtensionAllowed(file, storageSettings.EsppTemplates!.AllowedExtensions)) - return BadRequest( - new Response(false, - new List { - new ErrorModel { - Message = $"Недопустимое расширение файла. Разрешенные расширения: {string.Join(", ", storageSettings.EsppTemplates.AllowedExtensions)}" - } })); + ///// + ///// Загрузить файл списка шаблонов полученных из ЕСПП в формате csv + ///// + ///// + //[HttpPost(ApiRoutes.EsppData.UploadTemplates)] + //public async Task UploadTemplates([BindRequired] IFormFile file) + //{ + // if (!fileService.IsExtensionAllowed(file, storageSettings.EsppTemplates!.AllowedExtensions)) + // return BadRequest( + // new Response(false, + // new List { + // new ErrorModel { + // Message = $"Недопустимое расширение файла. Разрешенные расширения: {string.Join(", ", storageSettings.EsppTemplates.AllowedExtensions)}" + // } })); - if (!fileService.IsNotExceededLimit(file, storageSettings.EsppTemplates.MaxFileSizeMb)) - return BadRequest(new Response(false, new List { new ErrorModel { FieldName = nameof(file), Message = $"Размер файла превышает {storageSettings.EsppTemplates.MaxFileSizeMb} МБайт" } })); + // if (!fileService.IsNotExceededLimit(file, storageSettings.EsppTemplates.MaxFileSizeMb)) + // return BadRequest(new Response(false, new List { new ErrorModel { FieldName = nameof(file), Message = $"Размер файла превышает {storageSettings.EsppTemplates.MaxFileSizeMb} МБайт" } })); - var uploadResult = await fileService.UploadAsync(file, storageSettings.EsppTemplates.TemplatePath); - if (uploadResult == null) - return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при сохранении файла" } })); + // var uploadResult = await fileService.UploadAsync(file, storageSettings.EsppTemplates.TemplatePath); + // if (uploadResult == null) + // return BadRequest(new Response(false, new List { new ErrorModel { Message = "Ошибка при сохранении файла" } })); - return Ok(new Response("", true, new List(), $"Файл загружен.")); - } + // return Ok(new Response("", true, new List(), $"Файл загружен.")); + //} } } diff --git a/PARR.API/Controllers/V1/JobController.cs b/PARR.API/Controllers/V1/JobController.cs index 90be2188..2cd778dc 100644 --- a/PARR.API/Controllers/V1/JobController.cs +++ b/PARR.API/Controllers/V1/JobController.cs @@ -10,7 +10,6 @@ using PARR.API.Extensions; using PARR.API.Services.Interfaces; using PARR.DAL.DomainModels; using PARR.DAL.Models.V1; -using PARR.DAL.Services.Interfaces; using PARR.DAL.Services.Interfaces.V1; namespace PARR.API.Controllers.V1 diff --git a/PARR.API/Controllers/V1/StatusTemplateController.cs b/PARR.API/Controllers/V1/StatusTemplateController.cs new file mode 100644 index 00000000..ccb7d2b0 --- /dev/null +++ b/PARR.API/Controllers/V1/StatusTemplateController.cs @@ -0,0 +1,42 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using PARR.API.Contracts.V1; +using PARR.API.Contracts.V1.Responses; +using PARR.API.Contracts.V1.Responses.Base; +using PARR.API.Controllers.V1.Base; +using PARR.DAL.Services; + +namespace PARR.API.Controllers.V1 +{ + public class StatusTemplateController : BaseApiController + { + private readonly IMapper mapper; + private readonly IStatusTemplateService statusTemplateService; + + public StatusTemplateController( + IMapper mapper, + IStatusTemplateService statusTemplateService + ) + { + this.mapper = mapper; + this.statusTemplateService = statusTemplateService; + } + + /// + /// Получить список статусов + /// + /// + [HttpGet(ApiRoutes.StatusTemplate.GetAll)] + public async Task GetAll() + { + var statusList = await statusTemplateService.Get() + .OrderBy(t => t.Code) + .ToListAsync(); + + var response = mapper.Map>(statusList); + + return Ok(new Response>(response, true)); + } + } +} diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs new file mode 100644 index 00000000..e1abd2cc --- /dev/null +++ b/PARR.API/Controllers/V1/TemplateController.cs @@ -0,0 +1,136 @@ +using AutoMapper; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using PARR.API.Contracts.V1; +using PARR.API.Contracts.V1.Requests.Queries; +using PARR.API.Contracts.V1.Responses; +using PARR.API.Contracts.V1.Responses.Base; +using PARR.API.Controllers.V1.Base; +using PARR.API.Extensions; +using PARR.DAL.Contracts; +using PARR.DAL.DomainModels; +using PARR.DAL.Models; +using PARR.DAL.Services.Interfaces; + +namespace PARR.API.Controllers.V1 +{ + public class TemplateController : BaseApiController + { + private readonly IMapper mapper; + private readonly ITemplateService templateService; + + public TemplateController( + IMapper mapper, + ITemplateService templateService + ) + { + this.mapper = mapper; + this.templateService = templateService; + } + + + /// + /// Получить список всех шаблонов постранично + /// + /// + /// + [HttpGet(ApiRoutes.Template.GetAll)] + public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] TemplateQuery filter) + { + var paginationFilter = mapper.Map(paginationQuery); + + IQueryable