diff options
Diffstat (limited to 'code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs')
| -rw-r--r-- | code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs b/code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs index 02dc3f1..c8999e0 100644 --- a/code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs +++ b/code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs @@ -1,21 +1,26 @@ +using Microsoft.Extensions.Localization; + namespace IOL.GreatOffice.Api.Endpoints.Internal.Account; -public class UpdateAccountRoute : RouteBaseAsync.WithRequest<UpdatePayload>.WithActionResult +public class UpdateAccountRoute : RouteBaseAsync.WithRequest<UpdateAccountRoute.Payload>.WithActionResult { private readonly MainAppDatabase _database; + private readonly IStringLocalizer<SharedResources> _localizer; - public UpdateAccountRoute(MainAppDatabase database) { + public UpdateAccountRoute(MainAppDatabase database, IStringLocalizer<SharedResources> localizer) { _database = database; + _localizer = localizer; + } + + public class Payload + { + public string Username { get; set; } + + public string Password { get; set; } } - /// <summary> - /// Update the logged on user's data. - /// </summary> - /// <param name="request"></param> - /// <param name="cancellationToken"></param> - /// <returns></returns> [HttpPost("~/_/account/update")] - public override async Task<ActionResult> HandleAsync(UpdatePayload request, CancellationToken cancellationToken = default) { + public override async Task<ActionResult> HandleAsync(Payload request, CancellationToken cancellationToken = default) { var user = _database.Users.SingleOrDefault(c => c.Id == LoggedInUser.Id); if (user == default) { await HttpContext.SignOutAsync(); @@ -23,12 +28,13 @@ public class UpdateAccountRoute : RouteBaseAsync.WithRequest<UpdatePayload>.With } if (request.Password.IsNullOrWhiteSpace() && request.Username.IsNullOrWhiteSpace()) { - return BadRequest(new KnownProblemModel("Invalid request", "No data was submitted")); + return KnownProblem(_localizer["Invalid request"], _localizer["No data was submitted"]); } + var validationProblems = new Dictionary<string, string>(); + if (request.Password.HasValue() && request.Password.Length < 6) { - return BadRequest(new KnownProblemModel("Invalid request", - "The new password must contain at least 6 characters")); + validationProblems.Add("password", _localizer["The new password must contain at least 6 characters"]); } if (request.Password.HasValue()) { @@ -36,8 +42,11 @@ public class UpdateAccountRoute : RouteBaseAsync.WithRequest<UpdatePayload>.With } if (request.Username.HasValue() && !request.Username.IsValidEmailAddress()) { - return BadRequest(new KnownProblemModel("Invalid request", - "The new username does not look like a valid email address")); + validationProblems.Add("username", _localizer["The new username does not look like a valid email address"]); + } + + if (validationProblems.Any()) { + return KnownProblem(_localizer["Validation problems"], _localizer["Your form has invalid values"], validationProblems); } if (request.Username.HasValue()) { |
