From 96cf747f8bf2ab0c554c3f092fb593a78a665ed8 Mon Sep 17 00:00:00 2001 From: agavrilov Date: Thu, 20 Feb 2025 11:48:15 +0300 Subject: [PATCH] end-points login and getAllPassing added --- .../org/example/config/WebSecurityConfig.java | 2 +- .../example/controller/UserController.java | 25 +++++++++++++------ src/main/java/org/example/dto/UserDTO.java | 1 + src/main/java/org/example/entity/User.java | 3 +++ .../exception/AuthorityNotFoundException.java | 7 ++++++ .../handler/GlobalExceptionHandler.java | 6 +++++ .../example/repository/UserRepository.java | 2 ++ .../org/example/service/PassingService.java | 2 ++ .../service/impl/PassingServiceImpl.java | 16 ++++++++++++ .../java/org/example/util/UserMapper.java | 1 + 10 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/example/exception/AuthorityNotFoundException.java diff --git a/src/main/java/org/example/config/WebSecurityConfig.java b/src/main/java/org/example/config/WebSecurityConfig.java index 131ede6..31921fc 100644 --- a/src/main/java/org/example/config/WebSecurityConfig.java +++ b/src/main/java/org/example/config/WebSecurityConfig.java @@ -26,7 +26,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { .csrf().disable() .authorizeRequests() .antMatchers("/h2-console/**").permitAll() - .antMatchers("api/{username}/passing").hasAuthority("ROLE_ADMIN") + .antMatchers("api/**").hasAuthority("ROLE_ADMIN") .antMatchers("api/{username}/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN") .anyRequest().authenticated() .and() diff --git a/src/main/java/org/example/controller/UserController.java b/src/main/java/org/example/controller/UserController.java index 6721a08..77cc554 100644 --- a/src/main/java/org/example/controller/UserController.java +++ b/src/main/java/org/example/controller/UserController.java @@ -10,41 +10,42 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; 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; @RestController -@RequestMapping("api/{username}") +@RequestMapping("api") @RequiredArgsConstructor public class UserController { private final UserService userService; private final PassingService passingService; - @GetMapping("/auth") + @GetMapping("/{username}/auth") public ResponseEntity getUserByUsername(@PathVariable String username) { UserDTO userDTO = userService.getUserByUsername(username); return ResponseEntity.ok("данный логин существует - можно пользоваться приложением"); } - @GetMapping("/info") + @GetMapping("/{username}/info") public ResponseEntity getUserInfoByUsername(@PathVariable String username) { return ResponseEntity.ok(userService.getUserInfoByUsername(username)); } - @PatchMapping("/open") + @PatchMapping("/{username}/open") public ResponseEntity patchUserByUsername(@PathVariable String username) { UserDTO userDTO = userService.patchUserByUsername(username); return ResponseEntity.ok("дверь открылась"); } - @GetMapping("/passing") + @GetMapping("/{username}/passing") public List getPassingByUsername(@PathVariable String username) { return passingService.getPassingByUsername(username); } - @GetMapping("/passing/paginated") + @GetMapping("/{username}/passing/paginated") public ResponseEntity> getAllPassingPaginated( @RequestParam(defaultValue = "0") int page, @RequestParam(defaultValue = "1") int size) { @@ -52,8 +53,18 @@ public class UserController { return ResponseEntity.ok(passingService.getAllPassingPaginated(pageable)); } - @PostMapping("/passing/new") + @PostMapping("/{username/passing/new") public ResponseEntity createPassing(@RequestBody PassingDTO dto) { return ResponseEntity.status(HttpStatus.CREATED).body(passingService.createPassing(dto)); } + + @GetMapping("/passing") + public List getAllPassing() { + return passingService.getAllPassing(); + } + + @GetMapping("/login") + public ResponseEntity login(Authentication authentication){ + return ResponseEntity.ok(userService.getUserByUsername(authentication.getName())); + } } diff --git a/src/main/java/org/example/dto/UserDTO.java b/src/main/java/org/example/dto/UserDTO.java index e5a9b89..952c0e3 100644 --- a/src/main/java/org/example/dto/UserDTO.java +++ b/src/main/java/org/example/dto/UserDTO.java @@ -9,5 +9,6 @@ public class UserDTO { private String name; private String photo; private String position; + private String authority; // private String lastVisit; } diff --git a/src/main/java/org/example/entity/User.java b/src/main/java/org/example/entity/User.java index 0a6fd8e..b7b964d 100644 --- a/src/main/java/org/example/entity/User.java +++ b/src/main/java/org/example/entity/User.java @@ -33,6 +33,9 @@ public class User implements UserDetails{ @Column(name = "position") private String position; + @Column(name = "authorities") + private String authority; + // @Column(name = "lastVisit") // private String lastVisit; diff --git a/src/main/java/org/example/exception/AuthorityNotFoundException.java b/src/main/java/org/example/exception/AuthorityNotFoundException.java new file mode 100644 index 0000000..fd08e87 --- /dev/null +++ b/src/main/java/org/example/exception/AuthorityNotFoundException.java @@ -0,0 +1,7 @@ +package org.example.exception; + +public class AuthorityNotFoundException extends RuntimeException { + public AuthorityNotFoundException(String message) { + super(message); + } +} diff --git a/src/main/java/org/example/exception/handler/GlobalExceptionHandler.java b/src/main/java/org/example/exception/handler/GlobalExceptionHandler.java index a040486..bfc0a53 100644 --- a/src/main/java/org/example/exception/handler/GlobalExceptionHandler.java +++ b/src/main/java/org/example/exception/handler/GlobalExceptionHandler.java @@ -1,5 +1,6 @@ package org.example.exception.handler; +import org.example.exception.AuthorityNotFoundException; import org.example.exception.UserNotFoundException; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -12,4 +13,9 @@ public class GlobalExceptionHandler extends RuntimeException { public ResponseEntity handleUserNotFoundException(UserNotFoundException e) { return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND); } + + @ExceptionHandler(AuthorityNotFoundException.class) + public ResponseEntity handleAuthorityNotFoundException(AuthorityNotFoundException e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.NOT_FOUND); + } } diff --git a/src/main/java/org/example/repository/UserRepository.java b/src/main/java/org/example/repository/UserRepository.java index 1a9c28c..cee3e0c 100644 --- a/src/main/java/org/example/repository/UserRepository.java +++ b/src/main/java/org/example/repository/UserRepository.java @@ -6,6 +6,8 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.Optional; public interface UserRepository extends JpaRepository { + Optional findByAuthority(String authority); + Optional findByUsername(String username); } diff --git a/src/main/java/org/example/service/PassingService.java b/src/main/java/org/example/service/PassingService.java index 51577d7..d7ec70f 100644 --- a/src/main/java/org/example/service/PassingService.java +++ b/src/main/java/org/example/service/PassingService.java @@ -7,6 +7,8 @@ import org.springframework.data.domain.Pageable; import java.util.List; public interface PassingService { + List getAllPassing(); + List getPassingByUsername(String username); Page getAllPassingPaginated(Pageable pageable); diff --git a/src/main/java/org/example/service/impl/PassingServiceImpl.java b/src/main/java/org/example/service/impl/PassingServiceImpl.java index 9d31062..a40f6db 100644 --- a/src/main/java/org/example/service/impl/PassingServiceImpl.java +++ b/src/main/java/org/example/service/impl/PassingServiceImpl.java @@ -3,8 +3,11 @@ package org.example.service.impl; import lombok.RequiredArgsConstructor; import org.example.dto.PassingDTO; import org.example.entity.Passing; +import org.example.entity.User; +import org.example.exception.AuthorityNotFoundException; import org.example.exception.UserNotFoundException; import org.example.repository.PassingRepository; +import org.example.repository.UserRepository; import org.example.service.PassingService; import org.example.util.PassingMapper; import org.springframework.data.domain.Page; @@ -12,12 +15,25 @@ import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class PassingServiceImpl implements PassingService { private final PassingRepository passingRepository; + private final UserRepository userRepository; + + @Override + public List getAllPassing() { + Optional userOptional = userRepository.findByAuthority("ROLE_ADMIN"); + if (userOptional.isEmpty()) { + throw new AuthorityNotFoundException("Нет прав"); + } + + return passingRepository.findAll().stream().map(PassingMapper::convertToDto).collect(Collectors.toList()); + } + @Override public List getPassingByUsername(String Username) { return passingRepository.findByUsername(Username).stream().map(PassingMapper::convertToDto).collect(Collectors.toList()); diff --git a/src/main/java/org/example/util/UserMapper.java b/src/main/java/org/example/util/UserMapper.java index 6879670..84a9e33 100644 --- a/src/main/java/org/example/util/UserMapper.java +++ b/src/main/java/org/example/util/UserMapper.java @@ -13,6 +13,7 @@ public class UserMapper { dto.setName(user.getName()); dto.setPhoto(user.getPhoto()); dto.setPosition(user.getPosition()); + dto.setAuthority(user.getAuthority()); // dto.setLastVisit(user.getLastVisit()); return dto;