/
Frozin
/
DIS-3
Обзор
Документация
Войти
/
Frozin
/
DIS-3
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
API_PIR/Controllers/V1/UsersController.cs
119 строк
3 KB
Dobryk
Исправление опциональных полей
30 окт 2025, 12:58
30 окт 2025, 12:58
4d5f896
Код
Авторство
О чём код?
using Microsoft.AspNetCore.Mvc; using API_PIR.Interfaces; using API_PIR.Models; namespace API_PIR.Controllers.V1; [ApiController] [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]/[action]")] public class UsersController : ControllerBase { private readonly IUserService _userService; public UsersController(IUserService userService) { _userService = userService; } [HttpGet] public async Task<ActionResult<PaginatedList<Dictionary<string, string>>>> GetUsers( [FromQuery] PaginationParameters paginationParameters, [FromQuery] string? fields = null) { var users = await _userService.GetUsersPaginatedAsync( paginationParameters.PageNumber, paginationParameters.PageSize); if (string.IsNullOrEmpty(fields)) return Ok(users); var selectedFields = fields.Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(f => f.Trim().ToLower()) .ToHashSet(); var response = new PaginatedList<Dictionary<string, string>>() { Items = users.Items.Select(user => { var res = new Dictionary<string, string>(); res.Add("id", user.Id.ToString()); if (selectedFields.Contains("username")) { res.Add("username", user.Username.ToString()); } if (selectedFields.Contains("role")) { res.Add("role", user.Role.ToString()); } return res; }), PageNumber = users.PageNumber, PageSize = users.PageSize, TotalCount = users.TotalCount }; return Ok(response); } [HttpGet("{id:guid}")] public async Task<ActionResult<Dictionary<string, string>>> GetUser(Guid id, [FromQuery] string? fields = null) { var user = await _userService.GetUserByIdAsync(id); if (user == null) { return NotFound(); } if (string.IsNullOrEmpty(fields)) return Ok(user); var selectedFields = fields.Split(',', StringSplitOptions.RemoveEmptyEntries) .Select(f => f.Trim().ToLower()) .ToHashSet(); var response = new Dictionary<string, string>(); response.Add("id", user.Id.ToString()); if (selectedFields.Contains("username")) { response.Add("username", user.Username.ToString()); } if (selectedFields.Contains("role")) { response.Add("role", user.Role.ToString()); } return Ok(response); } [HttpPost] public async Task<ActionResult<UserModel>> CreateUser([FromBody] UserModel user) { var createdUser = await _userService.CreateUserAsync(user); return CreatedAtAction(nameof(GetUser), new { id = createdUser.Id }, createdUser); } [HttpPut("{id:guid}")] public async Task<ActionResult<UserModel>> UpdateUser(Guid id, [FromBody] UserModel user) { var updatedUser = await _userService.UpdateUserAsync(id, user); if (updatedUser == null) { return NotFound(); } return Ok(updatedUser); } [HttpDelete("{id:guid}")] public async Task<ActionResult> DeleteUser(Guid id) { var result = await _userService.DeleteUserAsync(id); if (!result) { return NotFound(); } return NoContent(); } }