/
softailor
/
gridient
Обзор
Документация
Войти
/
softailor
/
gridient
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
backend/Gridient.Core/Controllers/AttachmentController.cs
72 строки
3 KB
Jenkins
Auto add
18 фев 2026, 10:19
18 фев 2026, 10:19
1e6c4f8
Код
Авторство
О чём код?
using Gridient.Core.Features.Attachments.Commands; using Gridient.Core.Features.Attachments.Queries; using Gridient.Core.Options; using MediatR; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; namespace Gridient.Core.Controllers { [ApiController] [Authorize] public class AttachmentController( IMediator mediator, IOptions<AttachmentOptions> attachmentOptions ) : ListsBaseController { private readonly IMediator _mediator = mediator; private readonly AttachmentOptions _attachmentOptions = attachmentOptions.Value; [HttpPost] [Route("api/lists/{listId:int}/items/{itemId:int}/attachments")] public async Task<IActionResult> UploadFile(int listId, int itemId, [FromForm] IFormFile file, CancellationToken cancellationToken) { string message = $"Максимальный размер файла: {_attachmentOptions.MaxFileMbSize}MB"; if (file.Length == 0) { return StatusCode(StatusCodes.Status400BadRequest, message); } if (file.Length > _attachmentOptions.MaxFileSize) return StatusCode(StatusCodes.Status413PayloadTooLarge, message); using (var stream = new MemoryStream()) { file.CopyTo(stream); stream.Position = 0; var command = new UploadFileCommand(listId, itemId, stream.ToArray(), file.FileName); var result = await _mediator.Send(command, cancellationToken); return Ok(result); } } [HttpPost] [Route("api/lists/{listId:int}/items/{itemId:int}/attachments/names")] public async Task<IActionResult> GetFilesName(int listId, int itemId, [FromBody] string[] ids, CancellationToken cancellationToken) { var query = new GetAttachmentNamesQuery(listId, itemId, ids); var result = await _mediator.Send(query, cancellationToken); return Ok(result); } [HttpGet] [Route("api/lists/{listId:int}/items/{itemId:int}/attachments/{attachmentId:int}")] public async Task<IActionResult> GetDocument(int listId, int itemId, int attachmentId, CancellationToken cancellationToken) { var query = new GetDocumentQuery(listId, itemId, attachmentId); var attachment = await _mediator.Send(query, cancellationToken); if (attachment is null) return NotFound(); return File(attachment.Content, "application/octet-stream", attachment.Name); } [HttpDelete] [Route("api/lists/{listId:int}/items/{itemId:int}/attachments/{attachmentId:int}")] public async Task<IActionResult> Delete(int listId, int itemId, int attachmentId, CancellationToken cancellationToken) { var command = new DeleteAttachmentCommand(listId, itemId, attachmentId); await _mediator.Send(command, cancellationToken); return Ok(); } } }