From 7497c4a93f28557097e5cb6462f3d2c1c494bc94 Mon Sep 17 00:00:00 2001 From: A1pha Date: Fri, 6 Dec 2024 13:21:59 +0300 Subject: [PATCH] One more fix #3 --- .../nto/controller/CodeController.java | 7 ++-- .../nto/repository/CodeRepository.java | 7 +++- .../nto/repository/EmployeeRepository.java | 2 +- .../com/example/nto/service/CodeService.java | 5 ++- .../example/nto/service/EmployeeService.java | 2 +- .../service/impl/EmployeeCodeServiceImpl.java | 38 +++++++------------ 6 files changed, 27 insertions(+), 34 deletions(-) diff --git a/src/main/java/com/example/nto/controller/CodeController.java b/src/main/java/com/example/nto/controller/CodeController.java index 81463b1..3aafe05 100644 --- a/src/main/java/com/example/nto/controller/CodeController.java +++ b/src/main/java/com/example/nto/controller/CodeController.java @@ -1,11 +1,10 @@ package com.example.nto.controller; import com.example.nto.entity.Code; +import com.example.nto.entity.Employee; import com.example.nto.service.CodeService; import lombok.RequiredArgsConstructor; -import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import org.springframework.web.server.ResponseStatusException; @RestController @RequiredArgsConstructor @@ -14,7 +13,7 @@ public class CodeController { private final CodeService codeService; @PatchMapping("/api/{login}/open") - public Code update(@PathVariable String login, @RequestBody Code newCode) { - return codeService.update(login, newCode); + public Employee update(@PathVariable String login, @RequestBody Code newCode) { + return codeService.openDoor(login, newCode.getValue()); } } diff --git a/src/main/java/com/example/nto/repository/CodeRepository.java b/src/main/java/com/example/nto/repository/CodeRepository.java index f2edf53..4fa3542 100644 --- a/src/main/java/com/example/nto/repository/CodeRepository.java +++ b/src/main/java/com/example/nto/repository/CodeRepository.java @@ -2,7 +2,12 @@ package com.example.nto.repository; import com.example.nto.entity.Code; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository -public interface CodeRepository extends JpaRepository {} +public interface CodeRepository extends JpaRepository { + + @Query("select count(e) = 1 from Code e where value = ?1") + boolean findExistByValue(Long value); +} diff --git a/src/main/java/com/example/nto/repository/EmployeeRepository.java b/src/main/java/com/example/nto/repository/EmployeeRepository.java index c45c153..5ac6e96 100644 --- a/src/main/java/com/example/nto/repository/EmployeeRepository.java +++ b/src/main/java/com/example/nto/repository/EmployeeRepository.java @@ -12,5 +12,5 @@ public interface EmployeeRepository extends JpaRepository { Employee findByLogin(String login); @Query("select count(e) = 1 from Employee e where login = ?1") - boolean findExistByLogin(String login); + Boolean findExistByLogin(String login); } diff --git a/src/main/java/com/example/nto/service/CodeService.java b/src/main/java/com/example/nto/service/CodeService.java index 6f944ac..3df877a 100644 --- a/src/main/java/com/example/nto/service/CodeService.java +++ b/src/main/java/com/example/nto/service/CodeService.java @@ -1,9 +1,10 @@ package com.example.nto.service; -import com.example.nto.entity.Code; +import com.example.nto.entity.Employee; public interface CodeService { - Code update(String login, Code newCode); + Boolean findExistByValue(Long value); + Employee openDoor(String login, Long value); } diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java index 750e9c4..f9e63e2 100644 --- a/src/main/java/com/example/nto/service/EmployeeService.java +++ b/src/main/java/com/example/nto/service/EmployeeService.java @@ -6,5 +6,5 @@ public interface EmployeeService { Employee updateEmployee(long id, Employee newEmployee); Employee findByLogin(String login); - Boolean findExistByLogin(String login); + boolean findExistByLogin(String login); } diff --git a/src/main/java/com/example/nto/service/impl/EmployeeCodeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeCodeServiceImpl.java index dc2f90a..8749b21 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeCodeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeCodeServiceImpl.java @@ -1,6 +1,5 @@ package com.example.nto.service.impl; -import com.example.nto.entity.Code; import com.example.nto.entity.Employee; import com.example.nto.repository.CodeRepository; import com.example.nto.repository.EmployeeRepository; @@ -45,7 +44,7 @@ public class EmployeeCodeServiceImpl implements EmployeeService, CodeService { } @Override - public Boolean findExistByLogin(String login) { + public boolean findExistByLogin(String login) { if (employeeRepository.findExistByLogin(login)) throw new ResponseStatusException(HttpStatus.OK, "Login is existing, processing"); throw new ResponseStatusException(HttpStatus.UNAUTHORIZED, @@ -54,31 +53,20 @@ public class EmployeeCodeServiceImpl implements EmployeeService, CodeService { } @Override - public Code update(String login, Code newCode) { - - Employee employee = findByLogin(login); - long employeeId = employee.getId(); - - employee.setLastVisit(LocalDateTime.now()); - updateEmployee(employeeId, employee); - - if (newCode.getValue() == 0) - throw new ResponseStatusException(HttpStatus.BAD_REQUEST); - - Optional codeOptional = codeRepository.findById(employeeId); - Code code; - if (codeOptional.isEmpty()) { - code = newCode; - code.setId(employeeId); - } else { - code = codeOptional.get(); - if (code.getValue() != newCode.getValue()) { - throw new ResponseStatusException(HttpStatus.BAD_REQUEST); - } - code.setValue(newCode.getValue()); + public Employee openDoor(String login, Long value) { + if (findByLogin(login) != null && findExistByValue(value)) { + Employee employee = findByLogin(login); + employee.setLastVisit(LocalDateTime.now()); + return updateEmployee(employee.getId(), employee); } - return codeRepository.save(code); + throw new ResponseStatusException(HttpStatus.BAD_REQUEST); } + @Override + public Boolean findExistByValue(Long value) { + if (codeRepository.findExistByValue(value)) + return codeRepository.findExistByValue(value); + throw new ResponseStatusException(HttpStatus.BAD_REQUEST); + } }