using BankContracts.AdapterContracts; using BankContracts.BindingModels; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; 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); 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); } }