diff --git a/PARR.API/Contracts/V1/Requests/BaseRequests/FullQuery.cs b/PARR.API/Contracts/V1/Requests/BaseRequests/FullQuery.cs
new file mode 100644
index 00000000..3143e7c4
--- /dev/null
+++ b/PARR.API/Contracts/V1/Requests/BaseRequests/FullQuery.cs
@@ -0,0 +1,11 @@
+namespace PARR.API.Contracts.V1.Requests.BaseRequests
+{
+ public class FullQuery
+ {
+ ///
+ /// Полный запрос, включающий все данные
+ ///
+ public bool IsFull { get; set; }
+
+ }
+}
diff --git a/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs b/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs
index 27b76c62..dc220052 100644
--- a/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs
+++ b/PARR.API/Contracts/V1/Requests/Queries/HostQuery.cs
@@ -1,6 +1,8 @@
-namespace PARR.API.Contracts.V1.Requests.Queries
+using PARR.API.Contracts.V1.Requests.BaseRequests;
+
+namespace PARR.API.Contracts.V1.Requests.Queries
{
- public class HostQuery
+ public class HostQuery: FullQuery
{
///
/// Поиск по маске ЭК. Например: "ВРТ-*-ДВС"
diff --git a/PARR.API/Contracts/V1/Responses/AttributeResponse.cs b/PARR.API/Contracts/V1/Responses/AttributeResponse.cs
index b269df07..56ee4557 100644
--- a/PARR.API/Contracts/V1/Responses/AttributeResponse.cs
+++ b/PARR.API/Contracts/V1/Responses/AttributeResponse.cs
@@ -2,16 +2,14 @@
{
public class AttributeResponse
{
- public Guid Id { get; set; }
-
///
/// Имя из поля DisplayName, если пустое - берём AihitName
///
- public required string Name { get; set; }
+ public required FieldResponse Field { get; set; }
///
/// Соответствующее полю значение
///
- public required string Value { get; set; }
+ public required ValueResponse Value { get; set; }
}
}
diff --git a/PARR.API/Contracts/V1/Responses/FieldBaseResponse.cs b/PARR.API/Contracts/V1/Responses/FieldBaseResponse.cs
new file mode 100644
index 00000000..5a855744
--- /dev/null
+++ b/PARR.API/Contracts/V1/Responses/FieldBaseResponse.cs
@@ -0,0 +1,15 @@
+namespace PARR.API.Contracts.V1.Responses
+{
+ public class FieldBaseResponse
+ {
+ public Guid Id { get; set; }
+
+ public required string Name { get; set; }
+ }
+
+
+ public class FieldResponse : FieldBaseResponse
+ {
+
+ }
+}
diff --git a/PARR.API/Contracts/V1/Responses/UnitResponse.cs b/PARR.API/Contracts/V1/Responses/UnitBaseResponse.cs
similarity index 66%
rename from PARR.API/Contracts/V1/Responses/UnitResponse.cs
rename to PARR.API/Contracts/V1/Responses/UnitBaseResponse.cs
index 5f68a4ab..293ad2d3 100644
--- a/PARR.API/Contracts/V1/Responses/UnitResponse.cs
+++ b/PARR.API/Contracts/V1/Responses/UnitBaseResponse.cs
@@ -1,6 +1,6 @@
namespace PARR.API.Contracts.V1.Responses
{
- public class UnitResponse
+ public class UnitBaseResponse
{
public Guid Id { get; set; }
@@ -8,11 +8,29 @@
}
+ public class UnitResponse : UnitBaseResponse
+ {
+
+ }
+
+
///
/// Response с всеми аттребутами и их значениями
///
- public class UnitWithAttributesResponse : UnitResponse
+ public class UnitWithAttributesResponse : UnitBaseResponse
{
public List? Attributes { get; set; }
}
+
+
+
+
+
+
+
+
+
+
+
+
}
diff --git a/PARR.API/Contracts/V1/Responses/ValueBaseResponse.cs b/PARR.API/Contracts/V1/Responses/ValueBaseResponse.cs
new file mode 100644
index 00000000..0786ca52
--- /dev/null
+++ b/PARR.API/Contracts/V1/Responses/ValueBaseResponse.cs
@@ -0,0 +1,14 @@
+namespace PARR.API.Contracts.V1.Responses
+{
+ public class ValueBaseResponse
+ {
+ public Guid Id { get; set; }
+ public string Value { get; set; }
+ }
+
+
+ public class ValueResponse : ValueBaseResponse
+ {
+
+ }
+}
diff --git a/PARR.API/Controllers/V1/HostController.cs b/PARR.API/Controllers/V1/HostController.cs
index 60e7eb3e..f4ff122f 100644
--- a/PARR.API/Controllers/V1/HostController.cs
+++ b/PARR.API/Controllers/V1/HostController.cs
@@ -65,16 +65,18 @@ namespace PARR.API.Controllers.V1
//var paginationResponse = new PagedResponse(hostResponse, true).GetPaginatedProps(paginationFilter, query);
IQueryable query = unitService.Get()
- .AsNoTracking()
- .Include(t => t.UnitValues)
- .ThenInclude(uv => uv.Value)
- .Include(tf => tf.UnitValues)
- .ThenInclude(uv => uv.Field)
.OrderBy(t => t.Name);
if (!string.IsNullOrEmpty(request.Mask))
query = query.Where(t => EF.Functions.Like(t.Name.ToLower(), SqlHelpers.RegexToLike(request.Mask)));
+ if (request.IsFull)
+ query = query
+ .Include(t => t.UnitValues)
+ .ThenInclude(uv => uv.Value)
+ .Include(tf => tf.UnitValues)
+ .ThenInclude(uv => uv.Field);
+
var units = await unitService.GetPage(query, paginationFilter).ToListAsync();
if (!units.Any())
@@ -108,12 +110,12 @@ namespace PARR.API.Controllers.V1
//var response = mapper.Map(host);
var unit = await unitService.Get()
- .AsNoTracking()
.Include(t => t.UnitValues)
.ThenInclude(uv => uv.Value)
.Include(tf => tf.UnitValues)
.ThenInclude(uv => uv.Field)
.FirstOrDefaultAsync(t => t.Id == id);
+
if (unit == null)
return NotFound();
diff --git a/PARR.API/MappingProfiles/DomainToResponseProfile.cs b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
index a18c93a2..de63e88b 100644
--- a/PARR.API/MappingProfiles/DomainToResponseProfile.cs
+++ b/PARR.API/MappingProfiles/DomainToResponseProfile.cs
@@ -106,12 +106,16 @@ namespace PARR.API.MappingProfiles
#region Unit
- CreateMap()
- .ForMember(d => d.Id, o => o.MapFrom(s => s.Value!.Id))
- .ForMember(d => d.Name, o => o.MapFrom(s => (string.IsNullOrEmpty(s.Field!.DisplayName)) ? s.Field!.AihitName : s.Field!.DisplayName))
- .ForMember(d => d.Value, o => o.MapFrom(s => s.Value!.Value));
+ CreateMap()
+ .ForMember(d => d.Name, o => o.MapFrom(s => (string.IsNullOrEmpty(s.DisplayName)) ? s.AihitName : s.DisplayName));
- CreateMap()
+ CreateMap();
+
+ CreateMap()
+ .ForMember(d => d.Field, o => o.MapFrom(s => s.Field))
+ .ForMember(d => d.Value, o => o.MapFrom(s => s.Value));
+
+ CreateMap()
.Include()
.ForMember(d => d.Name, o => o.MapFrom(s => s.Name));