From 8cdac4cb120eca9080b3e1abca4208374fa46bce Mon Sep 17 00:00:00 2001 From: Niktia Date: Wed, 19 Feb 2025 16:12:25 +0300 Subject: [PATCH] Block, unblock and enterEmployee Usecases --- .../nto/controller/EmployeeController.java | 45 +++++-------- .../nto/repository/CodeRepository.java | 5 +- .../nto/repository/EnterRepository.java | 1 - .../example/nto/service/EmployeeService.java | 6 +- .../com/example/nto/service/EnterService.java | 2 - .../nto/service/impl/EmployeeServiceImpl.java | 67 ++++++++++++++++--- .../nto/service/impl/EnterServiceImpl.java | 1 - 7 files changed, 80 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index 57f7f30..777bffd 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -2,33 +2,23 @@ package com.example.nto.controller; import com.example.nto.dto.EmployeeDto; import com.example.nto.dto.EnterDto; -import com.example.nto.dto.RegisterDto; -import com.example.nto.entity.Code; -import com.example.nto.entity.Employee; -import com.example.nto.entity.Enter; import com.example.nto.exception.NoRequestBodyException; -import com.example.nto.repository.CodeRepository; -import com.example.nto.repository.EmployeeRepository; import com.example.nto.service.EmployeeService; import com.example.nto.service.EnterService; -import com.fasterxml.jackson.annotation.JsonProperty; -import lombok.Getter; import lombok.RequiredArgsConstructor; +import com.example.nto.dto.CodeDto; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; import java.util.List; -import java.util.Optional; - @RestController @RequiredArgsConstructor @RequestMapping("/api") public class EmployeeController { private final EmployeeService employeeService; - private final CodeRepository codeRepository; private final EnterService enterService; @GetMapping("/login/{login}") @@ -56,29 +46,24 @@ public class EmployeeController { } @PatchMapping("/{login}/open") - public ResponseEntity openEmployee(@PathVariable String login, @RequestBody Code code) { - try { - EmployeeDto employeeDto = employeeService.getByLogin(login); - - if (employeeDto != null) { - boolean codeExists = codeRepository.checkCode(code.getValue()); - - if (codeExists) { - return ResponseEntity.ok("дверь открылась"); - } else { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("что-то пошло не так"); - } - } else { - return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("логина не существует или неверный"); - } - } catch (Exception e) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("что-то пошло не так"); - } + public ResponseEntity openEmployee(@PathVariable String login, @RequestBody CodeDto value) { + Long code = value.getValue(); + return ResponseEntity.ok(employeeService.enterEmployee(login, code)); } - @GetMapping("/{login}/enters") + @GetMapping("/{login}/entrances") public ResponseEntity> infoEnters(@PathVariable String login) { List enters = enterService.getByLogin(login); return ResponseEntity.ok(enters); } + + @PatchMapping("/{login}/block") + public ResponseEntity blockEmployee(@PathVariable String login) { + return ResponseEntity.ok(employeeService.blockEmployee(login)); + } + + @PatchMapping("/{login}/unblock") + public ResponseEntity unblockEmployee(@PathVariable String login) { + return ResponseEntity.ok(employeeService.unblockEmployee(login)); + } } diff --git a/src/main/java/com/example/nto/repository/CodeRepository.java b/src/main/java/com/example/nto/repository/CodeRepository.java index 0781902..22d1219 100644 --- a/src/main/java/com/example/nto/repository/CodeRepository.java +++ b/src/main/java/com/example/nto/repository/CodeRepository.java @@ -4,7 +4,8 @@ import com.example.nto.entity.Code; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import java.util.Optional; + public interface CodeRepository extends JpaRepository { - @Query("SELECT CASE WHEN COUNT(c) > 0 THEN TRUE ELSE FALSE END FROM Code c WHERE c.value = :value") - boolean checkCode(long value); + Optional findByValue(long value); } diff --git a/src/main/java/com/example/nto/repository/EnterRepository.java b/src/main/java/com/example/nto/repository/EnterRepository.java index 3a3dee1..c9ca77c 100644 --- a/src/main/java/com/example/nto/repository/EnterRepository.java +++ b/src/main/java/com/example/nto/repository/EnterRepository.java @@ -4,7 +4,6 @@ import com.example.nto.entity.Enter; import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; -import java.util.Optional; public interface EnterRepository extends JpaRepository { List findByEmployeeLogin(String login); diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java index 72a1c11..2650d2a 100644 --- a/src/main/java/com/example/nto/service/EmployeeService.java +++ b/src/main/java/com/example/nto/service/EmployeeService.java @@ -2,8 +2,12 @@ package com.example.nto.service; import com.example.nto.dto.EmployeeDto; -import com.example.nto.dto.RegisterDto; +import com.example.nto.entity.Code; +import com.example.nto.entity.Enter; public interface EmployeeService { EmployeeDto getByLogin(String login); + String blockEmployee(String login); + String unblockEmployee(String login); + String enterEmployee(String login, Long value); } \ No newline at end of file diff --git a/src/main/java/com/example/nto/service/EnterService.java b/src/main/java/com/example/nto/service/EnterService.java index efc06c0..d468329 100644 --- a/src/main/java/com/example/nto/service/EnterService.java +++ b/src/main/java/com/example/nto/service/EnterService.java @@ -1,8 +1,6 @@ package com.example.nto.service; import com.example.nto.dto.EnterDto; -import com.example.nto.entity.Enter; -import org.springframework.stereotype.Service; import java.util.List; diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java index 8658a91..e4f2c3a 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -1,32 +1,30 @@ package com.example.nto.service.impl; import com.example.nto.dto.EmployeeDto; -import com.example.nto.dto.RegisterDto; -import com.example.nto.entity.Authority; +import com.example.nto.entity.Code; import com.example.nto.entity.Employee; +import com.example.nto.entity.Enter; import com.example.nto.exception.*; -import com.example.nto.repository.AuthorityRepository; +import com.example.nto.repository.CodeRepository; +import com.example.nto.repository.EnterRepository; import com.example.nto.service.EmployeeService; import com.example.nto.repository.EmployeeRepository; import com.example.nto.utils.EmployeeMapper; import lombok.RequiredArgsConstructor; -import org.h2.jdbc.JdbcSQLDataException; -import org.springframework.dao.DataIntegrityViolationException; -import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.sql.Timestamp; +import java.time.LocalDateTime; import java.util.Optional; -import java.util.Set; @Service @RequiredArgsConstructor public class EmployeeServiceImpl implements EmployeeService { private final EmployeeRepository employeeRepository; - private final AuthorityRepository authorityRepository; - private final PasswordEncoder passwordEncoder; - + private final EnterRepository enterRepository; + private final CodeRepository codeRepository; @Override @@ -37,4 +35,53 @@ public class EmployeeServiceImpl implements EmployeeService { } return EmployeeMapper.convertToDto(employee.get()); } + + + @Override + public String blockEmployee(String login) { + Optional employeeOp = employeeRepository.findByLogin(login); + if (employeeOp.isPresent()) { + Employee employee = employeeOp.get(); + employee.setAccess(false); + return "blocked"; + } + throw new UserNotFoundException("user with login " + login + " not found"); + } + + @Override + public String unblockEmployee(String login) { + Optional employeeOp = employeeRepository.findByLogin(login); + if (employeeOp.isPresent()) { + Employee employee = employeeOp.get(); + employee.setAccess(true); + return "unblocked"; + } + throw new UserNotFoundException("user with login " + login + " not found"); + } + + @Override + public String enterEmployee(String login, Long value) { + Employee employee = EmployeeMapper.convertFromDto(getByLogin(login)); + if (employee != null) { + Optional codeOp = codeRepository.findByValue(value); + if (codeOp.isPresent()) { + Code code = codeOp.get(); + if (employee.isAccess()) { + Enter enter = new Enter(); + enter.setEmployee(employee); + enter.setCode(code); + enter.setEntered_at(Timestamp.valueOf(LocalDateTime.now())); + enter.setEnterType("Phone"); + enterRepository.save(enter); + return "дверь открылась"; + } else { + return "Доступ закрыт"; + } + } else { + throw new CodeNotFoundException("Неверный код"); + } + } else { + throw new UserNotFoundException("логина не существует или неверный"); + } + } } \ No newline at end of file diff --git a/src/main/java/com/example/nto/service/impl/EnterServiceImpl.java b/src/main/java/com/example/nto/service/impl/EnterServiceImpl.java index 0fd3c48..ec6197f 100644 --- a/src/main/java/com/example/nto/service/impl/EnterServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EnterServiceImpl.java @@ -9,7 +9,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; @Service