From e6d7fa7aae6412c9e58294e187f1091609a6f389 Mon Sep 17 00:00:00 2001 From: vladp Date: Thu, 27 Nov 2025 18:01:02 +0700 Subject: [PATCH] NCP-3 --- .../soune/no_copy/controller/AuthController.java | 11 +++++++++++ .../exception/TokenNotFoundException.java | 7 +++++++ .../no_copy/handler/GlobalExceptionHandler.java | 16 ++++++++++++---- 3 files changed, 30 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ru/soune/no_copy/exception/TokenNotFoundException.java diff --git a/src/main/java/ru/soune/no_copy/controller/AuthController.java b/src/main/java/ru/soune/no_copy/controller/AuthController.java index 03ee445..1c1350a 100644 --- a/src/main/java/ru/soune/no_copy/controller/AuthController.java +++ b/src/main/java/ru/soune/no_copy/controller/AuthController.java @@ -9,9 +9,12 @@ import ru.soune.no_copy.dto.LoginRequest; import ru.soune.no_copy.dto.LoginResponse; import ru.soune.no_copy.dto.RegisterRequest; import ru.soune.no_copy.entity.AuthToken; +import ru.soune.no_copy.exception.TokenNotFoundException; +import ru.soune.no_copy.repository.AuthTokenRepository; import ru.soune.no_copy.service.AuthService; import java.util.Map; +import java.util.Optional; @RestController @RequestMapping("/api/auth") @@ -20,6 +23,8 @@ public class AuthController { private final AuthService authService; + private final AuthTokenRepository authTokenRepository; + @PostMapping("/register") public ResponseEntity register(@Valid @RequestBody RegisterRequest registerRequest) { AuthToken authToken = authService.register(registerRequest); @@ -40,6 +45,12 @@ public class AuthController { public ResponseEntity logout(@RequestHeader("Authorization") String tokenHeader) { String token = tokenHeader.replace("Bearer ", ""); + Optional opToken = authTokenRepository.findByToken(token); + + if (opToken.isEmpty()) { + throw new TokenNotFoundException("Token not found"); + } + authService.logout(token); return ResponseEntity.ok(Map.of("success", true)); diff --git a/src/main/java/ru/soune/no_copy/exception/TokenNotFoundException.java b/src/main/java/ru/soune/no_copy/exception/TokenNotFoundException.java new file mode 100644 index 0000000..d2e526b --- /dev/null +++ b/src/main/java/ru/soune/no_copy/exception/TokenNotFoundException.java @@ -0,0 +1,7 @@ +package ru.soune.no_copy.exception; + +public class TokenNotFoundException extends RuntimeException { + public TokenNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/ru/soune/no_copy/handler/GlobalExceptionHandler.java b/src/main/java/ru/soune/no_copy/handler/GlobalExceptionHandler.java index 3e4efbe..c3a02b2 100644 --- a/src/main/java/ru/soune/no_copy/handler/GlobalExceptionHandler.java +++ b/src/main/java/ru/soune/no_copy/handler/GlobalExceptionHandler.java @@ -8,10 +8,7 @@ import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestControllerAdvice; -import ru.soune.no_copy.exception.ContentNotFoundException; -import ru.soune.no_copy.exception.NotValidationPasswordException; -import ru.soune.no_copy.exception.UserAlreadyExistsException; -import ru.soune.no_copy.exception.UserNotFoundException; +import ru.soune.no_copy.exception.*; import java.util.Map; @@ -75,4 +72,15 @@ public class GlobalExceptionHandler { "message" ,ex.getMessage() )); } + + @ExceptionHandler(TokenNotFoundException.class) + @ResponseStatus(HttpStatus.NOT_FOUND) + public ResponseEntity handleNotFoundTokenException(TokenNotFoundException ex) { + return ResponseEntity. + badRequest() + .body(Map.of( + "success", false, + "message" ,ex.getMessage() + )); + } }