From 7c3f5008972c658102647d52b06ef507c2821bcd Mon Sep 17 00:00:00 2001 From: Tidiane Date: Fri, 31 Jul 2026 16:21:19 +0000 Subject: [PATCH 1/2] Adding Change Username Endpoint --- .../controller/GatewayAuthController.java | 7 +++- .../dto/request/ChangeUsernameRequest.java | 7 ++++ .../apigateway/service/auth/AuthService.java | 37 +++++++++++++++++++ 3 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java diff --git a/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java b/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java index edb8af4..f8c537e 100644 --- a/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java +++ b/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java @@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RestController; import vaultweb.apigateway.dto.request.ChangePasswordRequest; +import vaultweb.apigateway.dto.request.ChangeUsernameRequest; import vaultweb.apigateway.dto.request.LoginRequest; import vaultweb.apigateway.dto.request.UserRegistrationRequest; import vaultweb.apigateway.dto.response.AuthResponse; @@ -60,9 +61,10 @@ public Mono logout() { return authService.logout(); } + @ResponseStatus(HttpStatus.OK) @PostMapping("change-username") - public String changeUsername() { - return "changeUsername"; + public Mono changeUsername(@Valid @RequestBody ChangeUsernameRequest request){ + return authService.changeUsername(request); } @PostMapping("change-email") @@ -70,6 +72,7 @@ public String changeEmail() { return "changeEmail"; } + @ResponseStatus(HttpStatus.OK) @PostMapping("change-password") public Mono changePassword(@Valid @RequestBody ChangePasswordRequest request) { return authService.changePassword(request); diff --git a/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java b/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java new file mode 100644 index 0000000..f0b0d83 --- /dev/null +++ b/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java @@ -0,0 +1,7 @@ +package vaultweb.apigateway.dto.request; + +import jakarta.validation.constraints.NotEmpty; + +public record ChangeUsernameRequest( + @NotEmpty(message = "Your new username is required") String newUsername +) {} diff --git a/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java b/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java index ce3aef0..66cfd21 100644 --- a/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java +++ b/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java @@ -3,6 +3,7 @@ import org.springframework.stereotype.Service; import vaultweb.apigateway.dto.request.ChangePasswordRequest; +import vaultweb.apigateway.dto.request.ChangeUsernameRequest; import vaultweb.apigateway.dto.request.LoginRequest; import vaultweb.apigateway.dto.request.UserRegistrationRequest; import vaultweb.apigateway.dto.response.AuthResponse; @@ -128,6 +129,42 @@ public Mono changePassword(ChangePasswordRequest request) { }); } + public Mono changeUsername(ChangeUsernameRequest request) { + return securityContextUtil + .getAuthenticatedUsername() + .flatMap(userRepository::findByUsername) + .switchIfEmpty( + Mono.error( + new DefaultException( + "username from token has no registered user", + DefaultExceptionLevels.AUTHENTICATION_EXCEPTION))) + .flatMap( + user -> { + if (request.newUsername().equals(user.getUsername())) { + return Mono.error( + new DefaultException( + "You didn't change anything", + DefaultExceptionLevels.DEFAULT_EXCEPTION)); + } + + return userRepository + .existsByUsername(request.newUsername()) + .flatMap( + usernameExists -> { + if (usernameExists) { + return Mono.error( + new DefaultException( + "User with username " + + request.newUsername() + + " already exists")); + } + + user.setUsername(request.newUsername()); + return userRepository.save(user).then(); + }); + }); + } + public Mono switchToken(String token) { // find refresh return refreshTokenRepository From 40ae46730e4717b8be2e2258ad8a41bafceea31d Mon Sep 17 00:00:00 2001 From: Tidiane Date: Fri, 31 Jul 2026 16:43:07 +0000 Subject: [PATCH 2/2] style: apply spotless formatting --- .../vaultweb/apigateway/controller/GatewayAuthController.java | 2 +- .../vaultweb/apigateway/dto/request/ChangeUsernameRequest.java | 3 +-- .../java/vaultweb/apigateway/service/auth/AuthService.java | 3 +-- docker-compose.yml | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java b/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java index f8c537e..f624aa4 100644 --- a/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java +++ b/apigateway/src/main/java/vaultweb/apigateway/controller/GatewayAuthController.java @@ -63,7 +63,7 @@ public Mono logout() { @ResponseStatus(HttpStatus.OK) @PostMapping("change-username") - public Mono changeUsername(@Valid @RequestBody ChangeUsernameRequest request){ + public Mono changeUsername(@Valid @RequestBody ChangeUsernameRequest request) { return authService.changeUsername(request); } diff --git a/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java b/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java index f0b0d83..bf5f767 100644 --- a/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java +++ b/apigateway/src/main/java/vaultweb/apigateway/dto/request/ChangeUsernameRequest.java @@ -3,5 +3,4 @@ import jakarta.validation.constraints.NotEmpty; public record ChangeUsernameRequest( - @NotEmpty(message = "Your new username is required") String newUsername -) {} + @NotEmpty(message = "Your new username is required") String newUsername) {} diff --git a/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java b/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java index 66cfd21..daa6024 100644 --- a/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java +++ b/apigateway/src/main/java/vaultweb/apigateway/service/auth/AuthService.java @@ -143,8 +143,7 @@ public Mono changeUsername(ChangeUsernameRequest request) { if (request.newUsername().equals(user.getUsername())) { return Mono.error( new DefaultException( - "You didn't change anything", - DefaultExceptionLevels.DEFAULT_EXCEPTION)); + "You didn't change anything", DefaultExceptionLevels.DEFAULT_EXCEPTION)); } return userRepository diff --git a/docker-compose.yml b/docker-compose.yml index 4b6da8d..9306509 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ services: POSTGRES_PASSWORD: password POSTGRES_DB: auth_gateway_db ports: - - "5433:5432" + - "5432:5432" volumes: - postgres_data:/var/lib/postgresql/data