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));