using BankContracts.AdapterContracts; using BankContracts.BindingModels; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System.Security.Claims; namespace BankWebApi.Controllers; [Authorize] [Route("api/[controller]")] [ApiController] [Produces("application/json")] public class StorekeepersController(IStorekeeperAdapter adapter) : ControllerBase { private readonly IStorekeeperAdapter _adapter = adapter; /// /// получение всех записей кладовщика /// /// список кладовщиков [HttpGet] public IActionResult GetAllRecords() { return _adapter.GetList().GetResponse(Request, Response); } /// /// получние записи о кладовщике по данным /// /// уникальный идентификатор или другое поле /// запись кладовщика [HttpGet("{data}")] public IActionResult GetRecord(string data) { return _adapter.GetElement(data).GetResponse(Request, Response); } /// /// создание записи кладовщика /// /// модель от пользователя /// [HttpPost("register")] [AllowAnonymous] public IActionResult Register([FromBody] StorekeeperBindingModel model) { return _adapter.RegisterStorekeeper(model).GetResponse(Request, Response); } /// /// изменение записи кладовщика /// /// новая модель /// [HttpPut] public IActionResult ChangeInfo([FromBody] StorekeeperBindingModel model) { return _adapter.ChangeStorekeeperInfo(model).GetResponse(Request, Response); } /// /// вход для кладовщика /// /// модель с логином и паролем /// [HttpPost("login")] [AllowAnonymous] public IActionResult Login([FromBody] StorekeeperAuthBindingModel model) { var res = _adapter.Login(model, out string token); if (string.IsNullOrEmpty(token)) { return NotFound("User not found"); } Response.Cookies.Append(AuthOptions.CookieName, token, new CookieOptions { HttpOnly = true, SameSite = SameSiteMode.None, Secure = true, Expires = DateTime.UtcNow.AddDays(2) }); return res.GetResponse(Request, Response); } /// /// Получение данных текущего кладовщика /// /// Данные кладовщика [HttpGet("me")] public IActionResult GetCurrentUser() { var userId = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; if (string.IsNullOrEmpty(userId)) { return Unauthorized(); } var response = _adapter.GetElement(userId); return response.GetResponse(Request, Response); } /// /// Выход кладовщика /// /// [HttpPost("logout")] public IActionResult Logout() { Response.Cookies.Delete(AuthOptions.CookieName); return Ok(); } }