/
zykovad
/
PIR_Lab1_E-Library
Обзор
Документация
Войти
/
zykovad
/
PIR_Lab1_E-Library
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Controllers/v1/UserController.cs
127 строк
5 KB
Darya
Done Lab 1
09 окт 2025, 18:04
09 окт 2025, 18:04
48965dd
Код
Авторство
О чём код?
using libraryAPI.DataStorage.v1; using libraryAPI.DTO; using libraryAPI.Entities.v1; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; namespace libraryAPI.Controllers.v1 { [ApiController] [ApiVersion("1.0")] [Route("api/v{version:apiVersion}/[controller]")] public class UsersController : ControllerBase { private readonly Data _data; public UsersController(Data data) { _data = data; } [HttpGet("GetAllUsers")] [SwaggerOperation(Summary = "Получить всех пользователей", OperationId = "GetAllUsers")] [SwaggerResponse(200, "Список пользователей успешно получен", typeof(IEnumerable<User_Response>))] public IResult GetUsers() { var users = _data.Users.Select(u => new User_Response { Id = u.Id, Username = u.Username, Login = u.Login, Role = u.Role }).ToList(); return Results.Json(users); } [HttpGet("GetUserById/{id}")] [SwaggerOperation(Summary = "Получить пользователя по id", OperationId = "GetUserById")] [SwaggerResponse(200, "Пользователь найден", typeof(User_Response))] public IResult GetUser(int id) { var u = _data.Users.FirstOrDefault(x => x.Id == id); if (u == null) return Results.NotFound(); var dto = new User_Response { Id = u.Id, Username = u.Username, Login = u.Login, Role = u.Role }; return Results.Json(dto); } [HttpPost("CreateUser")] [SwaggerOperation(Summary = "Создать пользователя", OperationId = "CreateUser")] [SwaggerResponse(200, "Пользователь успешно создан", typeof(User_Response))] public IResult CreateUser(User_Request dto, [FromHeader(Name = "Idempotency-Key")] string idempotencyKey) { if (string.IsNullOrEmpty(idempotencyKey)) return Results.BadRequest("Missing Idempotency-Key header."); if (_data.IdempotencyCache.ContainsKey(idempotencyKey)) return Results.Json(_data.IdempotencyCache[idempotencyKey]); var newUser = new User { Id = _data.Users.Max(u => u.Id) + 1, Username = dto.Username, Login = dto.Login, PasswordHash = dto.PasswordHash, Role = "user" }; _data.Users.Add(newUser); _data.IdempotencyCache[idempotencyKey] = newUser; var response = new User_Response { Id = newUser.Id, Username = newUser.Username, Login = newUser.Login, PasswordHash = newUser.PasswordHash, Role = newUser.Role }; return Results.Json(response); } [HttpPut("UpdateUserById/{id}")] [SwaggerOperation(Summary = "Обновить пользователя по id", OperationId = "UpdateUserById")] [SwaggerResponse(200, "Пользователь успешно обновлен", typeof(User_Response))] public IResult UpdateUser(int id, User_Request dto) { var user = _data.Users.FirstOrDefault(u => u.Id == id); if (user == null) return Results.NotFound(); user.Username = dto.Username; user.Login = dto.Login; user.PasswordHash = dto.PasswordHash; var response = new User_Response { Id = user.Id, Username = user.Username, Login = user.Login, PasswordHash = user.PasswordHash, Role = user.Role }; return Results.Json(response); } [HttpDelete("DeleteUserById/{id}")] [SwaggerOperation(Summary = "Удалить пользователя по id", OperationId = "DeleteUserById")] [SwaggerResponse(200, "Пользователь успешно удален")] public IResult DeleteUser(int id) { var user = _data.Users.FirstOrDefault(u => u.Id == id); if (user == null) return Results.NotFound(); _data.Users.Remove(user); return Results.Ok($"User with ID {id} deleted."); } } }