diff --git a/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java b/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java index 29a5739..6590c3d 100644 --- a/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java +++ b/src/main/java/com/example/onomatopoeiaback/controller/EmployeeController.java @@ -9,6 +9,7 @@ import com.example.onomatopoeiaback.security.Auth; import com.example.onomatopoeiaback.service.EmployeeService; import com.example.onomatopoeiaback.service.VisitService; import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import org.springframework.data.domain.Page; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; @@ -30,6 +31,22 @@ public class EmployeeController { this.visitService = visitService; } + @PutMapping("/ban/{login}") + @SecurityRequirement(name = "basicAuth") + public ResponseEntity banEmployee(Authentication authentication, @PathVariable String login) { + checkIsAdmin(authentication); + employeeService.banUser(login); + return new ResponseEntity<>(HttpStatus.OK); + } + + @PutMapping("/unban/{login}") + @SecurityRequirement(name = "basicAuth") + public ResponseEntity unbanEmployee(Authentication authentication, @PathVariable String login) { + checkIsAdmin(authentication); + employeeService.unbanUser(login); + return new ResponseEntity<>(HttpStatus.OK); + } + @PostMapping("/create") @SecurityRequirement(name = "basicAuth") public ResponseEntity createEmployee(Authentication authentication, @RequestBody EmployeeDTO employeeDTO) { @@ -37,6 +54,13 @@ public class EmployeeController { return ResponseEntity.ok(employeeService.createEmployee(employeeDTO)); } + @PatchMapping("/open") + @SecurityRequirement(name = "basicAuth") + public ResponseEntity open(Authentication authentication, @RequestBody VisitDTO visitDTO) { + visitService.register(Auth.getEmployee(authentication), visitDTO); + return new ResponseEntity<>(HttpStatus.OK); + } + @GetMapping("/{username}/info") @SecurityRequirement(name = "basicAuth") public ResponseEntity info(Authentication authentication, @PathVariable String username) { @@ -49,10 +73,16 @@ public class EmployeeController { return new ResponseEntity<>(HttpStatus.OK); } - @PatchMapping("/open") + @GetMapping("/search") @SecurityRequirement(name = "basicAuth") - public ResponseEntity open(Authentication authentication, @RequestBody VisitDTO visitDTO) { - visitService.register(Auth.getEmployee(authentication), visitDTO); - return new ResponseEntity<>(HttpStatus.OK); + public ResponseEntity> searchUsers( + Authentication authentication, + @RequestParam String fullName, + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size + ) { + checkIsAdmin(authentication); + Page foundEmployees = employeeService.searchEmployee(fullName, page, size); + return ResponseEntity.ok(foundEmployees); } } diff --git a/src/main/java/com/example/onomatopoeiaback/domain/employee/CheckPosition.java b/src/main/java/com/example/onomatopoeiaback/domain/employee/CheckPosition.java index 1f77b29..3d22965 100644 --- a/src/main/java/com/example/onomatopoeiaback/domain/employee/CheckPosition.java +++ b/src/main/java/com/example/onomatopoeiaback/domain/employee/CheckPosition.java @@ -5,12 +5,6 @@ import com.example.onomatopoeiaback.security.Auth; import org.springframework.security.core.Authentication; public class CheckPosition { - public static void checkIsAdmin(Employee employee) { - if (employee == null || !employee.getPosition().equals(PositionType.ADMINISTRATOR)) { - throw new ForbiddenException(); - } - } - public static void checkIsAdmin(Authentication authentication) { Employee employee = Auth.getEmployee(authentication); if (employee == null || !employee.getPosition().equals(PositionType.ADMINISTRATOR)) { diff --git a/src/main/java/com/example/onomatopoeiaback/domain/employee/Employee.java b/src/main/java/com/example/onomatopoeiaback/domain/employee/Employee.java index 08bcd4f..53a2a43 100644 --- a/src/main/java/com/example/onomatopoeiaback/domain/employee/Employee.java +++ b/src/main/java/com/example/onomatopoeiaback/domain/employee/Employee.java @@ -39,4 +39,7 @@ public class Employee { private PositionType position; private LocalDateTime lastVisit; + + @NonNull + private Boolean isBanned = false; } diff --git a/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java b/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java index 06a4e71..c4eb075 100644 --- a/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java +++ b/src/main/java/com/example/onomatopoeiaback/repository/EmployeeRepository.java @@ -2,7 +2,11 @@ package com.example.onomatopoeiaback.repository; import com.example.onomatopoeiaback.domain.employee.Employee; import lombok.NonNull; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; import java.util.Optional; @@ -12,4 +16,8 @@ public interface EmployeeRepository extends JpaRepository { Employee getEmployeeById(Long id); Optional findByLogin(@NonNull String login); + + @Query("SELECT e FROM Employee e WHERE LOWER(CONCAT(e.firstName, ' ', e.lastName, ' ', e.patronymic)) LIKE LOWER(concat('%', :fullName, '%'))") + Page searchEmployees(@Param("fullName") String fullName, Pageable pageable); } + diff --git a/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java b/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java index 2b7a296..9d702cd 100644 --- a/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java +++ b/src/main/java/com/example/onomatopoeiaback/repository/VisitRepository.java @@ -2,7 +2,6 @@ package com.example.onomatopoeiaback.repository; import com.example.onomatopoeiaback.domain.visit.Visit; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java b/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java index 745f0bd..fb0a254 100644 --- a/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java +++ b/src/main/java/com/example/onomatopoeiaback/service/EmployeeService.java @@ -6,9 +6,12 @@ import com.example.onomatopoeiaback.domain.employee.PositionType; import com.example.onomatopoeiaback.exceptions.ForbiddenException; import com.example.onomatopoeiaback.exceptions.NotFoundException; import com.example.onomatopoeiaback.repository.EmployeeRepository; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; +import java.awt.print.Pageable; import java.util.Optional; @Service @@ -47,4 +50,29 @@ public class EmployeeService { } throw new ForbiddenException(); } + + public Page searchEmployee(String name, Integer page, Integer size) { + PageRequest pageable = PageRequest.of(page, size); + return employeeRepository.searchEmployees(name, pageable); + } + + public void banUser(String login) { + Optional requestedEmployeeOptional = employeeRepository.findByLogin(login); + if (requestedEmployeeOptional.isEmpty()) { + throw new NotFoundException(); + } + Employee requestedEmployee = requestedEmployeeOptional.get(); + requestedEmployee.setIsBanned(true); + employeeRepository.saveAndFlush(requestedEmployee); + } + + public void unbanUser(String login) { + Optional requestedEmployeeOptional = employeeRepository.findByLogin(login); + if (requestedEmployeeOptional.isEmpty()) { + throw new NotFoundException(); + } + Employee requestedEmployee = requestedEmployeeOptional.get(); + requestedEmployee.setIsBanned(false); + employeeRepository.saveAndFlush(requestedEmployee); + } }