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();
+ }
+}