From 659306712d5203778bf637a743956d57957c5ea4 Mon Sep 17 00:00:00 2001 From: Shilyaev_Dmitry Date: Wed, 19 Feb 2025 17:33:36 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D1=84=D0=B8=D0=BA=D1=81=D0=B8=D1=80=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B2=D1=85=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nto/controller/EmployeeController.java | 17 ++++--- .../java/com/example/nto/dto/EmployeeDTO.java | 8 ++- .../java/com/example/nto/dto/EnterDTO.java | 12 +++++ .../java/com/example/nto/entity/Code.java | 2 +- .../java/com/example/nto/entity/Employee.java | 2 +- .../java/com/example/nto/entity/Enter.java | 29 +++++++++++ .../com/example/nto/entity/EnterType.java | 2 +- .../nto/exception/IncorrectTypeException.java | 7 +++ .../handler/GlobalExceptionHandler.java | 7 +-- .../nto/repository/CodeRepository.java | 4 +- .../nto/repository/EnterRepository.java | 9 ++++ .../nto/repository/EnterTypeRepository.java | 5 ++ .../example/nto/service/EmployeeService.java | 13 +++-- .../nto/service/impl/EmployeeServiceImpl.java | 51 ++++++++++++++++--- .../com/example/nto/util/EmployeeMapper.java | 5 +- .../com/example/nto/util/EnterMapper.java | 17 +++++++ .../1.0/1.0/2025-02-19-0006-enters.xml | 36 +++++++++++++ .../db.changelog/1.0/db.changelog-master.xml | 2 + 18 files changed, 203 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/example/nto/dto/EnterDTO.java create mode 100644 src/main/java/com/example/nto/entity/Enter.java create mode 100644 src/main/java/com/example/nto/exception/IncorrectTypeException.java create mode 100644 src/main/java/com/example/nto/repository/EnterRepository.java create mode 100644 src/main/java/com/example/nto/util/EnterMapper.java create mode 100644 src/main/resources/db.changelog/1.0/1.0/2025-02-19-0006-enters.xml diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index e7a3b19..40a17c4 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -1,14 +1,19 @@ package com.example.nto.controller; +import com.example.nto.dto.EmployeeDTO; +import com.example.nto.dto.EnterDTO; import com.example.nto.entity.Code; import com.example.nto.entity.Employee; +import com.example.nto.entity.EnterType; import com.example.nto.service.impl.EmployeeServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; +import java.time.LocalDateTime; + @RestController @RequiredArgsConstructor @RequestMapping("/api") @@ -17,17 +22,17 @@ public class EmployeeController { private final EmployeeServiceImpl employeeService; @GetMapping("/login") - public ResponseEntity login(Authentication authentication){ + public ResponseEntity login(Authentication authentication){ return ResponseEntity.ok(employeeService.getEmployeeByUsername(authentication.getName())); } @GetMapping("/info/{login}") - public Employee info(@PathVariable("login") String username){ - return employeeService.getInfo(username); + public ResponseEntity info(@PathVariable("login") String username){ + return ResponseEntity.ok(employeeService.getInfo(username)); } - @PatchMapping("/open/{login}") - public String open(@PathVariable("login") String login, @RequestBody Code value){ - return employeeService.patchOpen(login, value.getValue()); + @PostMapping("/add/{login}") + public ResponseEntity add(@PathVariable("login") String login, @RequestBody EnterDTO enterDTO){ + return ResponseEntity.ok(employeeService.addEnter(login, enterDTO)); } } diff --git a/src/main/java/com/example/nto/dto/EmployeeDTO.java b/src/main/java/com/example/nto/dto/EmployeeDTO.java index 452ebdb..0b88212 100644 --- a/src/main/java/com/example/nto/dto/EmployeeDTO.java +++ b/src/main/java/com/example/nto/dto/EmployeeDTO.java @@ -2,10 +2,14 @@ package com.example.nto.dto; import lombok.Data; +import java.time.LocalDateTime; + @Data public class EmployeeDTO { + private long id; private String username; private String name; - private String password; - private String lastVisit; + private String photoUrl; + private String position; + private LocalDateTime lastVisit; } diff --git a/src/main/java/com/example/nto/dto/EnterDTO.java b/src/main/java/com/example/nto/dto/EnterDTO.java new file mode 100644 index 0000000..d738cab --- /dev/null +++ b/src/main/java/com/example/nto/dto/EnterDTO.java @@ -0,0 +1,12 @@ +package com.example.nto.dto; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class EnterDTO { + private long value; + private String type; + private LocalDateTime time; +} diff --git a/src/main/java/com/example/nto/entity/Code.java b/src/main/java/com/example/nto/entity/Code.java index b1e64cb..352bbdd 100644 --- a/src/main/java/com/example/nto/entity/Code.java +++ b/src/main/java/com/example/nto/entity/Code.java @@ -8,7 +8,7 @@ import javax.persistence.*; @Entity @Builder @AllArgsConstructor -@Getter +@NoArgsConstructor public class Code { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java index 2173c41..32e4814 100644 --- a/src/main/java/com/example/nto/entity/Employee.java +++ b/src/main/java/com/example/nto/entity/Employee.java @@ -39,7 +39,7 @@ public class Employee implements UserDetails { @ManyToOne @JoinColumn(name="enter_type_id") - private EnterType typeId; + private EnterType type; @ManyToMany(fetch = FetchType.EAGER) private Set authorities; diff --git a/src/main/java/com/example/nto/entity/Enter.java b/src/main/java/com/example/nto/entity/Enter.java new file mode 100644 index 0000000..5484f71 --- /dev/null +++ b/src/main/java/com/example/nto/entity/Enter.java @@ -0,0 +1,29 @@ +package com.example.nto.entity; + +import lombok.Data; + +import javax.persistence.*; +import java.time.LocalDateTime; + +@Data +@Entity +@Table(name="enters") +public class Enter { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private long id; + + @Column(name="employee_username") + private String username; + + @Column(name="value") + private long value; + + @ManyToOne + @JoinColumn(name="enter_type_id") + private EnterType type; + + @Column(name="time") + private LocalDateTime time; + +} diff --git a/src/main/java/com/example/nto/entity/EnterType.java b/src/main/java/com/example/nto/entity/EnterType.java index 2a0df24..705ffd9 100644 --- a/src/main/java/com/example/nto/entity/EnterType.java +++ b/src/main/java/com/example/nto/entity/EnterType.java @@ -11,6 +11,6 @@ public class EnterType { @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id") private long id; - @Column(name = "enter_type") + @Column(name = "types") private String type; } diff --git a/src/main/java/com/example/nto/exception/IncorrectTypeException.java b/src/main/java/com/example/nto/exception/IncorrectTypeException.java new file mode 100644 index 0000000..3791a1b --- /dev/null +++ b/src/main/java/com/example/nto/exception/IncorrectTypeException.java @@ -0,0 +1,7 @@ +package com.example.nto.exception; + +public class IncorrectTypeException extends RuntimeException { + public IncorrectTypeException(String message) { + super(message); + } +} diff --git a/src/main/java/com/example/nto/exception/handler/GlobalExceptionHandler.java b/src/main/java/com/example/nto/exception/handler/GlobalExceptionHandler.java index 93f4c7c..4a482e8 100644 --- a/src/main/java/com/example/nto/exception/handler/GlobalExceptionHandler.java +++ b/src/main/java/com/example/nto/exception/handler/GlobalExceptionHandler.java @@ -3,6 +3,7 @@ package com.example.nto.exception.handler; import com.example.nto.exception.EmployeeNotFoundException; import com.example.nto.exception.IncorrectCodeException; import com.example.nto.exception.IncorrectPasswordException; +import com.example.nto.exception.IncorrectTypeException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; @@ -17,11 +18,11 @@ public class GlobalExceptionHandler { @ExceptionHandler public ResponseEntity handleIncorrectCodeException(IncorrectCodeException e) { - return new ResponseEntity<>(e.getMessage(), HttpStatus.valueOf(430)); + return new ResponseEntity<>(e.getMessage(), HttpStatus.CONFLICT); } - @ExceptionHandler(IncorrectPasswordException.class) - public ResponseEntity handlerIncorrectPasswordException(IncorrectPasswordException e) { + @ExceptionHandler(IncorrectTypeException.class) + public ResponseEntity handlerIncorrectTypeException(IncorrectTypeException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.CONFLICT); } } diff --git a/src/main/java/com/example/nto/repository/CodeRepository.java b/src/main/java/com/example/nto/repository/CodeRepository.java index 709641c..209bb4d 100644 --- a/src/main/java/com/example/nto/repository/CodeRepository.java +++ b/src/main/java/com/example/nto/repository/CodeRepository.java @@ -4,8 +4,10 @@ import com.example.nto.entity.Code; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Optional; + @Repository public interface CodeRepository extends JpaRepository { - Code findByValue(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 new file mode 100644 index 0000000..e593b05 --- /dev/null +++ b/src/main/java/com/example/nto/repository/EnterRepository.java @@ -0,0 +1,9 @@ +package com.example.nto.repository; + +import com.example.nto.entity.Enter; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EnterRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/nto/repository/EnterTypeRepository.java b/src/main/java/com/example/nto/repository/EnterTypeRepository.java index 541a3d4..b6cfb58 100644 --- a/src/main/java/com/example/nto/repository/EnterTypeRepository.java +++ b/src/main/java/com/example/nto/repository/EnterTypeRepository.java @@ -2,6 +2,11 @@ package com.example.nto.repository; import com.example.nto.entity.EnterType; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.Optional; + +@Repository public interface EnterTypeRepository extends JpaRepository { + Optional findByType(String type); } diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java index 0e6f147..213f276 100644 --- a/src/main/java/com/example/nto/service/EmployeeService.java +++ b/src/main/java/com/example/nto/service/EmployeeService.java @@ -1,9 +1,16 @@ package com.example.nto.service; +import com.example.nto.dto.EmployeeDTO; +import com.example.nto.dto.EnterDTO; import com.example.nto.entity.Employee; +import com.example.nto.entity.EnterType; + +import java.time.LocalDateTime; +import java.util.List; public interface EmployeeService { - Employee getEmployeeByUsername(String username); - Employee getInfo(String username); - String patchOpen(String username, long value); + EmployeeDTO getEmployeeByUsername(String username); + EmployeeDTO getInfo(String username); + EnterDTO addEnter(String username, EnterDTO enterDTO); + List getAllEmployeeEnters(); } 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 b258d92..3c0c393 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -1,16 +1,29 @@ package com.example.nto.service.impl; +import com.example.nto.dto.EmployeeDTO; +import com.example.nto.dto.EnterDTO; import com.example.nto.entity.Code; import com.example.nto.entity.Employee; +import com.example.nto.entity.Enter; +import com.example.nto.entity.EnterType; import com.example.nto.exception.EmployeeNotFoundException; +import com.example.nto.exception.IncorrectCodeException; +import com.example.nto.exception.IncorrectTypeException; import com.example.nto.repository.CodeRepository; import com.example.nto.repository.EmployeeRepository; +import com.example.nto.repository.EnterRepository; +import com.example.nto.repository.EnterTypeRepository; import com.example.nto.service.EmployeeService; +import com.example.nto.util.EmployeeMapper; +import com.example.nto.util.EnterMapper; +import liquibase.pro.packaged.E; import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.web.server.ResponseStatusException; +import java.time.LocalDateTime; +import java.util.List; import java.util.Optional; import static org.springframework.util.Assert.hasText; @@ -21,30 +34,56 @@ public class EmployeeServiceImpl implements EmployeeService { private final EmployeeRepository employeeRepository; private final CodeRepository codeRepository; + private final EnterTypeRepository enterTypeRepository; + private final EnterRepository enterRepository; @Override - public Employee getEmployeeByUsername(String username) { + public EmployeeDTO getEmployeeByUsername(String username) { Optional optionalEmployee = employeeRepository.findByUsername(username); if(optionalEmployee.isEmpty()) throw new EmployeeNotFoundException("Employee with username: " + username + " not found"); - return optionalEmployee.get(); + return EmployeeMapper.convertToDTO(optionalEmployee.get()); } @Override - public Employee getInfo(String username) { + public EmployeeDTO getInfo(String username) { Optional optionalEmployee = employeeRepository.findByUsername(username); if(optionalEmployee.isEmpty()) { throw new EmployeeNotFoundException("Employee with username: " + username + " not found"); } - return optionalEmployee.get(); + return EmployeeMapper.convertToDTO(optionalEmployee.get()); } @Override - public String patchOpen(String username, long value) { + public EnterDTO addEnter(String username, EnterDTO enterDTO) { + Optional optionalEmployee = employeeRepository.findByUsername(username); + if(optionalEmployee.isEmpty()) + throw new EmployeeNotFoundException("Employee with username: " + username + " not found"); + Optional optionalCode = codeRepository.findByValue(enterDTO.getValue()); + if(optionalCode.isEmpty()) + throw new IncorrectCodeException("Incorrect code"); - return ("Дверь открыта"); + Optional optionalEnterType = enterTypeRepository.findByType(enterDTO.getType()); + if(optionalEnterType.isEmpty()) + throw new IncorrectTypeException("Incorrect type"); + + Enter enter = new Enter(); + enter.setType(optionalEnterType.get()); + enter.setTime(enterDTO.getTime()); + enter.setValue(enterDTO.getValue()); + enter.setUsername(username); + + + return EnterMapper.convertToDTO(enterRepository.save(enter)); } + + @Override + public List getAllEmployeeEnters() { + return List.of(); + } + + } diff --git a/src/main/java/com/example/nto/util/EmployeeMapper.java b/src/main/java/com/example/nto/util/EmployeeMapper.java index 22d3129..b44da0c 100644 --- a/src/main/java/com/example/nto/util/EmployeeMapper.java +++ b/src/main/java/com/example/nto/util/EmployeeMapper.java @@ -8,9 +8,12 @@ import lombok.experimental.UtilityClass; public class EmployeeMapper { public EmployeeDTO convertToDTO(Employee employee){ EmployeeDTO employeeDTO = new EmployeeDTO(); + employeeDTO.setId(employee.getId()); employeeDTO.setUsername(employee.getUsername()); - employeeDTO.setPassword(employee.getPassword()); employeeDTO.setName(employee.getName()); + employeeDTO.setPosition(employee.getPosition()); + employeeDTO.setPhotoUrl(employee.getPhotoUrl()); + employeeDTO.setLastVisit(employee.getLastVisit()); return employeeDTO; } diff --git a/src/main/java/com/example/nto/util/EnterMapper.java b/src/main/java/com/example/nto/util/EnterMapper.java new file mode 100644 index 0000000..516eb3f --- /dev/null +++ b/src/main/java/com/example/nto/util/EnterMapper.java @@ -0,0 +1,17 @@ +package com.example.nto.util; + +import com.example.nto.dto.EnterDTO; +import com.example.nto.entity.Enter; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class EnterMapper { + public EnterDTO convertToDTO(Enter enter){ + EnterDTO enterDTO = new EnterDTO(); + enterDTO.setTime(enter.getTime()); + enterDTO.setValue(enter.getValue()); + enterDTO.setType(enter.getType().getType()); + + return enterDTO; + } +} diff --git a/src/main/resources/db.changelog/1.0/1.0/2025-02-19-0006-enters.xml b/src/main/resources/db.changelog/1.0/1.0/2025-02-19-0006-enters.xml new file mode 100644 index 0000000..f3cbc05 --- /dev/null +++ b/src/main/resources/db.changelog/1.0/1.0/2025-02-19-0006-enters.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/db.changelog/1.0/db.changelog-master.xml b/src/main/resources/db.changelog/1.0/db.changelog-master.xml index 07dc9d6..bdcacd7 100644 --- a/src/main/resources/db.changelog/1.0/db.changelog-master.xml +++ b/src/main/resources/db.changelog/1.0/db.changelog-master.xml @@ -19,6 +19,8 @@ + +