using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using vendorApproverBackend.Interfaces; using vendorApproverBackend.Requests; using vendorApproverBackend.Entities; [ApiController] [Route("api/[controller]")] public class FilesController : ControllerBase { private readonly IFileStorageService _fileStorageService; public FilesController(IFileStorageService fileStorageService) { _fileStorageService = fileStorageService; } [HttpPost("upload/single")] [Authorize(Roles = "ADMIN,EMPLOYEE,VENDOR,FINANCIAL,MANAGER,PERFERMANCE_MANAGER")] public async Task UploadSingleFile([FromForm] SingleFileUploadRequest request) { if (request.File == null || request.File.Length == 0) { return BadRequest("A file is required."); } if (string.IsNullOrWhiteSpace(request.SubDirectory)) { return BadRequest("A subdirectory is required."); } try { var result = await _fileStorageService.SaveFileAsync(request.File, request.SubDirectory); return Ok(result); } catch (Exception ex) { return StatusCode(500, $"Something went wrong: {ex.Message}"); } } [HttpPost("upload_multiple")] [Authorize(Roles = "ADMIN,EMPLOYEE,VENDOR,FINANCIAL,MANAGER,PERFERMANCE_MANAGER")] public async Task UploadMultipleFiles([FromForm] MultipleFileUploadRequest request) { if (request.Files == null || request.Files.Count == 0) { return BadRequest("At least one file is required."); } if (string.IsNullOrWhiteSpace(request.SubDirectory)) { return BadRequest("A subdirectory is required."); } try { var result = await _fileStorageService.SaveAllAsync(request.Files, request.SubDirectory); return Ok(result); } catch (Exception ex) { return StatusCode(500, $"Something went wrong: {ex.Message}"); } } [HttpDelete("{id}")] [Authorize(Roles = "ADMIN,EMPLOYEE,VENDOR,FINANCIAL,MANAGER,PERFERMANCE_MANAGER")] public async Task DeleteFile(long id) { try { await _fileStorageService.DeleteFileAsync(id); return NoContent(); } catch (Exception ex) { return StatusCode(500, $"Something went wrong: {ex.Message}"); } } [HttpGet("get_file_by_id/{id}")] [Authorize(Roles = "ADMIN,EMPLOYEE,VENDOR,FINANCIAL,MANAGER,PERFERMANCE_MANAGER")] public async Task> GetFileById(long id) { var fileModel = await _fileStorageService.GetFileByIdAsync(id); if (fileModel == null) { return NotFound($"File with ID {id} not found."); } return Ok(fileModel); } [HttpPost("get_list_of_files_by_ids")] [Authorize(Roles = "ADMIN,EMPLOYEE,VENDOR,FINANCIAL,MANAGER,PERFERMANCE_MANAGER")] public async Task>> GetFilesByIds([FromBody] List ids) { if (ids == null || !ids.Any()) { return BadRequest("A list of file IDs is required."); } var fileModels = await _fileStorageService.GetFilesByIdsAsync(ids); return Ok(fileModels); } }