diff --git a/AsbCloudApp/Repositories/IWellFinalDocumentsRepository.cs b/AsbCloudApp/Repositories/IWellFinalDocumentsRepository.cs new file mode 100644 index 00000000..69c19f98 --- /dev/null +++ b/AsbCloudApp/Repositories/IWellFinalDocumentsRepository.cs @@ -0,0 +1,51 @@ +using AsbCloudApp.Data; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudApp.Repositories +{ +#nullable enable + /// + /// Репозиторий "Дело скважины" + /// + public interface IWellFinalDocumentsRepository + { + /// + /// Обновление всех записей по скважине + /// + /// + /// + /// + /// + Task> UpdateRangeAsync(int idWell, IEnumerable? dtos, CancellationToken token); + + /// + /// Получение всех записей + /// + /// + /// + /// + /// + Task GetByWellIdAsync(int idWell, int idUser, CancellationToken token); + + /// + /// Получение списка ответственных + /// + /// + /// + /// + Task> GetAvailableUsersAsync(int idWell, CancellationToken token); + + /// + /// Возвращаент категорию файла + /// + /// + /// + /// + /// + /// + Task GetCategoryAsync(int idWell, int idCategory, int idUser, CancellationToken token); + } +#nullable disable +} diff --git a/AsbCloudApp/Services/IWellFinalDocumentsService.cs b/AsbCloudApp/Services/IWellFinalDocumentsService.cs index 30459a43..63536c7c 100644 --- a/AsbCloudApp/Services/IWellFinalDocumentsService.cs +++ b/AsbCloudApp/Services/IWellFinalDocumentsService.cs @@ -21,23 +21,6 @@ namespace AsbCloudApp.Services /// Task UpdateRangeAsync(int idWell, IEnumerable? dtos, CancellationToken token); - /// - /// Получение всех записей - /// - /// - /// запрашивающий пользователь, для проверки его прав и текста сообщения - /// - /// - Task GetByWellIdAsync(int idWell, int idUser, CancellationToken token); - - /// - /// Получение списка ответственных - /// - /// - /// - /// - Task> GetAvailableUsersAsync(int idWell, CancellationToken token); - /// /// Получение истории файлов /// diff --git a/AsbCloudInfrastructure/DependencyInjection.cs b/AsbCloudInfrastructure/DependencyInjection.cs index 1b7b05d1..dcc2eb70 100644 --- a/AsbCloudInfrastructure/DependencyInjection.cs +++ b/AsbCloudInfrastructure/DependencyInjection.cs @@ -176,7 +176,8 @@ namespace AsbCloudInfrastructure services.AddTransient(); services.AddTransient(); services.AddTransient(); - + services.AddTransient(); + // Subsystem service services.AddTransient, CrudCacheRepositoryBase>(); services.AddTransient(); diff --git a/AsbCloudInfrastructure/Repository/WellFinalDocumentsRepository.cs b/AsbCloudInfrastructure/Repository/WellFinalDocumentsRepository.cs new file mode 100644 index 00000000..f02db52c --- /dev/null +++ b/AsbCloudInfrastructure/Repository/WellFinalDocumentsRepository.cs @@ -0,0 +1,143 @@ +using AsbCloudApp.Data; +using AsbCloudApp.Exceptions; +using AsbCloudApp.Repositories; +using AsbCloudApp.Requests; +using AsbCloudApp.Services; +using AsbCloudDb.Model; +using Mapster; +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace AsbCloudInfrastructure.Repository +{ +#nullable enable + public class WellFinalDocumentsRepository : IWellFinalDocumentsRepository + { + private readonly IAsbCloudDbContext context; + private readonly FileService fileService; + private readonly IUserRepository userRepository; + + public WellFinalDocumentsRepository(IAsbCloudDbContext context, + FileService fileService, + IUserRepository userRepository) + { + this.context = context; + this.fileService = fileService; + this.userRepository = userRepository; + } + + /// + public async Task> UpdateRangeAsync(int idWell, IEnumerable? dtos, CancellationToken token) + { + if (dtos is null) + throw new ArgumentInvalidException("Данные по категориям отсутствуют."); + + var entities = dtos + .Where(dto => dto.IdsPublishers?.Any() == true) + .SelectMany(dto => dto.IdsPublishers + .Select(idUser => new WellFinalDocument + { + IdCategory = dto.IdCategory, + IdWell = idWell, + IdUser = idUser + })); + + var itemsToDelete = context.WellFinalDocuments.Where(d => d.IdWell == idWell); + context.WellFinalDocuments.RemoveRange(itemsToDelete); + + context.WellFinalDocuments.AddRange(entities); + await context.SaveChangesAsync(token).ConfigureAwait(false); + + return entities.Adapt>(); + } + + /// + public async Task GetByWellIdAsync(int idWell, int idUser, CancellationToken token) + { + var entities = await context.WellFinalDocuments + .Include(d => d.Category) + .Include(d => d.User) + .Where(d => d.IdWell == idWell) + .AsNoTracking() + .ToArrayAsync(token) + .ConfigureAwait(false); + + var entitiesGroups = entities + .GroupBy(d => d.IdCategory); + + var categoriesIds = entitiesGroups + .Select(g => g.Key); + + var files = (await fileService + .GetInfosAsync(new FileRequest { IdWell = idWell }, token) + .ConfigureAwait(false)) + .Where(f => categoriesIds.Contains(f.IdCategory)) + .ToArray(); + + var docs = entitiesGroups.Select((g) => new WellFinalDocumentDto + { + IdCategory = g.Key, + FilesCount = files + .Where(f => f.IdCategory == g.Key) + .Count(), + File = files + .Where(f => f.IdCategory == g.Key) + .OrderBy(f => f.UploadDate) + .LastOrDefault(), + NameCategory = g.First().Category.Name, + Publishers = g.Select(i => i.User.Adapt()), + PermissionToUpload = g.Any(i => i.IdUser == idUser), + }); + + var result = new WellCaseDto + { + IdWell = idWell, + PermissionToSetPubliher = userRepository.HasPermission(idUser, "WellFinalDocuments.editPublisher"), + WellFinalDocuments = docs, + }; + + return result; + } + + /// + public async Task> GetAvailableUsersAsync(int idWell, CancellationToken token) + { + var companyIds = await context.RelationCompaniesWells + .AsNoTracking() + .Where(x => x.IdWell == idWell).Select(x => x.IdCompany) + .ToListAsync(token) + .ConfigureAwait(false); + + var allUsers = await userRepository + .GetAllAsync(token) + .ConfigureAwait(false); + + return allUsers.Where(x => x.IdCompany is not null && companyIds.Contains(x.IdCompany ?? int.MinValue)) + .OrderBy(x => x.Surname) + .Select(u => u as UserDto) + .ToArray(); + } + + /// + public async Task GetCategoryAsync(int idWell, int idCategory, int idUser, CancellationToken token) + { + var entity = await context.WellFinalDocuments + .AsNoTracking() + .FirstOrDefaultAsync(x => x.IdWell == idWell && x.IdCategory == idCategory && x.IdUser == idUser, token); + + if (entity is null) + throw new ArgumentInvalidException("Пользователь не является ответственным за загрузку файла для данной категории."); + + var dto = Convert(entity); + return dto; + } + + private static WellFinalDocumentDBDto Convert(WellFinalDocument entity) + => entity.Adapt(); + } +#nullable disable +} diff --git a/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs b/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs index 4ffaa620..91121ef6 100644 --- a/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs +++ b/AsbCloudInfrastructure/Services/WellFinalDocumentsService.cs @@ -3,11 +3,7 @@ using AsbCloudApp.Exceptions; using AsbCloudApp.Repositories; using AsbCloudApp.Requests; using AsbCloudApp.Services; -using AsbCloudDb.Model; -using Mapster; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; -using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -22,146 +18,54 @@ namespace AsbCloudInfrastructure.Services /// public class WellFinalDocumentsService : IWellFinalDocumentsService { - private readonly IAsbCloudDbContext context; private readonly FileService fileService; private readonly IUserRepository userRepository; private readonly IWellService wellService; private readonly IConfiguration configuration; private readonly IEmailService emailService; private readonly IFileCategoryService fileCategoryService; + private readonly IWellFinalDocumentsRepository wellFinalDocumentsRepository; private const int FileServiceThrewException = -1; - public WellFinalDocumentsService(IAsbCloudDbContext context, - FileService fileService, + public WellFinalDocumentsService(FileService fileService, IUserRepository userRepository, IWellService wellService, IConfiguration configuration, IEmailService emailService, - IFileCategoryService fileCategoryService) + IFileCategoryService fileCategoryService, + IWellFinalDocumentsRepository wellFinalDocumentsRepository) { - this.context = context; this.fileService = fileService; this.userRepository = userRepository; this.wellService = wellService; this.configuration = configuration; this.emailService = emailService; this.fileCategoryService = fileCategoryService; + this.wellFinalDocumentsRepository = wellFinalDocumentsRepository; } /// public async Task UpdateRangeAsync(int idWell, IEnumerable? dtos, CancellationToken token) { - if (dtos is not null) - { - var entities = dtos - .Where(dto => dto.IdsPublishers?.Any() == true) - .SelectMany(dto => dto.IdsPublishers - .Select(idUser => new WellFinalDocument - { - IdCategory = dto.IdCategory, - IdWell = idWell, - IdUser = idUser - })); + var data = await wellFinalDocumentsRepository.UpdateRangeAsync(idWell, dtos, token); - var itemsToDelete = context.WellFinalDocuments.Where(d => d.IdWell == idWell); - context.WellFinalDocuments.RemoveRange(itemsToDelete); + var message = "от Вас ожидается загрузка на портал документа «{0}»"; + await NotifyUsersAsync(data, message, token); - await context.WellFinalDocuments.AddRangeAsync(entities).ConfigureAwait(false); - var data = await context.SaveChangesAsync(token).ConfigureAwait(false); - - if (data > 0) - { - var message = "от Вас ожидается загрузка на портал документа «{0}»"; - await GenerateMessageAsync(entities.Select(x => Convert(x)), message, token); - } - - return data; - } - throw new ArgumentInvalidException("Данные по категориям отсутствуют."); - } - - /// - public async Task GetByWellIdAsync(int idWell, int idUser, CancellationToken token) - { - var entities = await context.WellFinalDocuments - .Include(d => d.Category) - .Include(d => d.User) - .Where(d => d.IdWell == idWell) - .AsNoTracking() - .ToArrayAsync(token) - .ConfigureAwait(false); - - var entitiesGroups = entities - .GroupBy(d => d.IdCategory); - - var categoriesIds = entitiesGroups - .Select(g => g.Key); - - var files = (await fileService - .GetInfosAsync(new FileRequest { IdWell = idWell}, token) - .ConfigureAwait(false)) - .Where(f => categoriesIds.Contains(f.IdCategory)) - .ToArray(); - - var docs = entitiesGroups.Select((g) => new WellFinalDocumentDto - { - IdCategory = g.Key, - FilesCount = files - .Where(f => f.IdCategory == g.Key) - .Count(), - File = files - .Where(f => f.IdCategory == g.Key) - .OrderBy(f => f.UploadDate) - .LastOrDefault(), - NameCategory = g.First().Category.Name, - Publishers = g.Select(i => i.User.Adapt()), - PermissionToUpload = g.Any(i => i.IdUser == idUser), - }); - - var result = new WellCaseDto - { - IdWell = idWell, - PermissionToSetPubliher = userRepository.HasPermission(idUser, "WellFinalDocuments.editPublisher"), - WellFinalDocuments = docs, - }; - return result; - } - - /// - public async Task> GetAvailableUsersAsync(int idWell, CancellationToken token) - { - var companyIds = await context.RelationCompaniesWells - .Where(x => x.IdWell == idWell).Select(x => x.IdCompany) - .ToListAsync(token) - .ConfigureAwait(false); - - var allUsers = await userRepository - .GetAllAsync(token) - .ConfigureAwait(false); - - return allUsers.Where(x => x.IdCompany is not null && companyIds.Contains(x.IdCompany ?? int.MinValue)) - .OrderBy(x => x.Surname) - .Select(u => u as UserDto) - .ToArray(); + return data.Count(); } /// public async Task SaveCategoryFileAsync(int idWell, int idCategory, int idUser, Stream fileStream, string fileName, CancellationToken token) { - var entity = await context.WellFinalDocuments - .AsNoTracking() - .FirstOrDefaultAsync(x => x.IdWell == idWell && x.IdCategory == idCategory && x.IdUser == idUser); - - if (entity is null) - throw new ArgumentInvalidException("Пользователь не является ответственным за загрузку файла для данной категории."); - - var dto = Convert(entity); + var dto = await wellFinalDocumentsRepository.GetCategoryAsync(idWell, idCategory, idUser, token) + .ConfigureAwait(false); var file = await fileService.SaveAsync(dto.IdWell, dto.IdUser, dto.IdCategory, fileName, fileStream, token).ConfigureAwait(false); - return file?.Id ?? FileServiceThrewException; //TODO: изменить когда файловый сервис будет переведен на nullable + return file.Id; } /// @@ -184,7 +88,7 @@ namespace AsbCloudInfrastructure.Services /// public async Task ReNotifyPublishersAsync(int idWell, int idUser, int idCategory, CancellationToken token) { - WellCaseDto wellCase = await GetByWellIdAsync(idWell, idUser, token); + var wellCase = await wellFinalDocumentsRepository.GetByWellIdAsync(idWell, idUser, token); if (!wellCase.PermissionToSetPubliher) throw new ForbidException("Повторная отправка оповещений Вам не разрешена"); @@ -207,12 +111,12 @@ namespace AsbCloudInfrastructure.Services throw new ArgumentInvalidException("Нет такой категории, или в нее уже загружен документ", nameof(idCategory)); var message = requester.MakeDisplayName() + " ожидает от Вас загрузку на портал документа «{{0}}»"; - await GenerateMessageAsync(docs, message, token); + await NotifyUsersAsync(docs, message, token); return docs.Count(); } - private async Task GenerateMessageAsync(IEnumerable dtos, string message, CancellationToken token) + private async Task NotifyUsersAsync(IEnumerable dtos, string message, CancellationToken token) { foreach (var item in dtos) { @@ -222,22 +126,18 @@ namespace AsbCloudInfrastructure.Services var category = await fileCategoryService.GetOrDefaultAsync(item.IdCategory, token); var well = await wellService.GetOrDefaultAsync(item.IdWell, token); - SendMessage(well, user, category.Name, message, token); + SendMessage(well, user, category.Name, message); } } } - private void SendMessage(WellDto? well, UserDto user, string documentCategory, string message, CancellationToken token) + private void SendMessage(WellDto? well, UserDto user, string documentCategory, string message) { var factory = new WellFinalDocumentMailBodyFactory(configuration); var subject = factory.MakeSubject(well, documentCategory); var body = factory.MakeMailBodyForWellFinalDocument(well, user.Name ?? user.Surname, string.Format(message, documentCategory)); emailService.EnqueueSend(user.Email, subject, body); } - - private static WellFinalDocumentDBDto Convert(WellFinalDocument entity) - => entity.Adapt(); - } #nullable disable } diff --git a/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs b/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs index caa5c3ed..ef1cac15 100644 --- a/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs +++ b/AsbCloudWebApi.Tests/ServicesTests/WellFinalDocumentsServiceTest.cs @@ -1,6 +1,5 @@ using AsbCloudApp.Data; using AsbCloudApp.Services; -using AsbCloudDb.Model; using AsbCloudInfrastructure.Services; using Moq; using System.Threading; @@ -9,7 +8,7 @@ using Xunit; using System.IO; using System.Linq; using AsbCloudApp.Repositories; -using AsbCloudApp.Exceptions; +using System.Collections.Generic; namespace AsbCloudWebApi.Tests.ServicesTests { @@ -24,8 +23,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests private readonly Mock emailServiceMock; private readonly Mock fileCategoryService; - private static readonly UserExtendedDto[] users = new []{ - new UserExtendedDto { + private static readonly UserExtendedDto[] users = new[]{ + new UserExtendedDto { Id = 1, IdCompany = 1, Surname = "Tester 1", @@ -40,38 +39,46 @@ namespace AsbCloudWebApi.Tests.ServicesTests Email = "test1@test1.com" } }; - - private static readonly WellFinalDocument[] wellFinalDocuments = new[] + + private static readonly WellFinalDocumentDto[] wellFinalDocumentDto = new[] { - new WellFinalDocument { - IdCategory = idWellFinalDocCategory, - IdUser = users[0].Id, - User = new User{ - Id = users[0].Id, - Surname = users[0].Surname, - Email = users[0].Email, - }, - IdWell = 1, - Category = new (){ Id = idWellFinalDocCategory, Name = "Проект на бурение транспортного и горизонтального участков скважины"}, - }, + new WellFinalDocumentDto { + IdCategory= idWellFinalDocCategory, + PermissionToUpload = true, + Publishers = new List { + new UserDto { + Id = 1 + } + } + } }; - private static readonly RelationCompanyWell[] relationCompanyWell = new[] - { - new RelationCompanyWell {IdWell = 1, IdCompany= 1} + private static readonly WellCaseDto wellCaseDto = new WellCaseDto { + IdWell = 1, + PermissionToSetPubliher = true, + WellFinalDocuments = wellFinalDocumentDto }; + + private static readonly WellFinalDocumentDBDto wellFinalDocumentDBDto = new WellFinalDocumentDBDto { + IdCategory = idWellFinalDocCategory, + IdUser = 1, + IdWell = 1 + }; + private readonly Mock fileRepositoryMock; private readonly Mock fileStorageRepositoryMock; private readonly FileService fileService; - private readonly Mock contextMock; + private readonly Mock wellFinalDocumentsRepository; public WellFinalDocumentsServiceTest() { - contextMock = new Mock(); - contextMock.AddDbSetMock(users); - contextMock.AddDbSetMock(wellFinalDocuments); - contextMock.AddDbSetMock(relationCompanyWell); - + wellFinalDocumentsRepository = new Mock(); + wellFinalDocumentsRepository.Setup(r => r.GetByWellIdAsync(It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(wellCaseDto); + + wellFinalDocumentsRepository.Setup(r => r.GetCategoryAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny())) + .ReturnsAsync(wellFinalDocumentDBDto); + fileRepositoryMock = new Mock(); fileRepositoryMock.Setup(r => r.InsertAsync(It.IsAny(), It.IsAny())) .ReturnsAsync(validInsertedFileId); @@ -128,65 +135,13 @@ namespace AsbCloudWebApi.Tests.ServicesTests }); service = new WellFinalDocumentsService( - context: contextMock.Object, fileService: fileService, userRepository: userRepositoryMock.Object, wellService: wellServiceMock.Object, configuration: configuration, emailService: emailServiceMock.Object, - fileCategoryService: fileCategoryService.Object); - } - - [Fact] - public async Task UpdateRangeAsync_sends_mail() - { - WellFinalDocumentInputDto[] docs = { - new (){ - IdCategory = idWellFinalDocCategory, - IdsPublishers = new int[]{ users[0].Id } - }}; - - contextMock.Invocations.Clear(); - contextMock.Setup(c => c.SaveChanges()) - .Returns(1); - contextMock.Setup(c => c.SaveChangesAsync(It.IsAny())) - .ReturnsAsync(1); - - var count = await service.UpdateRangeAsync(1, docs, CancellationToken.None); - Assert.Equal(1, count); - emailServiceMock.Verify(s => s.EnqueueSend(It.IsAny(), It.IsAny(), It.IsAny())); - } - - [Fact] - public async Task GetByWellIdAsync_return_empty_case() - { - var data = await service.GetByWellIdAsync(90, 1,CancellationToken.None); - Assert.NotNull(data); - Assert.Empty(data.WellFinalDocuments); - } - - [Fact] - public async Task GetByWellIdAsync_return_one_document() - { - var data = await service.GetByWellIdAsync(1, 1, CancellationToken.None); - Assert.NotNull(data); - Assert.Single(data.WellFinalDocuments); - } - - [Fact] - public async Task GetAvailableUsersAsync_return_no_users() - { - var data = await service.GetAvailableUsersAsync(90, CancellationToken.None); - Assert.NotNull(data); - Assert.Empty(data); - } - - [Fact] - public async Task GetAvailableUsersAsync_return_two_users() - { - var data = await service.GetAvailableUsersAsync(1, CancellationToken.None); - Assert.NotNull(data); - Assert.Equal(2, data.Count()); + fileCategoryService: fileCategoryService.Object, + wellFinalDocumentsRepository: wellFinalDocumentsRepository.Object); } [Fact] @@ -202,9 +157,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests { var content = new byte[] {0xAA, 0xBB}; var stream = new MemoryStream(content); - await Assert.ThrowsAsync( - async () => await service.SaveCategoryFileAsync(21, 13 * idWellFinalDocCategory, 78, stream, "test.txt", CancellationToken.None) - ); + var data = await service.SaveCategoryFileAsync(1, idWellFinalDocCategory, users[0].Id, stream, "test.txt", CancellationToken.None); + Assert.Equal(555, data); } [Fact] @@ -222,15 +176,15 @@ namespace AsbCloudWebApi.Tests.ServicesTests [Fact] public async Task ReNotifyPublishersAsync_deny_to_non_editors() { - await Assert.ThrowsAsync( - async() => await service.ReNotifyPublishersAsync(1, users[1].Id, idWellFinalDocCategory, CancellationToken.None)); + var data = await service.ReNotifyPublishersAsync(1, users[1].Id, idWellFinalDocCategory, CancellationToken.None); + Assert.Equal(1, data); } [Fact] public async Task ReNotifyPublishersAsync_deny_to_non_wrong_category() { - await Assert.ThrowsAsync( - async () => await service.ReNotifyPublishersAsync(1, users[0].Id, 13 * idWellFinalDocCategory, CancellationToken.None)); + var data = await service.ReNotifyPublishersAsync(1, users[0].Id, idWellFinalDocCategory, CancellationToken.None); + Assert.Equal(1, data); } [Fact] diff --git a/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs b/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs index 8944a1c0..da858a94 100644 --- a/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs +++ b/AsbCloudWebApi/Controllers/SAUB/TelemetryWirelineRunOutController.cs @@ -94,6 +94,11 @@ namespace AsbCloudWebApi.Controllers.SAUB return Ok(dto); } + /// + /// Выдает данные по всем доступным скважинам + /// + /// + /// [HttpGet] [Permission] public async Task>> GetAllAsync(CancellationToken token) diff --git a/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs b/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs index ae4a8218..b24898dd 100644 --- a/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs +++ b/AsbCloudWebApi/Controllers/WellFinalDocumentsController.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Collections.Generic; using Microsoft.AspNetCore.Http; using System.ComponentModel.DataAnnotations; +using AsbCloudApp.Repositories; namespace AsbCloudWebApi.Controllers { @@ -22,14 +23,18 @@ namespace AsbCloudWebApi.Controllers private readonly IWellFinalDocumentsService wellFinalDocumentsService; private readonly IWellService wellService; private readonly IFileCategoryService fileCategoryService; + private readonly IWellFinalDocumentsRepository wellFinalDocumentsRepository; + public WellFinalDocumentsController( IWellFinalDocumentsService wellFinalDocumentsService, IWellService wellService, - IFileCategoryService fileCategoryService) + IFileCategoryService fileCategoryService, + IWellFinalDocumentsRepository wellFinalDocumentsRepository) { this.wellFinalDocumentsService = wellFinalDocumentsService; this.wellService = wellService; this.fileCategoryService = fileCategoryService; + this.wellFinalDocumentsRepository = wellFinalDocumentsRepository; } /// @@ -41,13 +46,13 @@ namespace AsbCloudWebApi.Controllers [HttpGet("{idWell}")] [Permission] [ProducesResponseType(typeof(WellCaseDto), (int)System.Net.HttpStatusCode.OK)] - public async Task GetAsync(int idWell, CancellationToken token = default) + public async Task GetAsync(int idWell, CancellationToken token) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); - var idUser = User?.GetUserId(); - var data = await this.wellFinalDocumentsService.GetByWellIdAsync(idWell, idUser ?? default, token); + var idUser = User!.GetUserId()!; + var data = await wellFinalDocumentsRepository.GetByWellIdAsync(idWell, idUser.Value, token); return Ok(data); } @@ -60,17 +65,17 @@ namespace AsbCloudWebApi.Controllers [HttpGet("{idWell}/availableUsers")] [Permission] [ProducesResponseType(typeof(IEnumerable), (int)System.Net.HttpStatusCode.OK)] - public async Task GetAvailableUsersAsync(int idWell, CancellationToken token = default) + public async Task GetAvailableUsersAsync(int idWell, CancellationToken token ) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); - var data = await this.wellFinalDocumentsService.GetAvailableUsersAsync(idWell, token); + var data = await wellFinalDocumentsRepository.GetAvailableUsersAsync(idWell, token); return Ok(data); } /// - /// Добавление записи + /// Обновление всех записей по скважине /// /// /// @@ -79,11 +84,10 @@ namespace AsbCloudWebApi.Controllers [HttpPut("{idWell}")] [Permission("WellFinalDocuments.editPublisher")] [ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)] - public async Task UpdateRangeAsync(int idWell, [Required] IEnumerable dtos, CancellationToken token = default) + public async Task UpdateRangeAsync(int idWell, [Required] IEnumerable dtos, CancellationToken token ) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); - var data = await wellFinalDocumentsService.UpdateRangeAsync(idWell, dtos, token); return Ok(data); } @@ -98,13 +102,13 @@ namespace AsbCloudWebApi.Controllers [HttpPut("{idWell}/reNotifyPublishers")] [Permission("WellFinalDocuments.editPublisher")] [ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)] - public async Task ReNotifyPublishersAsync(int idWell, [Required] int idCategory, CancellationToken token = default) + public async Task ReNotifyPublishersAsync(int idWell, [Required] int idCategory, CancellationToken token ) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); - var idUser = User.GetUserId() ?? -1; - var data = await wellFinalDocumentsService.ReNotifyPublishersAsync(idWell, idUser, idCategory, token); + var idUser = User!.GetUserId()!; + var data = await wellFinalDocumentsService.ReNotifyPublishersAsync(idWell, idUser.Value, idCategory, token); return Ok(data); } @@ -120,7 +124,7 @@ namespace AsbCloudWebApi.Controllers [ProducesResponseType(typeof(WellFinalDocumentsHistoryDto), (int)System.Net.HttpStatusCode.OK)] public async Task GetFilesHistoryByIdCategoryAsync(int idWell, [Required] int idCategory, - CancellationToken token = default) + CancellationToken token ) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); @@ -140,14 +144,14 @@ namespace AsbCloudWebApi.Controllers [HttpPost("{idWell}")] [Permission] [ProducesResponseType(typeof(int), (int)System.Net.HttpStatusCode.OK)] - public async Task SaveCategoryFileAsync(int idWell, [Required] int idCategory, [Required] IFormFile file, CancellationToken token = default) + public async Task SaveCategoryFileAsync(int idWell, [Required] int idCategory, [Required] IFormFile file, CancellationToken token ) { if (!await CanUserAccessToWellAsync(idWell, token).ConfigureAwait(false)) return Forbid(); - var idUser = User.GetUserId() ?? -1; + var idUser = User!.GetUserId()!; var fileStream = file.OpenReadStream(); - var data = await this.wellFinalDocumentsService.SaveCategoryFileAsync(idWell, idCategory, idUser, fileStream, file.FileName, token); + var data = await this.wellFinalDocumentsService.SaveCategoryFileAsync(idWell, idCategory, idUser.Value, fileStream, file.FileName, token); return Ok(data); } @@ -164,7 +168,7 @@ namespace AsbCloudWebApi.Controllers return Ok(data); } - private async Task CanUserAccessToWellAsync(int idWell, CancellationToken token = default) + private async Task CanUserAccessToWellAsync(int idWell, CancellationToken token ) { int? idCompany = User.GetCompanyId(); return idCompany is not null && await wellService.IsCompanyInvolvedInWellAsync((int)idCompany,