using FileService.Application.UploadFileTask; using FileService.Infrastructure; using IM.ASPNETCore; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace FileService.WebApi.Controllers.FileTask { [Authorize] [Route("api/[controller]")] [ApiController] public class FileTaskController : ControllerBase { private readonly UploadFileTaskService service; public FileTaskController(UploadFileTaskService service) { this.service = service; } [HttpPost("init")] [UnitOfWork(typeof(FileDbContext))] public async Task Init(FileTaskInitRequest request) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var res = await service.InitTaskAsync(new UploadTaskInitCommand( UploaderId: Guid.Parse(userId), ConversationId: request.ConversationId, FileName: request.FileName, FileSize: request.FileSize, contentType: request.ContentType, checkSum: request.CheckSum )); return Ok(res); } [HttpGet("progress")] public async Task Progress(string sessionId) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var res = await service.GetProgressAsync(sessionId, Guid.Parse(userId)); return Ok(res); } [HttpGet("Getuploadurl")] public async Task GetUploadUrl(string sessionId, int partNum) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var res = await service.GenerateUrlAsync(sessionId, partNum, Guid.Parse(userId)); return Ok(res); } [HttpPost("complete")] public async Task Complete([FromBody] CompleteTaskRequest request) { var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var res = await service.CompleteTaskAsync(new UploadTaskCompleteCommand(request.SessionId, Guid.Parse(userId), request.Parts)); return Ok(res); } [HttpPost("local/parts/upload")] public async Task LocalUpload(string sessionId, int partNumber, IFormFile file) { //var userId = User.FindFirstValue(ClaimTypes.NameIdentifier); var stream = file.OpenReadStream(); var res = await service.UploadPartAsync(new UploadPartCommand(stream, sessionId, partNumber, file.Length)); return Ok(res); } } }