using System.ComponentModel.DataAnnotations; using System.Threading; using System.Threading.Tasks; using AsbCloudApp.Repositories; using AsbCloudApp.Services; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace AsbCloudWebApi.Controllers; [ApiController] [Route("api/[controller]")] public class ManualFolderController : ControllerBase { private readonly IManualCatalogService manualCatalogService; private readonly IUserRepository userRepository; public ManualFolderController(IManualCatalogService manualCatalogService, IUserRepository userRepository) { this.manualCatalogService = manualCatalogService; this.userRepository = userRepository; } /// /// Создание папки /// /// Название /// Необязательный параметр. Id родительской папки /// Id категории. 30000 - АСУ ТП, 30001 - Технология бурения /// /// [HttpPost] [Permission] [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status403Forbidden)] public async Task AddFolderAsync(string name, int? idParent, [Required(ErrorMessage = "Обязательный параметр")] [Range(minimum: 30000, maximum: 30001, ErrorMessage = "Категория файла недопустима. Допустимые: 30000, 30001")] int idCategory, CancellationToken cancellationToken) { if (!CanUserAccess()) Forbid(); return Ok(await manualCatalogService.AddFolderAsync(name, idParent, idCategory, cancellationToken)); } /// /// Обновление папки /// /// /// Новое название папки /// /// [HttpPut] [Permission] [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status403Forbidden)] public async Task UpdateFolderAsync(int id, string name, CancellationToken cancellationToken) { if (!CanUserAccess()) Forbid(); await manualCatalogService.UpdateFolderAsync(id, name, cancellationToken); return Ok(); } /// /// Удаление папки /// /// /// /// [HttpDelete] [Permission] [ProducesResponseType(typeof(int), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status403Forbidden)] public async Task DeleteFolderAsync(int id, CancellationToken cancellationToken) { if (!CanUserAccess()) Forbid(); return Ok(await manualCatalogService.DeleteFolderAsync(id, cancellationToken)); } private bool CanUserAccess() { var idUser = User.GetUserId(); return idUser.HasValue && userRepository.HasPermission(idUser.Value, "Manual.edit"); } }