diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs index 8b6182a7..fcdc21c4 100644 --- a/PARR.API/Contracts/V1/ApiRoutes.cs +++ b/PARR.API/Contracts/V1/ApiRoutes.cs @@ -115,6 +115,11 @@ public const string getParam = "{id}"; } + public static class ResponseArea + { + public const string GetAll = Base + "/response-areas/"; + } + public static class RobotHistoryLevel { public const string GetAll = Base + "/robot-history-levels/"; diff --git a/PARR.API/Contracts/V1/Requests/Queries/WorkGroupQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/WorkGroupQuery.cs index 8ee75781..37c9ece2 100644 --- a/PARR.API/Contracts/V1/Requests/Queries/WorkGroupQuery.cs +++ b/PARR.API/Contracts/V1/Requests/Queries/WorkGroupQuery.cs @@ -6,5 +6,10 @@ /// Поиск по имени, например "АСУ" /// public string? Name { get; set; } + + /// + /// Поиск по коду зоны ответственности + /// + public int? ResponseAreaCode { get; set; } } } diff --git a/PARR.API/Controllers/V1/ResponseAreaController.cs b/PARR.API/Controllers/V1/ResponseAreaController.cs new file mode 100644 index 00000000..8c368221 --- /dev/null +++ b/PARR.API/Controllers/V1/ResponseAreaController.cs @@ -0,0 +1,54 @@ +using AutoMapper; +using Microsoft.AspNetCore.Authorization; +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.Constants; +using PARR.DAL.DomainModels; +using PARR.DAL.Services.Interfaces; + +namespace PARR.API.Controllers.V1 +{ + /// + /// Зоны ответственности + /// + [Authorize(Roles = ParrRoles.Administrator.Role)] + public class ResponseAreaController : BaseApiController + { + private readonly IMapper mapper; + private readonly IResponseAreaService responseAreaService; + + public ResponseAreaController( + IMapper mapper, + IResponseAreaService responseAreaService + ) + { + this.mapper = mapper; + this.responseAreaService = responseAreaService; + } + + + /// + /// Список зон ответственности + /// + /// + [HttpGet(ApiRoutes.ResponseArea.GetAll)] + public async Task GetAll() + { + var query = responseAreaService.Get().OrderBy(t => t.Name); + + var responseAreas = await query.ToListAsync(); + + if (!responseAreas.Any()) + return NoContent(); + + var response = mapper.Map>(responseAreas); + + return Ok(new Response>(response, true)); + } + } +} diff --git a/PARR.API/Controllers/V1/WorkGroupController.cs b/PARR.API/Controllers/V1/WorkGroupController.cs index 91a0e16e..54319953 100644 --- a/PARR.API/Controllers/V1/WorkGroupController.cs +++ b/PARR.API/Controllers/V1/WorkGroupController.cs @@ -9,6 +9,7 @@ using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.API.Extensions; using PARR.Constants; +using PARR.DAL.Contracts; using PARR.DAL.DomainModels; using PARR.DAL.Models; using PARR.DAL.Services.Interfaces; @@ -50,6 +51,15 @@ namespace PARR.API.Controllers.V1 if (!string.IsNullOrEmpty(filter.Name)) query = query.Where(t => t.Name.ToLower().Contains(filter.Name.ToLower())); + if (filter.ResponseAreaCode.HasValue) + { + //todo: validate ResponseAreaEnum + if (!Enum.IsDefined(typeof(ResponseAreaEnum), filter.ResponseAreaCode.Value)) + return BadRequest(new Response(false, new List { new ErrorModel { FieldName = nameof(filter.ResponseAreaCode), Message = "Неверное значение" } })); + + query = query.Where(t => t.ResponseAreaCode == filter.ResponseAreaCode.Value); + } + var workGroups = await workGroupService.GetPage(query, paginationFilter).ToListAsync(); if (!workGroups.Any()) diff --git a/PARR.DAL/ParrDalInstaller.cs b/PARR.DAL/ParrDalInstaller.cs index 283317a3..45c0cb42 100644 --- a/PARR.DAL/ParrDalInstaller.cs +++ b/PARR.DAL/ParrDalInstaller.cs @@ -83,6 +83,7 @@ namespace PARR.DAL services.AddTransient(); services.AddTransient(); services.AddTransient(); + services.AddTransient(); diff --git a/PARR.DAL/Services/Implementations/ResponseAreaService.cs b/PARR.DAL/Services/Implementations/ResponseAreaService.cs new file mode 100644 index 00000000..fa9b16b0 --- /dev/null +++ b/PARR.DAL/Services/Implementations/ResponseAreaService.cs @@ -0,0 +1,21 @@ +using PARR.DAL.Context; +using PARR.DAL.Models; +using PARR.DAL.Services.Interfaces; + +namespace PARR.DAL.Services.Implementations +{ + internal class ResponseAreaService : IResponseAreaService + { + private readonly DataContext dataContext; + + public ResponseAreaService(DataContext dataContext) + { + this.dataContext = dataContext; + } + + public IQueryable Get() + { + return dataContext.ResponseAreas; + } + } +} diff --git a/PARR.DAL/Services/Interfaces/IResponseAreaService.cs b/PARR.DAL/Services/Interfaces/IResponseAreaService.cs new file mode 100644 index 00000000..f662776d --- /dev/null +++ b/PARR.DAL/Services/Interfaces/IResponseAreaService.cs @@ -0,0 +1,9 @@ +using PARR.DAL.Models; + +namespace PARR.DAL.Services.Interfaces +{ + public interface IResponseAreaService + { + IQueryable Get(); + } +}