/
ilyamikhaylov07
/
integration_solution_course
Обзор
Документация
Войти
/
ilyamikhaylov07
/
integration_solution_course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
TaskAPI/Controllers/V1/UsersController.cs
135 строк
7 KB
Ilya
Добавлен новый функционал по пользователю, пагинация, опциональные поля и внутреннее api для метрик
01 окт 2025, 09:24
01 окт 2025, 09:24
2d34a6d
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using TaskAPI.DTOs; using TaskAPI.DTOs.UsersDTOs; using TaskAPI.Services; namespace TaskAPI.Controllers.V1 { [ApiController] [ApiVersion("1.0")] [Route("api/[controller]/[action]")] public class UsersController : ControllerBase { private readonly UsersService _usersService; public UsersController(UsersService usersService) { _usersService = usersService; } /// <summary> /// Возвращает список всех пользователей. /// </summary> /// <param name="include"> Включать tasks или нет </param> /// <response code="200">Список пользователей успешно получен.</response> [HttpGet] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(IEnumerable<UserResponseDTO>), 200)] public async Task<IActionResult> Users(string? include = null) { var users = await _usersService.GetAllUserAsync(include); return Ok(users); } /// <summary> /// Возвращает список пользователей в виде пагинации /// </summary> /// <param name="page"> Число страниц</param> /// <param name="pageSize"> Число пользователей на странице </param> /// <response code="200">Список пользователей с пагинецией успешно получен.</response> [HttpGet] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(PagedResult<UserResponseDTO>), 200)] public async Task<IActionResult> PaginatedUsers(int page, int pageSize) { var users = await _usersService.GetUsersPagedAsync(page, pageSize); return Ok(users); } /// <summary> /// Возвращает пользователя по идентификатору. /// </summary> /// <param name="id">Идентификатор пользователя.</param> /// <response code="200">Пользователь найден и возвращен.</response> /// <response code="404">Пользователь с указанным идентификатором не найден.</response> [HttpGet("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(UserResponseDTO), 200)] [ProducesResponseType(404)] public async Task<IActionResult> User(Guid id) { var user = await _usersService.GetUserAsync(id); return user == null ? NotFound() : Ok(user); } /// <summary> /// Создаёт нового пользователя. /// </summary> /// <param name="dto">Данные пользователя для создания.</param> /// <response code="201">Пользователь успешно создан.</response> /// <response code="400">Пользователь с таким email уже существует.</response> [HttpPost] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(UserResponseDTO), 201)] [ProducesResponseType(400)] public async Task<IActionResult> Create([FromBody] CreateUserDTO dto) { var user = await _usersService.CreateUserAsync(dto); return user == null ? BadRequest("Пользователь с таким email уже существует") : CreatedAtAction(nameof(User), new { id = user.Id }, user); } /// <summary> /// Обновляет данные пользователя по идентификатору. /// </summary> /// <param name="id">Идентификатор пользователя.</param> /// <param name="dto">Новые данные пользователя.</param> /// <response code="200">Пользователь успешно обновлен.</response> /// <response code="404">Пользователь с указанным идентификатором не найден.</response> [HttpPut("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(UserResponseDTO), 200)] [ProducesResponseType(404)] public async Task<IActionResult> Update(Guid id, [FromBody] CreateUserDTO dto) { var user = await _usersService.UpdateUserAsync(id, dto); return user == null ? NotFound() : Ok(user); } /// <summary> /// Обновляет только те данные пользователя по идентификатору, которые переданы в dto. /// </summary> /// <param name="id">Идентификатор пользователя.</param> /// <param name="dto">Новые данные пользователя.</param> /// <response code="200">Пользователь успешно обновлен.</response> /// <response code="404">Пользователь с указанным идентификатором не найден.</response> [HttpPatch("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(typeof(UserResponseDTO), 200)] [ProducesResponseType(404)] public async Task<IActionResult> Patch(Guid id, [FromBody] PatchUserDTO dto) { var user = await _usersService.PatchUserAsync(id, dto); return user == null ? NotFound() : Ok(user); } /// <summary> /// Удаляет пользователя по идентификатору. /// </summary> /// <param name="id">Идентификатор пользователя.</param> /// <response code="200">Пользователь успешно удален.</response> /// <response code="404">Пользователь с указанным идентификатором не найден.</response> [HttpDelete("{id}")] [Authorize(AuthenticationSchemes = "Access")] [ProducesResponseType(200)] [ProducesResponseType(404)] public async Task<IActionResult> Delete(Guid id) { var result = await _usersService.DeleteUserAsync(id); return result ? Ok("Успешно удалено") : NotFound(); } } }