Witam,
Szukałem na forum i nie mogę nigdzie znaleźć satysfakcjonujacego mnie rozwiązania.
Mianowicie mam aplikacje (bardziej początek aplikacji). używam MediatR do obsługi CQRS.
Co powinna zwracać komenda logowania użytkownika?
Początkowo zwracałem z komendy model LoggedUserModel do kontrolera który zawierał jwt token + dodatkowe informacje potrzebne we front-end'e (front end na angular2 - osobna alikacja), ale co w przypadku kiedy logowanie się nie powiedzie? Może dodać w modelu pozycje "status" etc? Z kontrolera do klienta zwracam IActionResult.
Czy może z komendy zwrocic jeden model a następnie w zależnosci od "statusu" zwracać inne IActionResult? Zwracanie ActionResult z komendy raczej odpada?
Moj kod "so far..." :
Controller: (kawałek logowania):
[HttpPost("login")]
public async Task<ActionResult<LoggedUserModel>> Login([FromBody] LoginUserCommand c)
{
return Ok(await _mediator.Send(c));
}
Command Handler: (funkcja handle):
public async Task<LoggedUserModel> Handle(LoginUserCommand request, CancellationToken cancellationToken)
{
var user = await _context.Users.Where(u => u.Email == request.Email).SingleOrDefaultAsync(cancellationToken);
if (user == null)
=> ; // co tutaj zwrocic?
var salt = user.Salt;
var hash = _encrypter.GetHash(request.Password, salt);
if(user.Password == hash)
{
var token = _tokenHandler.GetToken(user.Email, user.Role);
var LU = new LoggedUserModel
{
// testowy loggedusermodel
Id = user.Id,
Token = token,
};
return LU;
} else {
// co zwrocic w przypadku blednego logowania?
}
}
Prosiłbym o wyrozumiałość z powodu że jestem początkujący :D
Myślałem nad kilkoma rozwiązaniami ale chciałbym usłyszeć jakieś rady od bardziej doświadczonych żeby to napisać "dobrze".
Dzięki.