From c6f61c5fa419b0ff35f6496af9483c12cdc66cff Mon Sep 17 00:00:00 2001 From: Mikhail Trubnikov Date: Tue, 26 Sep 2023 12:26:37 +1000 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20=D1=85?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=BE=D0=B2=20=D0=BF=D0=BE=20=D0=BC=D0=B0?= =?UTF-8?q?=D1=81=D0=BA=D0=B5.=20=D0=A1=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20?= =?UTF-8?q?=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D0=BE=D0=B2=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=BC=D0=B0=D1=81=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PARR.API/Contracts/V1/ApiRoutes.cs | 4 ++ .../V1/Requests/Queries/HostQuery.cs | 10 ++++ .../V1/Requests/Queries/TemplateQuery.cs | 5 ++ PARR.API/Controllers/V1/HostController.cs | 54 +++++++++++++++++++ PARR.API/Controllers/V1/TemplateController.cs | 8 ++- 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs create mode 100644 PARR.API/Controllers/V1/HostController.cs diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs index bf7af6ea..9b1591f7 100644 --- a/PARR.API/Contracts/V1/ApiRoutes.cs +++ b/PARR.API/Contracts/V1/ApiRoutes.cs @@ -73,6 +73,10 @@ public const string Create = Base + "/generator-templates/"; } + public static class Host + { + public const string GetAll = Base + "/hosts/"; + } //public static class Layer //{ diff --git a/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs new file mode 100644 index 00000000..364595f4 --- /dev/null +++ b/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs @@ -0,0 +1,10 @@ +namespace PARR.API.Contracts.V1.Requests.Queries +{ + public class HostQuery + { + /// + /// Поиск по маске ЭК. Например: "*-ДВС" + /// + public string? Mask { get; set; } + } +} diff --git a/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs index 86b7ebde..4f1b583e 100644 --- a/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs +++ b/PARR.API/Contracts/V1/Requests/Queries/TemplateQuery.cs @@ -6,5 +6,10 @@ /// Статус шаблона: 10, 20, 30 /// public int? StatusCode { get; set; } + + /// + /// Поиск по маске. Например: "*-ДВС" + /// + public string? Mask { get; set; } } } diff --git a/PARR.API/Controllers/V1/HostController.cs b/PARR.API/Controllers/V1/HostController.cs new file mode 100644 index 00000000..0abde1ab --- /dev/null +++ b/PARR.API/Controllers/V1/HostController.cs @@ -0,0 +1,54 @@ +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.BLL.Helpers; +using PARR.DAL.DomainModels; +using PARR.DAL.Services.Interfaces; + +namespace PARR.API.Controllers.V1 +{ + public class HostController : BaseApiController + { + private readonly IMapper mapper; + private readonly IHostService hostService; + + public HostController(IMapper mapper, IHostService hostService) + { + this.mapper = mapper; + this.hostService = hostService; + } + + + /// + /// Получить список хостов постранично + /// + /// + /// + [HttpGet(ApiRoutes.Host.GetAll)] + public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] HostQuery request) + { + var paginationFilter = mapper.Map(paginationQuery); + + IQueryable query = hostService.Get().Include(s => s.EkStatus).OrderBy(t => t.Ek); + + if (!string.IsNullOrEmpty(request.Mask)) + query = query.Where(t => EF.Functions.Like(t.Ek.ToLower(), SqlHelpers.RegexToLike(request.Mask))); + + var hosts = await hostService.GetPage(query, paginationFilter).ToListAsync(); + + if (!hosts.Any()) + return NoContent(); + + var hostResponse = mapper.Map>(hosts); + var paginationResponse = new PagedResponse(hostResponse, true).GetPaginatedProps(paginationFilter, query); + + return Ok(paginationResponse); + } + } +} diff --git a/PARR.API/Controllers/V1/TemplateController.cs b/PARR.API/Controllers/V1/TemplateController.cs index 39d6ee79..f45713f8 100644 --- a/PARR.API/Controllers/V1/TemplateController.cs +++ b/PARR.API/Controllers/V1/TemplateController.cs @@ -7,6 +7,7 @@ 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.BLL.Helpers; using PARR.DAL.Contracts; using PARR.DAL.DomainModels; using PARR.DAL.Models; @@ -40,8 +41,8 @@ namespace PARR.API.Controllers.V1 var paginationFilter = mapper.Map(paginationQuery); IQueryable