From 8d1ae1af846810af1cdc3f891f7bb9e5c6580394 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Tue, 16 May 2023 09:17:17 +0500 Subject: [PATCH 1/6] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=93?= =?UTF-8?q?=D0=A2=D0=98=20=D0=BF=D0=BE=20Record=20Id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Data/GTR/WitsItemRecordDto.cs | 30 +++++++++ AsbCloudApp/Repositories/IGtrRepository.cs | 9 +++ .../Repository/GtrWitsRepository.cs | 63 +++++++++++++++++++ .../Controllers/SAUB/GtrWitsController.cs | 20 ++++++ 4 files changed, 122 insertions(+) create mode 100644 AsbCloudApp/Data/GTR/WitsItemRecordDto.cs diff --git a/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs b/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs new file mode 100644 index 00000000..d2bb2722 --- /dev/null +++ b/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs @@ -0,0 +1,30 @@ +using System; + +namespace AsbCloudApp.Data.GTR +{ + /// + /// Запись WITS + /// + public class WitsItemRecordDto + { + /// + /// Record Id + /// + public int IdRecord { get; set; } + + /// + /// Item Id + /// + public int IdItem { get; set; } + + /// + /// Дата создания записи + /// + public DateTime Date { get; set; } + + /// + /// Значение + /// + public object Value { get; set; } + } +} \ No newline at end of file diff --git a/AsbCloudApp/Repositories/IGtrRepository.cs b/AsbCloudApp/Repositories/IGtrRepository.cs index 4082a4cc..9b8c35f6 100644 --- a/AsbCloudApp/Repositories/IGtrRepository.cs +++ b/AsbCloudApp/Repositories/IGtrRepository.cs @@ -34,6 +34,15 @@ namespace AsbCloudApp.Repositories Task> GetAsync(int idWell, DateTime? dateBegin, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default); + + /// + /// получение данных по record id + /// + /// + /// + /// + /// + Task> GetByRecordAsync(int idWell, int idRecord, CancellationToken token = default); } #nullable disable } diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index d3e395d3..1d211734 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -61,6 +61,35 @@ namespace AsbCloudInfrastructure.Repository return dtos; } + public async Task> GetByRecordAsync(int idWell, int idRecord, CancellationToken token = default) + { + var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell); + if (telemetry is null) + return Enumerable.Empty(); + + var timezone = telemetryService.GetTimezone(telemetry.Id); + + var recordAllInt = await GetItemsOrDefaultByRecordAsync(telemetry.Id, idRecord, timezone.Hours, token); + var recordAllFloat = await GetItemsOrDefaultByRecordAsync(telemetry.Id, idRecord, timezone.Hours, token); + var recordAllString = await GetItemsOrDefaultByRecordAsync(telemetry.Id, idRecord, timezone.Hours, token); + + var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString) + .GroupBy(g => new + { + g.IdRecord, + g.IdTelemetry, + g.IdItem + }) + .Select(g => new WitsItemRecordDto() + { + IdRecord = g.Key.IdRecord, + IdItem = g.Key.IdItem, + Date = g.MaxBy(i => i.Date)!.Date, + Value = g.MaxBy(i => i.Date)!.Item.Value, + }).ToArray(); + return dtos; + } + private async Task> GetItemsOrDefaultAsync( int idTelemetry, DateTimeOffset? dateBegin, @@ -111,6 +140,40 @@ namespace AsbCloudInfrastructure.Repository return items; } + private async Task> GetItemsOrDefaultByRecordAsync( + int idTelemetry, + int idRecord, + double timezoneHours, + CancellationToken token) + where TEntity : WitsItemBase + where TValue : notnull + { + var query = db.Set() + .Where(i => i.IdTelemetry == idTelemetry) + .Where(i => i.IdRecord == idRecord); + + var fullDataCount = await query.CountAsync(token); + + if (fullDataCount == 0) + return Enumerable.Empty(); + + var entities = await query + .OrderBy(d => d.DateTime) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + + var items = entities.Select(e => new ItemRecord + { + IdRecord = e.IdRecord, + IdTelemetry = e.IdTelemetry, + Date = e.DateTime.ToRemoteDateTime(timezoneHours), + IdItem = e.IdItem, + Item = new JsonValue(e.Value) + }); + return items; + } + public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token) { var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours; diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs index 895d4721..e97d551a 100644 --- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs @@ -68,6 +68,26 @@ namespace AsbCloudWebApi.Controllers.SAUB return Ok(content); } + [HttpGet("{idWell}/{idRecord}")] + [Permission] + public async Task>> GetDataByRecordAsync(int idWell, int idRecord, CancellationToken token = default) + { + int? idCompany = User.GetCompanyId(); + + if (idCompany is null) + return Forbid(); + + bool isCompanyOwnsWell = await wellService.IsCompanyInvolvedInWellAsync((int)idCompany, + idWell, token).ConfigureAwait(false); + + if (!isCompanyOwnsWell) + return Forbid(); + + var content = await gtrRepository.GetByRecordAsync(idWell, idRecord, token).ConfigureAwait(false); + + return Ok(content); + } + /// /// Метод для получения WITS записи от панели оператора. /// Сохраняет в БД. From 7514e3132ab80d974b95a27e3782227f77739b89 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Thu, 18 May 2023 15:31:27 +0500 Subject: [PATCH 2/6] =?UTF-8?q?=D0=9F=D0=BE=D0=BB=D1=83=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=93?= =?UTF-8?q?=D0=A2=D0=98=20=D0=BF=D0=BE=20id=20record?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Repositories/IGtrRepository.cs | 4 +- .../Repository/GtrWitsRepository.cs | 154 +++++++++--------- .../Controllers/SAUB/GtrWitsController.cs | 11 +- 3 files changed, 88 insertions(+), 81 deletions(-) diff --git a/AsbCloudApp/Repositories/IGtrRepository.cs b/AsbCloudApp/Repositories/IGtrRepository.cs index 9b8c35f6..06efac1e 100644 --- a/AsbCloudApp/Repositories/IGtrRepository.cs +++ b/AsbCloudApp/Repositories/IGtrRepository.cs @@ -36,13 +36,13 @@ namespace AsbCloudApp.Repositories int approxPointsCount = 1024, CancellationToken token = default); /// - /// получение данных по record id + /// получение данных ГТИ по record id /// /// /// /// /// - Task> GetByRecordAsync(int idWell, int idRecord, CancellationToken token = default); + Task> GetDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default); } #nullable disable } diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index 1d211734..9fc62845 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -3,7 +3,6 @@ using AsbCloudApp.Repositories; using AsbCloudApp.Services; using AsbCloudDb.Model; using AsbCloudDb.Model.GTR; -using Mapster; using Microsoft.EntityFrameworkCore; using System; using System.Collections.Generic; @@ -23,7 +22,7 @@ namespace AsbCloudInfrastructure.Repository IAsbCloudDbContext db, ITelemetryService telemetryService) { - + this.db = db; this.telemetryService = telemetryService; } @@ -36,12 +35,21 @@ namespace AsbCloudInfrastructure.Repository var timezone = telemetryService.GetTimezone(telemetry.Id); - DateTimeOffset? dateBeginUtc = dateBegin?.ToUtcDateTimeOffset(timezone.Hours); + DateTimeOffset? dateBeginUtc = dateBegin?.ToUtcDateTimeOffset(timezone.Hours); var dateEnd = dateBeginUtc?.AddSeconds(intervalSec); - var recordAllInt = await GetItemsOrDefaultAsync(telemetry.Id, dateBeginUtc, dateEnd, approxPointsCount, timezone.Hours, token); - var recordAllFloat = await GetItemsOrDefaultAsync(telemetry.Id, dateBeginUtc, dateEnd, approxPointsCount,timezone.Hours, token); - var recordAllString = await GetItemsOrDefaultAsync(telemetry.Id, dateBeginUtc, dateEnd, approxPointsCount, timezone.Hours, token); + var witsRequest = new WitsRequest() + { + IdTelemetry = telemetry.Id, + DateBeginUtc = dateBeginUtc, + DateEnd = dateEnd, + ApproxPointsCount = approxPointsCount, + TimezoneHours = timezone.Hours + }; + + var recordAllInt = await GetItemsOrDefaultAsync(witsRequest, token); + var recordAllFloat = await GetItemsOrDefaultAsync(witsRequest, token); + var recordAllString = await GetItemsOrDefaultAsync(witsRequest, token); var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString) .GroupBy(g => new @@ -53,15 +61,16 @@ namespace AsbCloudInfrastructure.Repository { Id = g.Key.IdRecord, Date = g.Key.Date, - Items = g.Select(r => new { - Key = r.IdItem, - Value = r.Item + Items = g.Select(r => new + { + Key = r.IdItem, + Value = r.Item }).ToDictionary(x => x.Key, x => x.Value) - }); + }); return dtos; } - public async Task> GetByRecordAsync(int idWell, int idRecord, CancellationToken token = default) + public async Task> GetDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) { var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell); if (telemetry is null) @@ -69,9 +78,17 @@ namespace AsbCloudInfrastructure.Repository var timezone = telemetryService.GetTimezone(telemetry.Id); - var recordAllInt = await GetItemsOrDefaultByRecordAsync(telemetry.Id, idRecord, timezone.Hours, token); - var recordAllFloat = await GetItemsOrDefaultByRecordAsync(telemetry.Id, idRecord, timezone.Hours, token); - var recordAllString = await GetItemsOrDefaultByRecordAsync(telemetry.Id, idRecord, timezone.Hours, token); + var witsRequest = new WitsRequest() + { + IdTelemetry = telemetry.Id, + TimezoneHours = timezone.Hours, + IdRecord = idRecord, + }; + + var recordAllInt = await GetItemsOrDefaultAsync(witsRequest, token); + var recordAllFloat = await GetItemsOrDefaultAsync(witsRequest, token); + var recordAllString = await GetItemsOrDefaultAsync(witsRequest, token); + var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString) .GroupBy(g => new @@ -85,95 +102,68 @@ namespace AsbCloudInfrastructure.Repository IdRecord = g.Key.IdRecord, IdItem = g.Key.IdItem, Date = g.MaxBy(i => i.Date)!.Date, - Value = g.MaxBy(i => i.Date)!.Item.Value, + Value = g.MaxBy(i => i.Date)!.Item.Value, }).ToArray(); return dtos; } private async Task> GetItemsOrDefaultAsync( - int idTelemetry, - DateTimeOffset? dateBegin, - DateTimeOffset? dateEnd, - int approxPointsCount, - double timezoneHours, + WitsRequest request, CancellationToken token) - where TEntity: WitsItemBase - where TValue: notnull + where TEntity : WitsItemBase + where TValue : notnull { - var query = db.Set() - .Where(i => i.IdTelemetry == idTelemetry); - - if (dateBegin is not null) - query = query - .Where(d => d.DateTime >= dateBegin); - - if (dateEnd is not null) - query = query - .Where(d => d.DateTime <= dateEnd); + var query = BuildQuery(request, token); var fullDataCount = await query.CountAsync(token); - if (fullDataCount == 0) return Enumerable.Empty(); - if (fullDataCount > 1.75 * approxPointsCount) + if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount) { - var m = (int)Math.Round(1d * fullDataCount / approxPointsCount); + var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value); if (m > 1) query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); } var entities = await query - .OrderBy(d => d.DateTime) .AsNoTracking() .ToListAsync(token) .ConfigureAwait(false); - + var items = entities.Select(e => new ItemRecord { IdRecord = e.IdRecord, IdTelemetry = e.IdTelemetry, - Date = e.DateTime.ToRemoteDateTime(timezoneHours), + Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours), IdItem = e.IdItem, Item = new JsonValue(e.Value) }); return items; } - private async Task> GetItemsOrDefaultByRecordAsync( - int idTelemetry, - int idRecord, - double timezoneHours, - CancellationToken token) + private IQueryable BuildQuery(WitsRequest request, CancellationToken token) where TEntity : WitsItemBase where TValue : notnull { - var query = db.Set() - .Where(i => i.IdTelemetry == idTelemetry) - .Where(i => i.IdRecord == idRecord); + var query = db.Set().Where(i => i.IdTelemetry == request.IdTelemetry); - var fullDataCount = await query.CountAsync(token); + if (request.IdRecord is not null) + query = query + .Where(d => d.IdRecord == request.IdRecord); - if (fullDataCount == 0) - return Enumerable.Empty(); + if (request.DateBeginUtc is not null) + query = query + .Where(d => d.DateTime >= request.DateBeginUtc); - var entities = await query - .OrderBy(d => d.DateTime) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); + if (request.DateEnd is not null) + query = query + .Where(d => d.DateTime <= request.DateEnd); - var items = entities.Select(e => new ItemRecord - { - IdRecord = e.IdRecord, - IdTelemetry = e.IdTelemetry, - Date = e.DateTime.ToRemoteDateTime(timezoneHours), - IdItem = e.IdItem, - Item = new JsonValue(e.Value) - }); - return items; + return query.OrderBy(d => d.DateTime); } + public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token) { var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours; @@ -182,7 +172,7 @@ namespace AsbCloudInfrastructure.Repository var dateTime = dto.Date.ToUtcDateTimeOffset(timezoneHours); if (item.Value.Value is string valueString) { - var entity = MakeEntity( dto.Id, item.Key, idTelemetry, dateTime, valueString); + var entity = MakeEntity(dto.Id, item.Key, idTelemetry, dateTime, valueString); db.WitsItemString.Add(entity); } if (item.Value.Value is float valueFloat) @@ -194,30 +184,40 @@ namespace AsbCloudInfrastructure.Repository { var entity = MakeEntity(dto.Id, item.Key, idTelemetry, dateTime, valueInt); db.WitsItemInt.Add(entity); - } - } + } + } await db.SaveChangesAsync(token); } private static TEntity MakeEntity(int idRecord, int idItem, int idTelemetry, DateTimeOffset dateTime, TValue value) where TEntity : WitsItemBase, new() - where TValue: notnull - => new TEntity() { - IdRecord = idRecord, - IdItem = idItem, - IdTelemetry = idTelemetry, - DateTime = dateTime, - Value = value, - }; + where TValue : notnull + => new TEntity() + { + IdRecord = idRecord, + IdItem = idItem, + IdTelemetry = idTelemetry, + DateTime = dateTime, + Value = value, + }; internal class ItemRecord { - public int IdRecord { get; set; } + public int IdRecord { get; set; } public int IdTelemetry { get; set; } public DateTime Date { get; set; } public int IdItem { get; set; } public JsonValue Item { get; set; } = default!; - } - } + } + private class WitsRequest + { + public int IdTelemetry { get; set; } + public DateTimeOffset? DateBeginUtc { get; set; } + public DateTimeOffset? DateEnd { get; set; } + public int? ApproxPointsCount { get; set; } + public double TimezoneHours { get; set; } + public int? IdRecord { get; set; } + } + } } diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs index e97d551a..498399d9 100644 --- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs @@ -68,9 +68,16 @@ namespace AsbCloudWebApi.Controllers.SAUB return Ok(content); } + /// + /// получение данных ГТИ по ключу record + /// + /// id скважины + /// id record + /// + /// [HttpGet("{idWell}/{idRecord}")] [Permission] - public async Task>> GetDataByRecordAsync(int idWell, int idRecord, CancellationToken token = default) + public async Task>> GetDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); @@ -83,7 +90,7 @@ namespace AsbCloudWebApi.Controllers.SAUB if (!isCompanyOwnsWell) return Forbid(); - var content = await gtrRepository.GetByRecordAsync(idWell, idRecord, token).ConfigureAwait(false); + var content = await gtrRepository.GetDataByRecordIdAsync(idWell, idRecord, token).ConfigureAwait(false); return Ok(content); } From c137358e79bad0debd4376de860133693c9f1a2a Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Thu, 18 May 2023 15:37:21 +0500 Subject: [PATCH 3/6] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/GtrWitsRepository.cs | 61 ++++++++----------- 1 file changed, 26 insertions(+), 35 deletions(-) diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index 9fc62845..b192826e 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -112,39 +112,6 @@ namespace AsbCloudInfrastructure.Repository CancellationToken token) where TEntity : WitsItemBase where TValue : notnull - { - var query = BuildQuery(request, token); - - var fullDataCount = await query.CountAsync(token); - if (fullDataCount == 0) - return Enumerable.Empty(); - - if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount) - { - var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value); - if (m > 1) - query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); - } - - var entities = await query - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); - - var items = entities.Select(e => new ItemRecord - { - IdRecord = e.IdRecord, - IdTelemetry = e.IdTelemetry, - Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours), - IdItem = e.IdItem, - Item = new JsonValue(e.Value) - }); - return items; - } - - private IQueryable BuildQuery(WitsRequest request, CancellationToken token) - where TEntity : WitsItemBase - where TValue : notnull { var query = db.Set().Where(i => i.IdTelemetry == request.IdTelemetry); @@ -160,9 +127,33 @@ namespace AsbCloudInfrastructure.Repository query = query .Where(d => d.DateTime <= request.DateEnd); - return query.OrderBy(d => d.DateTime); - } + var fullDataCount = await query.CountAsync(token); + if (fullDataCount == 0) + return Enumerable.Empty(); + if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount) + { + var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value); + if (m > 1) + query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); + } + + var entities = await query + .OrderBy(d => d.DateTime) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + + var items = entities.Select(e => new ItemRecord + { + IdRecord = e.IdRecord, + IdTelemetry = e.IdTelemetry, + Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours), + IdItem = e.IdItem, + Item = new JsonValue(e.Value) + }); + return items; + } public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token) { From 41663eabcb3f4a0450912b1f6c124ee5db0688c8 Mon Sep 17 00:00:00 2001 From: Olga Nemt Date: Fri, 19 May 2023 12:45:07 +0500 Subject: [PATCH 4/6] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B7=D1=83=D0=BB=D1=8C=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=D0=BC=20=D1=80=D0=B5=D0=B2=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AsbCloudApp/Data/GTR/WitsItemRecordDto.cs | 2 +- AsbCloudApp/Repositories/IGtrRepository.cs | 4 +- .../Repository/GtrWitsRepository.cs | 132 ++++++++++-------- .../Controllers/SAUB/GtrWitsController.cs | 6 +- 4 files changed, 82 insertions(+), 62 deletions(-) diff --git a/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs b/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs index d2bb2722..46d82e6b 100644 --- a/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs +++ b/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs @@ -25,6 +25,6 @@ namespace AsbCloudApp.Data.GTR /// /// Значение /// - public object Value { get; set; } + public JsonValue Value { get; set; } = default!; } } \ No newline at end of file diff --git a/AsbCloudApp/Repositories/IGtrRepository.cs b/AsbCloudApp/Repositories/IGtrRepository.cs index 06efac1e..7781060f 100644 --- a/AsbCloudApp/Repositories/IGtrRepository.cs +++ b/AsbCloudApp/Repositories/IGtrRepository.cs @@ -36,13 +36,13 @@ namespace AsbCloudApp.Repositories int approxPointsCount = 1024, CancellationToken token = default); /// - /// получение данных ГТИ по record id + /// получение последних данных ГТИ по record id /// /// /// /// /// - Task> GetDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default); + Task> GetLastDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default); } #nullable disable } diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index b192826e..59d2f402 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -64,13 +64,13 @@ namespace AsbCloudInfrastructure.Repository Items = g.Select(r => new { Key = r.IdItem, - Value = r.Item + Value = r.Value }).ToDictionary(x => x.Key, x => x.Value) }); return dtos; } - public async Task> GetDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) + public async Task> GetLastDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) { var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell); if (telemetry is null) @@ -85,33 +85,87 @@ namespace AsbCloudInfrastructure.Repository IdRecord = idRecord, }; - var recordAllInt = await GetItemsOrDefaultAsync(witsRequest, token); - var recordAllFloat = await GetItemsOrDefaultAsync(witsRequest, token); - var recordAllString = await GetItemsOrDefaultAsync(witsRequest, token); + var recordAllInt = await GetGroupedItemsOrDefaultAsync(witsRequest, token); + var recordAllFloat = await GetGroupedItemsOrDefaultAsync(witsRequest, token); + var recordAllString = await GetGroupedItemsOrDefaultAsync(witsRequest, token); - - var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString) - .GroupBy(g => new - { - g.IdRecord, - g.IdTelemetry, - g.IdItem - }) - .Select(g => new WitsItemRecordDto() - { - IdRecord = g.Key.IdRecord, - IdItem = g.Key.IdItem, - Date = g.MaxBy(i => i.Date)!.Date, - Value = g.MaxBy(i => i.Date)!.Item.Value, - }).ToArray(); + var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString).ToArray(); return dtos; } - private async Task> GetItemsOrDefaultAsync( + private async Task> GetGroupedItemsOrDefaultAsync(WitsRequest request, CancellationToken token) + where TEntity : WitsItemBase + where TValue : notnull + { + var query = BuildQuery(request); + var groupedQuery = query.GroupBy(g => new + { + g.IdRecord, + g.IdTelemetry, + g.IdItem + }) + .Select(g => new + { + g.Key.IdRecord, + g.Key.IdItem, + Data = g.OrderByDescending(i => i.DateTime) + .FirstOrDefault() + }); + + var groupedEntities = await groupedQuery + .ToArrayAsync(token) + .ConfigureAwait(false); + + var entities = groupedEntities + .Select(e => new WitsItemRecordDto() + { + IdRecord = e.IdRecord, + IdItem = e.IdItem, + Date = e.Data!.DateTime.ToRemoteDateTime(request.TimezoneHours), + Value = new JsonValue(e.Data!.Value) + }); + + return entities; + } + + private async Task> GetItemsOrDefaultAsync( WitsRequest request, CancellationToken token) where TEntity : WitsItemBase where TValue : notnull + { + var query = BuildQuery(request); + + var fullDataCount = await query.CountAsync(token); + if (fullDataCount == 0) + return Enumerable.Empty(); + + if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount) + { + var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value); + if (m > 1) + query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); + } + + var entities = await query + .OrderBy(d => d.DateTime) + .AsNoTracking() + .ToListAsync(token) + .ConfigureAwait(false); + + var items = entities.Select(e => new WitsItemRecordDto + { + IdRecord = e.IdRecord, + Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours), + IdItem = e.IdItem, + Value = new JsonValue(e.Value) + }); + return items; + } + + private IQueryable BuildQuery(WitsRequest request) + where TEntity : WitsItemBase + where TValue : notnull { var query = db.Set().Where(i => i.IdTelemetry == request.IdTelemetry); @@ -127,32 +181,7 @@ namespace AsbCloudInfrastructure.Repository query = query .Where(d => d.DateTime <= request.DateEnd); - var fullDataCount = await query.CountAsync(token); - if (fullDataCount == 0) - return Enumerable.Empty(); - - if (request.ApproxPointsCount is not null && fullDataCount > 1.75 * request.ApproxPointsCount) - { - var m = (int)Math.Round(1d * fullDataCount / request.ApproxPointsCount!.Value); - if (m > 1) - query = query.Where((d) => (((d.DateTime.DayOfYear * 24 + d.DateTime.Hour) * 60 + d.DateTime.Minute) * 60 + d.DateTime.Second) % m == 0); - } - - var entities = await query - .OrderBy(d => d.DateTime) - .AsNoTracking() - .ToListAsync(token) - .ConfigureAwait(false); - - var items = entities.Select(e => new ItemRecord - { - IdRecord = e.IdRecord, - IdTelemetry = e.IdTelemetry, - Date = e.DateTime.ToRemoteDateTime(request.TimezoneHours), - IdItem = e.IdItem, - Item = new JsonValue(e.Value) - }); - return items; + return query; } public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token) @@ -192,15 +221,6 @@ namespace AsbCloudInfrastructure.Repository Value = value, }; - internal class ItemRecord - { - public int IdRecord { get; set; } - public int IdTelemetry { get; set; } - public DateTime Date { get; set; } - public int IdItem { get; set; } - public JsonValue Item { get; set; } = default!; - } - private class WitsRequest { public int IdTelemetry { get; set; } diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs index 498399d9..791c73bf 100644 --- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs @@ -69,7 +69,7 @@ namespace AsbCloudWebApi.Controllers.SAUB } /// - /// получение данных ГТИ по ключу record + /// получение последних данных ГТИ по ключу record /// /// id скважины /// id record @@ -77,7 +77,7 @@ namespace AsbCloudWebApi.Controllers.SAUB /// [HttpGet("{idWell}/{idRecord}")] [Permission] - public async Task>> GetDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) + public async Task>> GetLastDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) { int? idCompany = User.GetCompanyId(); @@ -90,7 +90,7 @@ namespace AsbCloudWebApi.Controllers.SAUB if (!isCompanyOwnsWell) return Forbid(); - var content = await gtrRepository.GetDataByRecordIdAsync(idWell, idRecord, token).ConfigureAwait(false); + var content = await gtrRepository.GetLastDataByRecordIdAsync(idWell, idRecord, token).ConfigureAwait(false); return Ok(content); } From 8eaad6749677cc6230239cb0388a2928312a839f Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Fri, 19 May 2023 16:48:00 +0500 Subject: [PATCH 5/6] nit fixes --- AsbCloudApp/Repositories/IGtrRepository.cs | 3 --- AsbCloudInfrastructure/Repository/GtrWitsRepository.cs | 9 ++++----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/AsbCloudApp/Repositories/IGtrRepository.cs b/AsbCloudApp/Repositories/IGtrRepository.cs index 7781060f..a8c16354 100644 --- a/AsbCloudApp/Repositories/IGtrRepository.cs +++ b/AsbCloudApp/Repositories/IGtrRepository.cs @@ -4,10 +4,8 @@ using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; - namespace AsbCloudApp.Repositories { -#nullable enable /// /// данные ГТИ /// @@ -44,5 +42,4 @@ namespace AsbCloudApp.Repositories /// Task> GetLastDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default); } -#nullable disable } diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index 59d2f402..8e2b77b5 100644 --- a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs +++ b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs @@ -12,7 +12,6 @@ using System.Threading.Tasks; namespace AsbCloudInfrastructure.Repository { - public class GtrWitsRepository : IGtrRepository { private readonly IAsbCloudDbContext db; @@ -64,7 +63,7 @@ namespace AsbCloudInfrastructure.Repository Items = g.Select(r => new { Key = r.IdItem, - Value = r.Value + r.Value }).ToDictionary(x => x.Key, x => x.Value) }); return dtos; @@ -89,7 +88,7 @@ namespace AsbCloudInfrastructure.Repository var recordAllFloat = await GetGroupedItemsOrDefaultAsync(witsRequest, token); var recordAllString = await GetGroupedItemsOrDefaultAsync(witsRequest, token); - var dtos = (recordAllFloat.Union(recordAllInt)).Union(recordAllString).ToArray(); + var dtos = recordAllFloat.Union(recordAllInt).Union(recordAllString); return dtos; } @@ -116,7 +115,7 @@ namespace AsbCloudInfrastructure.Repository .ToArrayAsync(token) .ConfigureAwait(false); - var entities = groupedEntities + var dtos = groupedEntities .Select(e => new WitsItemRecordDto() { IdRecord = e.IdRecord, @@ -125,7 +124,7 @@ namespace AsbCloudInfrastructure.Repository Value = new JsonValue(e.Data!.Value) }); - return entities; + return dtos; } private async Task> GetItemsOrDefaultAsync( From b10dde91353874c71792cf9962f9479e888460c2 Mon Sep 17 00:00:00 2001 From: ngfrolov Date: Fri, 19 May 2023 16:51:41 +0500 Subject: [PATCH 6/6] remove #nullable --- AsbCloudApp/Data/WellCaseDto.cs | 2 +- AsbCloudApp/Data/WellGroupOpertionDto.cs | 1 - AsbCloudApp/Data/WellOperationPlanDto.cs | 2 +- AsbCloudWebApi/Controllers/CrudController.cs | 4 ++-- AsbCloudWebApi/Controllers/CrudWellRelatedController.cs | 4 ++-- AsbCloudWebApi/Controllers/DailyReportController.cs | 4 ++-- AsbCloudWebApi/Controllers/FileController.cs | 4 ++-- AsbCloudWebApi/Controllers/OperationStatController.cs | 4 ++-- AsbCloudWebApi/Controllers/PlannedTrajectoryController.cs | 4 ++-- AsbCloudWebApi/Controllers/ProcessMapController.cs | 4 ++-- AsbCloudWebApi/Controllers/RequestTrackerController.cs | 4 ++-- AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs | 4 ++-- .../Controllers/SAUB/TelemetryWirelineRunOutController.cs | 4 ++-- AsbCloudWebApi/Controllers/ScheduleController.cs | 2 +- AsbCloudWebApi/Controllers/WellCompositeController.cs | 4 ++-- AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs | 4 ++-- AsbCloudWebApi/Controllers/WellOperationController.cs | 4 ++-- AsbCloudWebApi/Converters/DateOnlyJsonConverter.cs | 4 ++-- AsbCloudWebApi/Converters/DateOnlyTypeConverter.cs | 4 ++-- AsbCloudWebApi/Converters/TimeOnlyTypeConverter.cs | 4 ++-- AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs | 4 ++-- AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs | 4 ++-- AsbCloudWebApi/Middlewares/UserConnectionsLimitMiddlware.cs | 4 ++-- 23 files changed, 41 insertions(+), 42 deletions(-) diff --git a/AsbCloudApp/Data/WellCaseDto.cs b/AsbCloudApp/Data/WellCaseDto.cs index 046cd0d5..867d4426 100644 --- a/AsbCloudApp/Data/WellCaseDto.cs +++ b/AsbCloudApp/Data/WellCaseDto.cs @@ -23,5 +23,5 @@ namespace AsbCloudApp.Data /// public IEnumerable WellFinalDocuments { get; set; } = Enumerable.Empty(); } -#nullable disable + } diff --git a/AsbCloudApp/Data/WellGroupOpertionDto.cs b/AsbCloudApp/Data/WellGroupOpertionDto.cs index 582d03ec..0839045c 100644 --- a/AsbCloudApp/Data/WellGroupOpertionDto.cs +++ b/AsbCloudApp/Data/WellGroupOpertionDto.cs @@ -58,4 +58,3 @@ public class WellGroupOpertionDto /// public IEnumerable? Items { get; set; } } -#nullable disable \ No newline at end of file diff --git a/AsbCloudApp/Data/WellOperationPlanDto.cs b/AsbCloudApp/Data/WellOperationPlanDto.cs index 7041b493..be469948 100644 --- a/AsbCloudApp/Data/WellOperationPlanDto.cs +++ b/AsbCloudApp/Data/WellOperationPlanDto.cs @@ -22,5 +22,5 @@ namespace AsbCloudApp.Data public DateTime? DateLastAssosiatedPlanOperation { get; set; } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/CrudController.cs b/AsbCloudWebApi/Controllers/CrudController.cs index 4d1442aa..42d5c405 100644 --- a/AsbCloudWebApi/Controllers/CrudController.cs +++ b/AsbCloudWebApi/Controllers/CrudController.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// CRUD контроллер для админки. /// @@ -140,5 +140,5 @@ namespace AsbCloudWebApi.Controllers return Ok(result); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/CrudWellRelatedController.cs b/AsbCloudWebApi/Controllers/CrudWellRelatedController.cs index cf1110b8..4bf0a800 100644 --- a/AsbCloudWebApi/Controllers/CrudWellRelatedController.cs +++ b/AsbCloudWebApi/Controllers/CrudWellRelatedController.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; // For more information on enabling Web API for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// CRUD контроллер dto связных со скважиной для админки. /// @@ -161,5 +161,5 @@ namespace AsbCloudWebApi.Controllers return false; } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/DailyReportController.cs b/AsbCloudWebApi/Controllers/DailyReportController.cs index a7ef385b..5abc6659 100644 --- a/AsbCloudWebApi/Controllers/DailyReportController.cs +++ b/AsbCloudWebApi/Controllers/DailyReportController.cs @@ -13,7 +13,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Суточный рапорт /// @@ -194,5 +194,5 @@ namespace AsbCloudWebApi.Controllers return false; } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/FileController.cs b/AsbCloudWebApi/Controllers/FileController.cs index 53b2fc52..0bb69891 100644 --- a/AsbCloudWebApi/Controllers/FileController.cs +++ b/AsbCloudWebApi/Controllers/FileController.cs @@ -13,7 +13,7 @@ using AsbCloudApp.Repositories; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Хранение файлов /// @@ -244,5 +244,5 @@ namespace AsbCloudWebApi.Controllers } } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/OperationStatController.cs b/AsbCloudWebApi/Controllers/OperationStatController.cs index d32ea4b7..a10dcd93 100644 --- a/AsbCloudWebApi/Controllers/OperationStatController.cs +++ b/AsbCloudWebApi/Controllers/OperationStatController.cs @@ -9,7 +9,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Статистика по операциям (заведенным вручную) на скважине /// @@ -166,5 +166,5 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/PlannedTrajectoryController.cs b/AsbCloudWebApi/Controllers/PlannedTrajectoryController.cs index 5d019e18..96361908 100644 --- a/AsbCloudWebApi/Controllers/PlannedTrajectoryController.cs +++ b/AsbCloudWebApi/Controllers/PlannedTrajectoryController.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Плановая траектория (загрузка и хранение) /// @@ -249,5 +249,5 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/ProcessMapController.cs b/AsbCloudWebApi/Controllers/ProcessMapController.cs index e2a87c71..1f6ce9a0 100644 --- a/AsbCloudWebApi/Controllers/ProcessMapController.cs +++ b/AsbCloudWebApi/Controllers/ProcessMapController.cs @@ -11,7 +11,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// РТК /// @@ -152,5 +152,5 @@ namespace AsbCloudWebApi.Controllers return await base.UpdateAsync(value, token); } } -#nullable disable + } \ No newline at end of file diff --git a/AsbCloudWebApi/Controllers/RequestTrackerController.cs b/AsbCloudWebApi/Controllers/RequestTrackerController.cs index a645b257..11facc97 100644 --- a/AsbCloudWebApi/Controllers/RequestTrackerController.cs +++ b/AsbCloudWebApi/Controllers/RequestTrackerController.cs @@ -6,7 +6,7 @@ using System.Collections.Generic; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Мониторинг запросов, ошибок, пользователей /// @@ -88,5 +88,5 @@ namespace AsbCloudWebApi.Controllers return Ok(result); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs index 791c73bf..981ff1e7 100644 --- a/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/GtrWitsController.cs @@ -12,7 +12,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers.SAUB { -#nullable enable + [Route("api/[controller]")] [ApiController] public class GtrWitsController : ControllerBase @@ -118,5 +118,5 @@ namespace AsbCloudWebApi.Controllers.SAUB return Ok(); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs b/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs index da858a94..a9ee2815 100644 --- a/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs @@ -11,7 +11,7 @@ using AsbCloudApp.Repositories; namespace AsbCloudWebApi.Controllers.SAUB { -#nullable enable + /// /// Наработка талевого каната /// @@ -112,5 +112,5 @@ namespace AsbCloudWebApi.Controllers.SAUB } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/ScheduleController.cs b/AsbCloudWebApi/Controllers/ScheduleController.cs index 8df91cce..a8c73d30 100644 --- a/AsbCloudWebApi/Controllers/ScheduleController.cs +++ b/AsbCloudWebApi/Controllers/ScheduleController.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Расписание бурильщиков /// diff --git a/AsbCloudWebApi/Controllers/WellCompositeController.cs b/AsbCloudWebApi/Controllers/WellCompositeController.cs index 0bfe40c1..8c155c93 100644 --- a/AsbCloudWebApi/Controllers/WellCompositeController.cs +++ b/AsbCloudWebApi/Controllers/WellCompositeController.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Композитная скважина /// @@ -90,5 +90,5 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs b/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs index b24898dd..53e1d61a 100644 --- a/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs +++ b/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs @@ -11,7 +11,7 @@ using AsbCloudApp.Repositories; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Дело скважины /// @@ -175,5 +175,5 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Controllers/WellOperationController.cs b/AsbCloudWebApi/Controllers/WellOperationController.cs index 5492ea24..0a6183df 100644 --- a/AsbCloudWebApi/Controllers/WellOperationController.cs +++ b/AsbCloudWebApi/Controllers/WellOperationController.cs @@ -14,7 +14,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Controllers { -#nullable enable + /// /// Буровые операции (вводимые вручную) /// @@ -393,5 +393,5 @@ namespace AsbCloudWebApi.Controllers idWell, token).ConfigureAwait(false); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Converters/DateOnlyJsonConverter.cs b/AsbCloudWebApi/Converters/DateOnlyJsonConverter.cs index 7883e7c0..81d0d0ff 100644 --- a/AsbCloudWebApi/Converters/DateOnlyJsonConverter.cs +++ b/AsbCloudWebApi/Converters/DateOnlyJsonConverter.cs @@ -4,7 +4,7 @@ using System.Text.Json.Serialization; namespace AsbCloudWebApi.Converters { -#nullable enable + public class DateOnlyJsonConverter : JsonConverter { public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) @@ -18,5 +18,5 @@ namespace AsbCloudWebApi.Converters writer.WriteStringValue(isoDate); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Converters/DateOnlyTypeConverter.cs b/AsbCloudWebApi/Converters/DateOnlyTypeConverter.cs index df826075..581a070d 100644 --- a/AsbCloudWebApi/Converters/DateOnlyTypeConverter.cs +++ b/AsbCloudWebApi/Converters/DateOnlyTypeConverter.cs @@ -6,7 +6,7 @@ using System.Text.Json.Serialization; namespace AsbCloudWebApi.Converters { -#nullable enable + public class DateOnlyTypeConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) @@ -44,5 +44,5 @@ namespace AsbCloudWebApi.Converters return base.ConvertTo(context, culture, value, destinationType); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Converters/TimeOnlyTypeConverter.cs b/AsbCloudWebApi/Converters/TimeOnlyTypeConverter.cs index ceb40b04..02a81ae0 100644 --- a/AsbCloudWebApi/Converters/TimeOnlyTypeConverter.cs +++ b/AsbCloudWebApi/Converters/TimeOnlyTypeConverter.cs @@ -4,7 +4,7 @@ using System.Globalization; namespace AsbCloudWebApi.Converters { -#nullable enable + public class TimeOnlyTypeConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorContext? context, Type sourceType) @@ -42,5 +42,5 @@ namespace AsbCloudWebApi.Converters return base.ConvertTo(context, culture, value, destinationType); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs b/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs index a6b2c07a..1c352b90 100644 --- a/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs +++ b/AsbCloudWebApi/Middlewares/PermissionsMiddlware.cs @@ -10,7 +10,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Middlewares { -#nullable enable + public class PermissionsMiddlware { private readonly RequestDelegate next; @@ -80,5 +80,5 @@ namespace AsbCloudWebApi.Middlewares await context.ForbidAsync(); } } -#nullable disable + } diff --git a/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs b/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs index 7b337f46..db4a2e33 100644 --- a/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs +++ b/AsbCloudWebApi/Middlewares/RequerstTrackerMiddleware.cs @@ -4,7 +4,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Middlewares { -#nullable enable + public class RequerstTrackerMiddleware { private readonly RequestDelegate next; @@ -49,5 +49,5 @@ namespace AsbCloudWebApi.Middlewares } } } -#nullable disable + } diff --git a/AsbCloudWebApi/Middlewares/UserConnectionsLimitMiddlware.cs b/AsbCloudWebApi/Middlewares/UserConnectionsLimitMiddlware.cs index c9f45dea..ba24a0c9 100644 --- a/AsbCloudWebApi/Middlewares/UserConnectionsLimitMiddlware.cs +++ b/AsbCloudWebApi/Middlewares/UserConnectionsLimitMiddlware.cs @@ -7,7 +7,7 @@ using System.Threading.Tasks; namespace AsbCloudWebApi.Middlewares { -#nullable enable + /// /// This is not real middleware it`s part of PermissionsMiddlware. /// DO NOT register it in setup.cs as middleware. @@ -69,5 +69,5 @@ namespace AsbCloudWebApi.Middlewares } } } -#nullable disable + }