diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index 21636611..f869c6c8 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -209,7 +209,6 @@
#endregion
-
#region Наряды
public static class Order
@@ -222,7 +221,6 @@
#endregion
-
#region TNK
public static class Process
@@ -298,6 +296,10 @@
}
#endregion
+ public static class Application
+ {
+ public const string GetAll = Base + "/applications/";
+ }
public static class EkStatus
{
diff --git a/PARR.API/Contracts/V1/Requests/Queries/ApplicationQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/ApplicationQuery.cs
new file mode 100644
index 00000000..0a395837
--- /dev/null
+++ b/PARR.API/Contracts/V1/Requests/Queries/ApplicationQuery.cs
@@ -0,0 +1,18 @@
+using PARR.DAL.Contracts;
+
+namespace PARR.API.Contracts.V1.Requests.Queries
+{
+ public class ApplicationQuery
+ {
+ ///
+ /// Поиск по имени. Например: "tomcat"
+ ///
+ public string? Name { get; set; }
+
+
+ ///
+ /// Поиск по типу: 0 - APP, 1 - OS, 2 - DB
+ ///
+ public ApplicationTypesEnum? Type { get; set; }
+ }
+}
diff --git a/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs
index 57f1fd1b..e6c82d2d 100644
--- a/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs
+++ b/PARR.API/Contracts/V1/Requests/Queries/WorkGetAllQuery.cs
@@ -6,5 +6,10 @@
/// С иерархией до процесса
///
public bool AllParents { get; set; } = false;
+
+ ///
+ /// Поиск по имени. Например: "прочее"
+ ///
+ public string? Name { get; set; }
}
}
diff --git a/PARR.API/Controllers/V1/ApplicationController.cs b/PARR.API/Controllers/V1/ApplicationController.cs
new file mode 100644
index 00000000..3db63e5b
--- /dev/null
+++ b/PARR.API/Controllers/V1/ApplicationController.cs
@@ -0,0 +1,74 @@
+using AutoMapper;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Cors.Infrastructure;
+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.Constants;
+using PARR.DAL.DomainModels;
+using PARR.DAL.Models;
+using PARR.DAL.Services.Interfaces;
+
+namespace PARR.API.Controllers.V1
+{
+ ///
+ /// Управление приложениями
+ ///
+
+ [Authorize(Roles = ParrRoles.Administrator.Role)]
+ public class ApplicationController : BaseApiController
+ {
+ private readonly ILogger logger;
+ private readonly IMapper mapper;
+ private readonly IApplicationService applicationService;
+
+ public ApplicationController(
+ ILogger logger,
+ IMapper mapper,
+ IApplicationService applicationService
+ )
+ {
+ this.logger = logger;
+ this.mapper = mapper;
+ this.applicationService = applicationService;
+ }
+
+
+ ///
+ /// Список приложений постранично
+ ///
+ ///
+ ///
+ [HttpGet(ApiRoutes.Application.GetAll)]
+ public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] ApplicationQuery filter)
+ {
+ var paginationFilter = mapper.Map(paginationQuery);
+
+ IQueryable query = applicationService.Get()
+ .Include(t => t.ApplicationType)
+ .OrderBy(t => t.Name);
+
+ if (!string.IsNullOrWhiteSpace(filter.Name))
+ query = query.Where(t => t.Name.ToLower().Contains(filter.Name.ToLower()));
+
+ if (filter.Type.HasValue)
+ query = query.Where(t => t.ApplicationType!.Name == filter.Type.Value.ToString());
+
+
+ var apps = await applicationService.GetPage(query, paginationFilter).ToListAsync();
+
+ if (!apps.Any())
+ return NoContent();
+
+ var appsResponse = mapper.Map>(apps);
+ var paginationResponse = new PagedResponse(appsResponse, true).GetPaginatedProps(paginationFilter, query);
+
+ return Ok(paginationResponse);
+ }
+ }
+}
diff --git a/PARR.API/Controllers/V1/WorkController.cs b/PARR.API/Controllers/V1/WorkController.cs
index 01e3e724..c00e9fee 100644
--- a/PARR.API/Controllers/V1/WorkController.cs
+++ b/PARR.API/Controllers/V1/WorkController.cs
@@ -52,22 +52,26 @@ namespace PARR.API.Controllers.V1
///
///
[HttpGet(ApiRoutes.Work.GetAll)]
- public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] WorkGetAllQuery requestQuery)
+ public async Task GetAll([FromQuery] PaginationQuery paginationQuery, [FromQuery] WorkGetAllQuery filter)
{
var paginationFilter = mapper.Map(paginationQuery);
IQueryable query = workService.Get()
.OrderBy(t => t.Name);
- if (requestQuery.AllParents)
+ if (filter.AllParents)
query = query.Include(t => t.Tnk).ThenInclude(s => s.Subprocess).ThenInclude(p => p.Process);
+ if (!string.IsNullOrWhiteSpace(filter.Name))
+ query = query.Where(t => t.Name.ToLower().Contains(filter.Name.ToLower()));
+
+
var works = await workService.GetPage(query, paginationFilter).ToListAsync();
if (!works.Any())
return NoContent();
- if (requestQuery.AllParents)
+ if (filter.AllParents)
{
//todo: тут бесконечность в маппинге
// респонс с иерархией вверх до процесса