From 06aae07afdbdbc82939e555ad3ca338ea4623681 Mon Sep 17 00:00:00 2001 From: IndexZero Date: Wed, 19 Feb 2025 14:21:12 +0300 Subject: [PATCH] - Added last entrance request - Added EntranceController documentation annotations for swagger - Changed QR blocking functionality --- docker/Dockerfile | 2 +- .../finals/controller/EntranceController.java | 23 +++++++++++++++++++ .../com/indexzero/finals/dto/EmployeeDTO.java | 3 +++ .../com/indexzero/finals/entity/Employee.java | 6 +---- .../finals/service/EntranceService.java | 2 ++ .../service/impl/EmployeeServiceImpl.java | 5 ++-- .../service/impl/EntranceServiceImpl.java | 8 +++++++ .../indexzero/finals/util/EmployeeMapper.java | 1 + 8 files changed, 41 insertions(+), 9 deletions(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 59c2843..9a10c58 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -2,4 +2,4 @@ FROM eclipse-temurin:21 LABEL authors="indx" COPY ./build/libs/NTO-Finals-0.0.1-SNAPSHOT.jar /opt/app/ -CMD ["java", "-jar", "/opt/app/NTO-Finals-0.0.1-SNAPSHOT.jar"] +CMD ["java", "-jar", "/opt/app/NTO-Finals-0.0.1-SNAPSHOT.jar"] \ No newline at end of file diff --git a/src/main/java/com/indexzero/finals/controller/EntranceController.java b/src/main/java/com/indexzero/finals/controller/EntranceController.java index 1d2a8d6..94e715f 100644 --- a/src/main/java/com/indexzero/finals/controller/EntranceController.java +++ b/src/main/java/com/indexzero/finals/controller/EntranceController.java @@ -2,6 +2,9 @@ package com.indexzero.finals.controller; import com.indexzero.finals.dto.EntranceDTO; import com.indexzero.finals.service.EntranceService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.responses.ApiResponses; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -18,12 +21,32 @@ public class EntranceController { @GetMapping + @Operation(description = "Get all entrances of a user with pagination. Username is taken from Authentication", summary = "Get all entrances of a user") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Request Successful."), + @ApiResponse(responseCode = "401", description = "Unauthorized"), + }) public ResponseEntity> getEntrances(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { Pageable pageable = PageRequest.of(page, size); return entranceService.getEmployeeEntrances(pageable, SecurityContextHolder.getContext().getAuthentication()); } + @GetMapping("/last") + @Operation(description = "Get user's last entrance. Username is taken from Authentication", summary = "Get user's last entrance") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Request Successful."), + @ApiResponse(responseCode = "401", description = "Unauthorized"), + }) + public ResponseEntity getLastEntrance() { + return entranceService.getLastEntrance(SecurityContextHolder.getContext().getAuthentication()); + } @GetMapping("/all") + @ApiResponses(value = { + @ApiResponse(responseCode = "200", description = "Request Successful."), + @ApiResponse(responseCode = "401", description = "Unauthorized"), + @ApiResponse(responseCode = "403", description = "Forbidden"), + }) + @Operation(description = "Get all entrances of all users (ADMIN only)", summary = "Get all entrances") public ResponseEntity> getAllEntrances(@RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "10") int size) { Pageable pageable = PageRequest.of(page, size); return entranceService.getAllEntrances(pageable); diff --git a/src/main/java/com/indexzero/finals/dto/EmployeeDTO.java b/src/main/java/com/indexzero/finals/dto/EmployeeDTO.java index fe47668..f259f92 100644 --- a/src/main/java/com/indexzero/finals/dto/EmployeeDTO.java +++ b/src/main/java/com/indexzero/finals/dto/EmployeeDTO.java @@ -1,5 +1,6 @@ package com.indexzero.finals.dto; +import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; @Data @@ -10,4 +11,6 @@ public class EmployeeDTO { private String authority; private String position; private String photoUrl; + @JsonProperty("qrEnabled") + private boolean isQREnabled; } diff --git a/src/main/java/com/indexzero/finals/entity/Employee.java b/src/main/java/com/indexzero/finals/entity/Employee.java index 38c2610..f313e02 100644 --- a/src/main/java/com/indexzero/finals/entity/Employee.java +++ b/src/main/java/com/indexzero/finals/entity/Employee.java @@ -37,7 +37,7 @@ public class Employee implements UserDetails { private String photoUrl; @Column(name = "is_enabled") - Boolean isEmpEnabled; + Boolean isQREnabled; @ManyToMany(fetch = FetchType.EAGER) Set authorities; @@ -50,8 +50,4 @@ public class Employee implements UserDetails { return this.login; } - @Override - public boolean isEnabled() { - return isEmpEnabled; - } } diff --git a/src/main/java/com/indexzero/finals/service/EntranceService.java b/src/main/java/com/indexzero/finals/service/EntranceService.java index 1da937f..de08d06 100644 --- a/src/main/java/com/indexzero/finals/service/EntranceService.java +++ b/src/main/java/com/indexzero/finals/service/EntranceService.java @@ -8,6 +8,8 @@ import org.springframework.security.core.Authentication; public interface EntranceService { ResponseEntity> getEmployeeEntrances(Pageable pageable, Authentication auth); + ResponseEntity getLastEntrance(Authentication auth); ResponseEntity> getAllEntrances(Pageable pageable); + } diff --git a/src/main/java/com/indexzero/finals/service/impl/EmployeeServiceImpl.java b/src/main/java/com/indexzero/finals/service/impl/EmployeeServiceImpl.java index 35224bc..d75ac3e 100644 --- a/src/main/java/com/indexzero/finals/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/indexzero/finals/service/impl/EmployeeServiceImpl.java @@ -50,7 +50,6 @@ public class EmployeeServiceImpl implements EmployeeService { entranceRepository.save(entrance); - // employeeRepository.save(employee); return new ResponseEntity<>(HttpStatus.OK); } @@ -90,12 +89,12 @@ public class EmployeeServiceImpl implements EmployeeService { } else { if(state.equals("active")) { - e.setIsEmpEnabled(true); + e.setIsQREnabled(true); employeeRepository.save(e); return new ResponseEntity<>(HttpStatus.OK); } else if(state.equals("blocked")) { - e.setIsEmpEnabled(false); + e.setIsQREnabled(false); employeeRepository.save(e); return new ResponseEntity<>(HttpStatus.OK); } diff --git a/src/main/java/com/indexzero/finals/service/impl/EntranceServiceImpl.java b/src/main/java/com/indexzero/finals/service/impl/EntranceServiceImpl.java index 151fe70..7b35a6e 100644 --- a/src/main/java/com/indexzero/finals/service/impl/EntranceServiceImpl.java +++ b/src/main/java/com/indexzero/finals/service/impl/EntranceServiceImpl.java @@ -37,6 +37,14 @@ public class EntranceServiceImpl implements EntranceService { return new ResponseEntity<>(page, HttpStatus.OK); } + @Override + public ResponseEntity getLastEntrance(Authentication auth) { + Employee employee = employeeRepository.findByLogin(auth.getName()); + List entrances = employee.getEntrances().stream().map(EntranceMapper::convertToDTO).collect(Collectors.toList()); + System.out.println(entrances.getLast()); + return new ResponseEntity<>(entrances.getLast(), HttpStatus.OK); + } + @Override public ResponseEntity> getAllEntrances(Pageable pageable) { List entrances = entranceRepository.findAll(); diff --git a/src/main/java/com/indexzero/finals/util/EmployeeMapper.java b/src/main/java/com/indexzero/finals/util/EmployeeMapper.java index 09471c9..279a30b 100644 --- a/src/main/java/com/indexzero/finals/util/EmployeeMapper.java +++ b/src/main/java/com/indexzero/finals/util/EmployeeMapper.java @@ -14,6 +14,7 @@ public class EmployeeMapper { employeeDTO.setName(user.getName()); employeeDTO.setPosition(user.getPosition()); employeeDTO.setPhotoUrl(user.getPhotoUrl()); + employeeDTO.setQREnabled(user.getIsQREnabled()); return employeeDTO; } }