/
ilyamikhaylov07
/
integration_solution_course
Обзор
Документация
Войти
/
ilyamikhaylov07
/
integration_solution_course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
TaskAPI/Controllers/V1/ProjectsController.cs
101 строка
5 KB
Ilya
Добавлен новый функционал по пользователю, пагинация, опциональные поля и внутреннее api для метрик
01 окт 2025, 09:24
01 окт 2025, 09:24
2d34a6d
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaskAPI.DTOs.ProjectsDTOs; using TaskAPI.Services; namespace TaskAPI.Controllers.V1 { [ApiController] [ApiVersion("1.0")] [Route("api/[controller]/[action]")] public class ProjectsController : ControllerBase { private readonly ProjectsService _projectsService; public ProjectsController(ProjectsService projectsService) { _projectsService = projectsService; } /// <summary> /// Возвращает список всех проектов вместе с их задачами. /// </summary> /// <response code="200">Список проектов успешно получен.</response> [HttpGet] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(IEnumerable<ProjectResponseDTO>), StatusCodes.Status200OK)] public async Task<IActionResult> Projects() { var projects = await _projectsService.GetAllProjectAsync(); return Ok(projects); } /// <summary> /// Возвращает проект по идентификатору вместе с его задачами. /// </summary> /// <param name="id">Идентификатор проекта.</param> /// <response code="200">Проект найден и возвращён.</response> /// <response code="404">Проект с указанным идентификатором не найден.</response> [HttpGet("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(ProjectResponseDTO), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<IActionResult> Project(Guid id) { var project = await _projectsService.GetProjectAsync(id); return project == null ? NotFound() : Ok(project); } /// <summary> /// Создаёт новый проект. /// </summary> /// <param name="project">Данные проекта для создания.</param> /// <response code="201">Проект успешно создан.</response> /// <response code="400">Ошибка валидации данных.</response> [HttpPost] [Authorize(AuthenticationSchemes = "Access")] [Produces("application/json")] [Consumes("application/json")] [ProducesResponseType(typeof(ProjectResponseDTO), StatusCodes.Status201Created)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task<IActionResult> Create([FromBody] CreateProjectDTO project) { var result = await _projectsService.CreateProjectAsync(project); return CreatedAtAction(nameof(Project), new { id = result.Id }, result); } /// <summary> /// Обновляет проект по идентификатору. /// </summary> /// <param name="id">Идентификатор проекта.</param> /// <param name="updatedProject">Новые данные проекта.</param> /// <response code="200">Проект успешно обновлён.</response> /// <response code="404">Проект с указанным идентификатором не найден.</response> [HttpPut("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(ProjectResponseDTO), StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<IActionResult> Update(Guid id, [FromBody] CreateProjectDTO updatedProject) { var project = await _projectsService.UpdateProjectAsync(id, updatedProject); if (project == null) return NotFound(); return Ok(project); } /// <summary> /// Удаляет проект по идентификатору. /// </summary> /// <param name="id">Идентификатор проекта.</param> /// <response code="200">Проект успешно удалён.</response> /// <response code="404">Проект с указанным идентификатором не найден.</response> [HttpDelete("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] public async Task<IActionResult> Delete(Guid id) { var result = await _projectsService.DeleteProjectAsync(id); return result ? Ok("Успешно удалено") : NotFound(); } } }