From 52c75deff82d4bdd3c4a6dd242ddd508abd7de2a Mon Sep 17 00:00:00 2001 From: Denis Oleynik Date: Thu, 20 Feb 2025 15:58:48 +0300 Subject: [PATCH] Delete Utils and add ExceptionHandler for exceptions --- src/main/java/com/example/nto/Utils.java | 24 ------------- .../nto/controller/AdminController.java | 20 +++++------ .../nto/controller/EmployeeController.java | 22 ++++++------ .../nto/controller/GlobalController.java | 12 +++---- .../com/example/nto/entity/ResponseData.java | 2 +- .../nto/exception/CodeNotFoundException.java | 7 ++++ .../exception/EmployeeIsAdminException.java | 7 ++++ .../exception/EmployeeNotFoundException.java | 7 ++++ .../nto/exception/ExceptionHandler.java | 34 +++++++++++++++++++ .../nto/exception/VisitsEmptyException.java | 7 ++++ .../nto/exception/YouAreBlockedException.java | 7 ++++ src/main/resources/data.sql | 2 +- 12 files changed, 96 insertions(+), 55 deletions(-) delete mode 100644 src/main/java/com/example/nto/Utils.java create mode 100644 src/main/java/com/example/nto/exception/CodeNotFoundException.java create mode 100644 src/main/java/com/example/nto/exception/EmployeeIsAdminException.java create mode 100644 src/main/java/com/example/nto/exception/EmployeeNotFoundException.java create mode 100644 src/main/java/com/example/nto/exception/ExceptionHandler.java create mode 100644 src/main/java/com/example/nto/exception/VisitsEmptyException.java create mode 100644 src/main/java/com/example/nto/exception/YouAreBlockedException.java diff --git a/src/main/java/com/example/nto/Utils.java b/src/main/java/com/example/nto/Utils.java deleted file mode 100644 index 784dbb2..0000000 --- a/src/main/java/com/example/nto/Utils.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.example.nto; - -import com.example.nto.entity.ResponseData; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; - -public class Utils { - - public ResponseEntity NotFound(String message) { - return new ResponseEntity<>(new ResponseData(HttpStatus.UNAUTHORIZED.value(), message), HttpStatus.UNAUTHORIZED); - } - - public ResponseEntity BadRequest(String message) { - return new ResponseEntity<>(new ResponseData(HttpStatus.BAD_REQUEST.value(), message), HttpStatus.BAD_REQUEST); - } - - public ResponseEntity Ok(String message) { - return new ResponseEntity<>(new ResponseData(HttpStatus.OK.value(), message), HttpStatus.OK); - } - - public ResponseEntity Forbidden(String message) { - return new ResponseEntity<>(new ResponseData(HttpStatus.FORBIDDEN.value(), message), HttpStatus.FORBIDDEN); - } -} diff --git a/src/main/java/com/example/nto/controller/AdminController.java b/src/main/java/com/example/nto/controller/AdminController.java index ef10dba..e729bb6 100644 --- a/src/main/java/com/example/nto/controller/AdminController.java +++ b/src/main/java/com/example/nto/controller/AdminController.java @@ -1,8 +1,10 @@ package com.example.nto.controller; -import com.example.nto.Utils; import com.example.nto.entity.Employee; import com.example.nto.entity.Visits; +import com.example.nto.exception.EmployeeIsAdminException; +import com.example.nto.exception.EmployeeNotFoundException; +import com.example.nto.exception.VisitsEmptyException; import com.example.nto.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -18,8 +20,6 @@ public class AdminController { @Autowired private EmployeeService employeeService; - private final Utils utils = new Utils(); - @GetMapping("/employees") public List getEmployees() { return employeeService.getAllEmployees(); @@ -29,7 +29,7 @@ public class AdminController { public ResponseEntity getEmployeeInfo(@PathVariable("username") String username) { Optional employee = employeeService.findByLogin(username); if (employee.isEmpty()) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } return new ResponseEntity<>(employee.get(), HttpStatus.OK); @@ -39,22 +39,22 @@ public class AdminController { public ResponseEntity getEmployeeLastVisit(@PathVariable("username") String username) { Optional employee = employeeService.findByLogin(username); if (employee.isEmpty()) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } - return new ResponseEntity<>(employee.get(), HttpStatus.OK); + return new ResponseEntity<>(employee.get().getLastVisit(), HttpStatus.OK); } @GetMapping("/{username}/visits") public ResponseEntity getEmployeeVisits(@PathVariable("username") String username) { if (!employeeService.existsByLogin(username)) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } Optional> visits = Optional.ofNullable(employeeService.getEmployeeVisits(username)); if (visits.isEmpty()) { - return utils.BadRequest("VisitsIsEmpty"); + throw new VisitsEmptyException(); } return new ResponseEntity<>(visits.get(), HttpStatus.OK); @@ -64,7 +64,7 @@ public class AdminController { public ResponseEntity blockEmployee(@PathVariable("username") String username) { Optional employee = employeeService.findByLogin(username); if (employee.isEmpty()) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } @@ -76,6 +76,6 @@ public class AdminController { prefix = "Unb"; } - return utils.Ok("Employee" + prefix + "lockedSuccess"); + return new ResponseEntity<>("Employee" + prefix + "lockedSuccess", HttpStatus.OK); } } diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index 69e9879..c8f0265 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -33,8 +33,6 @@ public class EmployeeController { @Autowired private CodeService codeService; - private final Utils utils = new Utils(); - @Operation(summary = "Get employee info") @ApiResponses(value = { @ApiResponse(responseCode = "200", @@ -57,13 +55,13 @@ public class EmployeeController { Optional employee = employeeService.findByLogin(username); if (employee.isEmpty()) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } return new ResponseEntity<>(employee.get(), HttpStatus.OK); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); - return utils.BadRequest(e.getLocalizedMessage()); + return new ResponseEntity<>(new ResponseData(HttpStatus.BAD_REQUEST.value(), e.getLocalizedMessage()), HttpStatus.BAD_REQUEST); } } @@ -89,18 +87,18 @@ public class EmployeeController { Optional employee = employeeService.findByLogin(username); if (employee.isEmpty()) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } Optional> visits = Optional.ofNullable(employeeService.getEmployeeVisits(username)); if (visits.isEmpty()) { - return utils.BadRequest("VisitsIsEmpty"); + throw new VisitsEmptyException(); } return new ResponseEntity<>(visits.get(), HttpStatus.OK); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); - return utils.BadRequest(e.getLocalizedMessage()); + return new ResponseEntity<>(new ResponseData(HttpStatus.BAD_REQUEST.value(), e.getLocalizedMessage()), HttpStatus.BAD_REQUEST); } } @@ -130,23 +128,23 @@ public class EmployeeController { Optional employee = employeeService.findByLogin(username); if (employee.isEmpty()) { - return utils.NotFound("EmployeeNotFound"); + throw new EmployeeNotFoundException(); } if (employee.get().getBlocked()) { - return utils.Forbidden("YouAreBlocked"); + throw new YouAreBlockedException(); } if (!codeService.exists(body.getValue())) { - return utils.BadRequest("CodeIsInvalid"); + throw new CodeNotFoundException(); } LocalDateTime time = LocalDateTime.now(); employeeService.setLastVisitEmployee(employee.get().getId(), time); employeeService.addVisit(employee.get().getLogin(), time, "" + body.getValue()); - return utils.Ok("OpenedSuccess"); + return new ResponseEntity<>(new ResponseData(HttpStatus.OK.value(), "DoorOpenedSuccess"), HttpStatus.OK); } catch (Exception e) { System.out.println("Exception: " + e.getMessage()); - return utils.BadRequest(e.getLocalizedMessage()); + return new ResponseEntity<>(new ResponseData(HttpStatus.BAD_REQUEST.value(), e.getLocalizedMessage()), HttpStatus.BAD_REQUEST); } } } diff --git a/src/main/java/com/example/nto/controller/GlobalController.java b/src/main/java/com/example/nto/controller/GlobalController.java index 5a420f1..37d04ff 100644 --- a/src/main/java/com/example/nto/controller/GlobalController.java +++ b/src/main/java/com/example/nto/controller/GlobalController.java @@ -1,33 +1,31 @@ package com.example.nto.controller; -import com.example.nto.Utils; import com.example.nto.entity.ResponseData; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.responses.ApiResponses; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @RestController public class GlobalController { - Utils utils = new Utils(); - @PostMapping("/api/login") - @Operation(summary = "Auth employee with login") + @Operation(summary = "Auth employee with login and pass") @ApiResponses(value = { @ApiResponse(responseCode = "200", - description = "Auth employee with login success", + description = "Auth employee with login and password success", content = {@Content(mediaType = "application/json", schema = @Schema(implementation = ResponseData.class))}), @ApiResponse(responseCode = "401", - description = "Login not found or invalid"), + description = "Login/Password not found or invalid"), @ApiResponse(responseCode = "400", description = "Something went wrong") }) public ResponseEntity login() { - return utils.Ok("AuthSuccess"); + return new ResponseEntity<>(new ResponseData(HttpStatus.OK.value(), "AuthSuccess"), HttpStatus.OK); } } diff --git a/src/main/java/com/example/nto/entity/ResponseData.java b/src/main/java/com/example/nto/entity/ResponseData.java index f04194e..1a6fbbe 100644 --- a/src/main/java/com/example/nto/entity/ResponseData.java +++ b/src/main/java/com/example/nto/entity/ResponseData.java @@ -10,5 +10,5 @@ import lombok.*; @AllArgsConstructor public class ResponseData { private int status; - private String message; + private String type; } \ No newline at end of file diff --git a/src/main/java/com/example/nto/exception/CodeNotFoundException.java b/src/main/java/com/example/nto/exception/CodeNotFoundException.java new file mode 100644 index 0000000..c89bff6 --- /dev/null +++ b/src/main/java/com/example/nto/exception/CodeNotFoundException.java @@ -0,0 +1,7 @@ +package com.example.nto.exception; + +public class CodeNotFoundException extends RuntimeException { + public CodeNotFoundException() { + super(); + } +} diff --git a/src/main/java/com/example/nto/exception/EmployeeIsAdminException.java b/src/main/java/com/example/nto/exception/EmployeeIsAdminException.java new file mode 100644 index 0000000..9ee54a2 --- /dev/null +++ b/src/main/java/com/example/nto/exception/EmployeeIsAdminException.java @@ -0,0 +1,7 @@ +package com.example.nto.exception; + +public class EmployeeIsAdminException extends RuntimeException { + public EmployeeIsAdminException() { + super(); + } +} diff --git a/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java b/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java new file mode 100644 index 0000000..98a5428 --- /dev/null +++ b/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java @@ -0,0 +1,7 @@ +package com.example.nto.exception; + +public class EmployeeNotFoundException extends RuntimeException { + public EmployeeNotFoundException() { + super(); + } +} diff --git a/src/main/java/com/example/nto/exception/ExceptionHandler.java b/src/main/java/com/example/nto/exception/ExceptionHandler.java new file mode 100644 index 0000000..c12344d --- /dev/null +++ b/src/main/java/com/example/nto/exception/ExceptionHandler.java @@ -0,0 +1,34 @@ +package com.example.nto.exception; + +import com.example.nto.entity.ResponseData; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; + +@ControllerAdvice +public class ExceptionHandler { + @org.springframework.web.bind.annotation.ExceptionHandler(EmployeeNotFoundException.class) + public ResponseEntity handleEmployeeNotFoundException(EmployeeNotFoundException e) { + return new ResponseEntity(new ResponseData(HttpStatus.UNAUTHORIZED.value(), "EmployeeNotFound"), HttpStatus.UNAUTHORIZED); + } + + @org.springframework.web.bind.annotation.ExceptionHandler(CodeNotFoundException.class) + public ResponseEntity handleCodeNotFoundException(CodeNotFoundException e) { + return new ResponseEntity(new ResponseData(HttpStatus.BAD_REQUEST.value(), "CodeNotFound"), HttpStatus.BAD_REQUEST); + } + + @org.springframework.web.bind.annotation.ExceptionHandler(VisitsEmptyException.class) + public ResponseEntity handleVisitsEmptyException(VisitsEmptyException e) { + return new ResponseEntity(new ResponseData(HttpStatus.BAD_REQUEST.value(), "VisitsEmpty"), HttpStatus.BAD_REQUEST); + } + + @org.springframework.web.bind.annotation.ExceptionHandler(YouAreBlockedException.class) + public ResponseEntity handleYouAreBlockedException(YouAreBlockedException e) { + return new ResponseEntity(new ResponseData(HttpStatus.FORBIDDEN.value(), "YouAreBlocked"), HttpStatus.FORBIDDEN); + } + + @org.springframework.web.bind.annotation.ExceptionHandler(EmployeeIsAdminException.class) + public ResponseEntity handleEmployeeIsAdminException(EmployeeIsAdminException e) { + return new ResponseEntity(new ResponseData(HttpStatus.BAD_REQUEST.value(), "EmloyeeIsAdmin"), HttpStatus.BAD_REQUEST); + } +} diff --git a/src/main/java/com/example/nto/exception/VisitsEmptyException.java b/src/main/java/com/example/nto/exception/VisitsEmptyException.java new file mode 100644 index 0000000..1eac223 --- /dev/null +++ b/src/main/java/com/example/nto/exception/VisitsEmptyException.java @@ -0,0 +1,7 @@ +package com.example.nto.exception; + +public class VisitsEmptyException extends RuntimeException { + public VisitsEmptyException() { + super(); + } +} diff --git a/src/main/java/com/example/nto/exception/YouAreBlockedException.java b/src/main/java/com/example/nto/exception/YouAreBlockedException.java new file mode 100644 index 0000000..a7c2d97 --- /dev/null +++ b/src/main/java/com/example/nto/exception/YouAreBlockedException.java @@ -0,0 +1,7 @@ +package com.example.nto.exception; + +public class YouAreBlockedException extends RuntimeException { + public YouAreBlockedException() { + super(); + } +} diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql index ce80a14..bc032b0 100644 --- a/src/main/resources/data.sql +++ b/src/main/resources/data.sql @@ -7,7 +7,7 @@ VALUES -- p1v@n0V | p3Tr0V1van | anaT0S3m3n4ik | al3X!fedOr0v | v0VkaS1gmA (5, 'v228a', '$2a$08$KkEI/BUVduYlzCln2YkxIOsqCPjqO.jFDL1/dPl.hfLkBXDXfSA4m', 'USER', true, 'Владимир Попов Сигмович', 'https://avatars.dzeninfra.ru/get-zen_doc/1540250/pub_616565b90f14316c72058d22_616566ec8a4f2d46b116b324/scale_1200', 'Сеньор помидор', '2024-02-12T08:36'), (6, 'evgsimga', '$2a$12$FqBz9snyFHjmd.A1Ks4zwO4Ny3De4RsdH2R56lvpIFhVnxvZPwIOu', 'ADMIN', false, 'Евгений Пикми Сигмович', 'https://i.imgur.com/eOaBA9S.jpeg', 'Разработчик', '2025-02-12T08:15'), (7, 'maksanna', '$2a$12$2mzcYp/wnEhMKO7ue9S/UuJcdkrVNZicPL.rbrB2F13S9R0rGdTOG', 'USER', true, 'Максим Аннов Евгеньевич', 'https://i.imgur.com/YdAgWst.jpeg', 'Тестировщик', '2025-02-12T08:30'), -(8, 'sonechka', '$2a$12$1FPQdHGfyMu.kNREnRFmlexQ8v7q2T19/Eu.PBW4MLMWWQtrWRWna', 'ADMIN', false, 'София Иванова Евгеньевна', 'https://i.imgur.com/YdAgWst.jpeg', 'Тестировщик', '2025-02-12T08:30'); +(8, 'sonechka', '$2a$12$1FPQdHGfyMu.kNREnRFmlexQ8v7q2T19/Eu.PBW4MLMWWQtrWRWna', 'ADMIN', false, 'София Иванова Евгеньевна', 'https://i.imgur.com/Zvc7pZZ.jpeg', 'Тестировщик', '2025-02-12T08:30'); INSERT INTO code (value)