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();
}
}