diff --git a/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs b/AsbCloudApp/Data/GTR/WitsItemRecordDto.cs new file mode 100644 index 00000000..46d82e6b --- /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 JsonValue Value { get; set; } = default!; + } +} \ No newline at end of file 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/AsbCloudApp/Repositories/IGtrRepository.cs b/AsbCloudApp/Repositories/IGtrRepository.cs index 4082a4cc..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 /// /// данные ГТИ /// @@ -34,6 +32,14 @@ namespace AsbCloudApp.Repositories Task> GetAsync(int idWell, DateTime? dateBegin, double intervalSec = 600d, int approxPointsCount = 1024, CancellationToken token = default); + + /// + /// получение последних данных ГТИ по record id + /// + /// + /// + /// + /// + Task> GetLastDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default); } -#nullable disable } diff --git a/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs b/AsbCloudInfrastructure/Repository/GtrWitsRepository.cs index d3e395d3..8e2b77b5 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; @@ -13,7 +12,6 @@ using System.Threading.Tasks; namespace AsbCloudInfrastructure.Repository { - public class GtrWitsRepository : IGtrRepository { private readonly IAsbCloudDbContext db; @@ -23,7 +21,7 @@ namespace AsbCloudInfrastructure.Repository IAsbCloudDbContext db, ITelemetryService telemetryService) { - + this.db = db; this.telemetryService = telemetryService; } @@ -36,12 +34,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,43 +60,88 @@ 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, + r.Value }).ToDictionary(x => x.Key, x => x.Value) - }); + }); return dtos; } - private async Task> GetItemsOrDefaultAsync( - int idTelemetry, - DateTimeOffset? dateBegin, - DateTimeOffset? dateEnd, - int approxPointsCount, - double timezoneHours, - CancellationToken token) - where TEntity: WitsItemBase - where TValue: notnull + public async Task> GetLastDataByRecordIdAsync(int idWell, int idRecord, CancellationToken token = default) { - var query = db.Set() - .Where(i => i.IdTelemetry == idTelemetry); + var telemetry = telemetryService.GetOrDefaultTelemetryByIdWell(idWell); + if (telemetry is null) + return Enumerable.Empty(); - if (dateBegin is not null) - query = query - .Where(d => d.DateTime >= dateBegin); + var timezone = telemetryService.GetTimezone(telemetry.Id); - if (dateEnd is not null) - query = query - .Where(d => d.DateTime <= dateEnd); + var witsRequest = new WitsRequest() + { + IdTelemetry = telemetry.Id, + TimezoneHours = timezone.Hours, + IdRecord = idRecord, + }; + + 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); + return dtos; + } + + 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 dtos = 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 dtos; + } + + 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(); + 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); } @@ -99,18 +151,38 @@ namespace AsbCloudInfrastructure.Repository .AsNoTracking() .ToListAsync(token) .ConfigureAwait(false); - - var items = entities.Select(e => new ItemRecord + + var items = entities.Select(e => new WitsItemRecordDto { 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) + 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); + + if (request.IdRecord is not null) + query = query + .Where(d => d.IdRecord == request.IdRecord); + + if (request.DateBeginUtc is not null) + query = query + .Where(d => d.DateTime >= request.DateBeginUtc); + + if (request.DateEnd is not null) + query = query + .Where(d => d.DateTime <= request.DateEnd); + + return query; + } + public async Task SaveDataAsync(int idTelemetry, WitsRecordDto dto, CancellationToken token) { var timezoneHours = telemetryService.GetTimezone(idTelemetry).Hours; @@ -119,7 +191,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) @@ -131,30 +203,31 @@ 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, - }; - - internal class ItemRecord + where TValue : notnull + => new TEntity() { - 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!; - } - } + IdRecord = idRecord, + IdItem = idItem, + IdTelemetry = idTelemetry, + DateTime = dateTime, + Value = value, + }; + 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/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 895d4721..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 @@ -68,6 +68,33 @@ namespace AsbCloudWebApi.Controllers.SAUB return Ok(content); } + /// + /// получение последних данных ГТИ по ключу record + /// + /// id скважины + /// id record + /// + /// + [HttpGet("{idWell}/{idRecord}")] + [Permission] + public async Task>> GetLastDataByRecordIdAsync(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.GetLastDataByRecordIdAsync(idWell, idRecord, token).ConfigureAwait(false); + + return Ok(content); + } + /// /// Метод для получения WITS записи от панели оператора. /// Сохраняет в БД. @@ -91,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 + }