aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs
diff options
context:
space:
mode:
authorivarlovlie <git@ivarlovlie.no>2022-11-14 05:25:12 +0100
committerivarlovlie <git@ivarlovlie.no>2022-11-14 05:25:12 +0100
commit99b0c09a6bb984d811b63788015cfad1855b5f3c (patch)
tree8b6c3c9b70384bd3f00a46945e8bcb5bd474b3a1 /code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs
parent798895a91f8533f22f94f4c4800dc9a2c9628ab6 (diff)
downloadgreatoffice-99b0c09a6bb984d811b63788015cfad1855b5f3c.tar.xz
greatoffice-99b0c09a6bb984d811b63788015cfad1855b5f3c.zip
refactor: Endpoints
- Model payloads in relevant route class - Move RequestTimeZoneInfo out of EndpointBase
Diffstat (limited to 'code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs')
-rw-r--r--code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs35
1 files changed, 22 insertions, 13 deletions
diff --git a/code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs b/code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs
index f34056d..6b6e7bc 100644
--- a/code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs
+++ b/code/api/src/Endpoints/Internal/Account/CreateAccountRoute.cs
@@ -1,35 +1,44 @@
+using Microsoft.Extensions.Localization;
+
namespace IOL.GreatOffice.Api.Endpoints.Internal.Account;
-public class CreateAccountRoute : RouteBaseAsync.WithRequest<CreateAccountPayload>.WithActionResult
+public class CreateAccountRoute : RouteBaseAsync.WithRequest<CreateAccountRoute.Payload>.WithActionResult
{
private readonly MainAppDatabase _database;
private readonly UserService _userService;
+ private readonly IStringLocalizer<SharedResources> _localizer;
- public CreateAccountRoute(UserService userService, MainAppDatabase database) {
+ public CreateAccountRoute(UserService userService, MainAppDatabase database, IStringLocalizer<SharedResources> localizer) {
_userService = userService;
_database = database;
+ _localizer = localizer;
+ }
+
+ public class Payload
+ {
+ public string Username { get; set; }
+ public string Password { get; set; }
}
- /// <summary>
- /// Create a new user account.
- /// </summary>
- /// <param name="request"></param>
- /// <param name="cancellationToken"></param>
- /// <returns></returns>
[AllowAnonymous]
[HttpPost("~/_/account/create")]
- public override async Task<ActionResult> HandleAsync(CreateAccountPayload request, CancellationToken cancellationToken = default) {
+ public override async Task<ActionResult> HandleAsync(Payload request, CancellationToken cancellationToken = default) {
+ var errors = new Dictionary<string, string>();
if (request.Username.IsValidEmailAddress() == false) {
- return BadRequest(new KnownProblemModel("Invalid form", request.Username + " does not look like a valid email"));
+ errors.Add("username", _localizer["{0} does not look like a valid email", request.Username]);
}
if (request.Password.Length < 6) {
- return BadRequest(new KnownProblemModel("Invalid form", "The password requires 6 or more characters."));
+ errors.Add("password", _localizer["The password requires 6 or more characters."]);
}
var username = request.Username.Trim();
- if (_database.Users.Any(c => c.Username == username)) {
- return BadRequest(new KnownProblemModel("Username is not available", "There is already a user registered with email: " + username));
+ if (errors.All(p => p.Key != "username") && _database.Users.Any(c => c.Username == username)) {
+ errors.Add("username", _localizer["There is already a user registered with username: {0}", username]);
+ }
+
+ if (errors.Any()) {
+ return KnownProblem(_localizer["Invalid form"], _localizer["You have invalid values"], errors);
}
var user = new User(username);