From 99b0c09a6bb984d811b63788015cfad1855b5f3c Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Mon, 14 Nov 2022 11:25:12 +0700 Subject: refactor: Endpoints - Model payloads in relevant route class - Move RequestTimeZoneInfo out of EndpointBase --- .../Internal/Account/UpdateAccountRoute.cs | 37 ++++++++++++++-------- 1 file changed, 23 insertions(+), 14 deletions(-) (limited to 'code/api/src/Endpoints/Internal/Account/UpdateAccountRoute.cs') 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.WithActionResult +public class UpdateAccountRoute : RouteBaseAsync.WithRequest.WithActionResult { private readonly MainAppDatabase _database; + private readonly IStringLocalizer _localizer; - public UpdateAccountRoute(MainAppDatabase database) { + public UpdateAccountRoute(MainAppDatabase database, IStringLocalizer localizer) { _database = database; + _localizer = localizer; + } + + public class Payload + { + public string Username { get; set; } + + public string Password { get; set; } } - /// - /// Update the logged on user's data. - /// - /// - /// - /// [HttpPost("~/_/account/update")] - public override async Task HandleAsync(UpdatePayload request, CancellationToken cancellationToken = default) { + public override async Task 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.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(); + 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.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()) { -- cgit v1.3