using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Newsbot.Collector.Api.Domain.Requests; using Newsbot.Collector.Api.Domain.Response; using Newsbot.Collector.Api.Domain.Results; using Newsbot.Collector.Api.Services; using Newsbot.Collector.Domain.Dto; using Newsbot.Collector.Domain.Entities; namespace Newsbot.Collector.Api.Controllers; [ApiController] [Route("/api/account")] public class AccountController : ControllerBase { private IIdentityService _identityService; public AccountController(IIdentityService identityService) { _identityService = identityService; } [HttpPost("register")] public IActionResult Register([FromBody] RegisterUserRequest user) { if (!ModelState.IsValid) { return new BadRequestObjectResult(new AuthFailedResponse { Errors = ModelState.Values .Select(x => x.Errors .Select(y => y.ErrorMessage).FirstOrDefault()) }); } if (user.Email is null) { return new BadRequestResult(); } if (user.Password is null) { return new BadRequestResult(); } var response = _identityService.Register(user.Email, user.Password); return CheckIfSuccessful(response); } [HttpPost("login")] public IActionResult Login([FromBody] UserLoginRequest request) { if (request.Email is null) { return new BadRequestResult(); } if (request.Password is null) { return new BadRequestResult(); } var response = _identityService.Login(request.Email, request.Password); return CheckIfSuccessful(response); } [HttpPost("refresh")] public ActionResult RefreshToken([FromBody] UserRefreshTokenRequest request) { var response = _identityService.RefreshToken(request.Token ?? "", request.RefreshToken ?? ""); return CheckIfSuccessful(response); } private ActionResult CheckIfSuccessful(AuthenticationResult result) { if (!result.IsSuccessful) { return new BadRequestObjectResult( new AuthFailedResponse { Errors = result.ErrorMessage }); } return new OkObjectResult(new AuthSuccessfulResponse { Token = result.Token, RefreshToken = result.RefreshToken }); } }