From 52f900ec4dd1b280741c0e55e0ce0475280bdb45 Mon Sep 17 00:00:00 2001 From: Universall Date: Wed, 19 Feb 2025 11:42:31 +0300 Subject: [PATCH] Visit entity; Bugfix; Added password --- .../acss/components/acs/ACSComponent.java | 38 +++++++++++++- .../acss/components/acs/code/CodeMapper.java | 7 +-- .../acss/components/acs/code/CodeModel.java | 2 + .../acs/code/service/CodeService.java | 6 +++ .../acs/code/service/CodeServiceImpl.java | 17 ++++++ .../acss/components/acs/visit/VisitDTO.java | 13 +++++ .../components/acs/visit/VisitMapper.java | 25 +++++++++ .../acss/components/acs/visit/VisitModel.java | 30 +++++++++++ .../components/acs/visit/VisitRepository.java | 17 ++++++ .../acs/visit/service/VisitService.java | 17 ++++++ .../acs/visit/service/VisitServiceImpl.java | 36 +++++++++++++ .../acss/components/auth/AuthComponent.java | 9 ++-- .../auth/models/user/UserMapper.java | 1 - .../auth/models/user/UserModel.java | 12 ++--- .../acss/controllers/acs/ACSController.java | 52 ++++++++++++++++--- .../acs/{OpenRB.java => OpenRQB.java} | 2 +- .../acss/controllers/auth/AuthController.java | 11 ++-- .../acss/controllers/auth/LoginRB.java | 8 --- .../acss/controllers/auth/LoginRQB.java | 9 ++++ ...kenRefreshRB.java => TokenRefreshRQB.java} | 2 +- src/main/resources/application.properties | 2 +- .../resources/db/changelog/01/0001-users.xml | 5 +- .../db/changelog/data/csv/0001-users-data.csv | 22 ++++---- .../data/csv/0003-user_roles-data.csv | 2 +- 24 files changed, 289 insertions(+), 56 deletions(-) create mode 100644 src/main/java/com/displaynone/acss/components/acs/visit/VisitDTO.java create mode 100644 src/main/java/com/displaynone/acss/components/acs/visit/VisitMapper.java create mode 100644 src/main/java/com/displaynone/acss/components/acs/visit/VisitModel.java create mode 100644 src/main/java/com/displaynone/acss/components/acs/visit/VisitRepository.java create mode 100644 src/main/java/com/displaynone/acss/components/acs/visit/service/VisitService.java create mode 100644 src/main/java/com/displaynone/acss/components/acs/visit/service/VisitServiceImpl.java rename src/main/java/com/displaynone/acss/controllers/acs/{OpenRB.java => OpenRQB.java} (81%) delete mode 100644 src/main/java/com/displaynone/acss/controllers/auth/LoginRB.java create mode 100644 src/main/java/com/displaynone/acss/controllers/auth/LoginRQB.java rename src/main/java/com/displaynone/acss/controllers/auth/{TokenRefreshRB.java => TokenRefreshRQB.java} (77%) diff --git a/src/main/java/com/displaynone/acss/components/acs/ACSComponent.java b/src/main/java/com/displaynone/acss/components/acs/ACSComponent.java index 1f1d2e2..3bfc56b 100644 --- a/src/main/java/com/displaynone/acss/components/acs/ACSComponent.java +++ b/src/main/java/com/displaynone/acss/components/acs/ACSComponent.java @@ -2,15 +2,29 @@ package com.displaynone.acss.components.acs; import com.displaynone.acss.components.acs.code.CodeModel; import com.displaynone.acss.components.acs.code.service.CodeService; +import com.displaynone.acss.components.acs.visit.VisitModel; +import com.displaynone.acss.components.acs.visit.service.VisitService; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Component; +import java.util.List; import java.util.Optional; @Component @RequiredArgsConstructor public class ACSComponent { private final CodeService codeService; + private final VisitService visitService; + + public Optional getCodeById(Long codeId) { + return codeService.getCodeById(codeId); + } + + public CodeModel getCodeByIdStrict(Long codeId) { + return codeService.getCodeByIdStrict(codeId); + } public Optional getCodeByValue(Long value) { return codeService.getCodeByValue(value); @@ -20,7 +34,27 @@ public class ACSComponent { return codeService.getCodeByValueStrict(value); } - public boolean isValid(Long code) { - return codeService.isValid(code); + public boolean isCodeIdValid(Long codeId) { + return codeService.isValid(codeId); + } + + public boolean isCodeValid(Long codeId) { + return codeService.isCodeIdValid(codeId); + } + + public List getVisitsByCodeId(Long codeId) { + return visitService.getByCodeId(codeId); + } + + public List getVisitsByUserId(Long userId) { + return visitService.getByUserId(userId); + } + + public Page getVisitsByCodeIdPaginated(Long codeId, Pageable pageable) { + return visitService.getVisitsByCodeIdPaginated(codeId, pageable); + } + + public Page getVisitsByUserIdPaginated(Long userId, Pageable pageable) { + return visitService.getVisitsByUserIdPaginated(userId, pageable); } } diff --git a/src/main/java/com/displaynone/acss/components/acs/code/CodeMapper.java b/src/main/java/com/displaynone/acss/components/acs/code/CodeMapper.java index cfd0a31..518bf87 100644 --- a/src/main/java/com/displaynone/acss/components/acs/code/CodeMapper.java +++ b/src/main/java/com/displaynone/acss/components/acs/code/CodeMapper.java @@ -1,8 +1,5 @@ package com.displaynone.acss.components.acs.code; -import com.displaynone.acss.components.auth.models.role.RoleDTO; -import com.displaynone.acss.components.auth.models.role.RoleMapper; -import com.displaynone.acss.components.auth.models.role.RoleModel; import com.displaynone.acss.utils.GlobalUtils; import lombok.experimental.UtilityClass; @@ -20,7 +17,7 @@ public class CodeMapper { return dto; } - public List convertAllToDTO(Collection models) { - return GlobalUtils.convertAllToDTO(models, RoleMapper::convertToDTO); + public List convertAllToDTO(Collection models) { + return GlobalUtils.convertAllToDTO(models, CodeMapper::convertToDTO); } } diff --git a/src/main/java/com/displaynone/acss/components/acs/code/CodeModel.java b/src/main/java/com/displaynone/acss/components/acs/code/CodeModel.java index 831106b..1c08eca 100644 --- a/src/main/java/com/displaynone/acss/components/acs/code/CodeModel.java +++ b/src/main/java/com/displaynone/acss/components/acs/code/CodeModel.java @@ -16,5 +16,7 @@ public class CodeModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private long id; + + @Column(nullable = false) private long codeValue; } \ No newline at end of file diff --git a/src/main/java/com/displaynone/acss/components/acs/code/service/CodeService.java b/src/main/java/com/displaynone/acss/components/acs/code/service/CodeService.java index 3ffc6df..ac0815b 100644 --- a/src/main/java/com/displaynone/acss/components/acs/code/service/CodeService.java +++ b/src/main/java/com/displaynone/acss/components/acs/code/service/CodeService.java @@ -5,9 +5,15 @@ import com.displaynone.acss.components.acs.code.CodeModel; import java.util.Optional; public interface CodeService { + Optional getCodeById(Long codeId); + + CodeModel getCodeByIdStrict(Long codeId); + Optional getCodeByValue(Long value); CodeModel getCodeByValueStrict(Long value); + boolean isCodeIdValid(Long codeID); + boolean isValid(Long code); } diff --git a/src/main/java/com/displaynone/acss/components/acs/code/service/CodeServiceImpl.java b/src/main/java/com/displaynone/acss/components/acs/code/service/CodeServiceImpl.java index 66126b7..d023564 100644 --- a/src/main/java/com/displaynone/acss/components/acs/code/service/CodeServiceImpl.java +++ b/src/main/java/com/displaynone/acss/components/acs/code/service/CodeServiceImpl.java @@ -14,6 +14,18 @@ import java.util.Optional; public class CodeServiceImpl implements CodeService { private final CodeRepository codeRepository; + @Override + public Optional getCodeById(Long codeId) { + return codeRepository.findById(codeId); + } + + @Override + public CodeModel getCodeByIdStrict(Long codeId) { + Optional model = codeRepository.findById(codeId); + if (model.isEmpty()) throw new NotFoundHTTPException("Code not found"); + return model.get(); + } + @Override public Optional getCodeByValue(Long value) { return codeRepository.findByCodeValue(value); @@ -26,6 +38,11 @@ public class CodeServiceImpl implements CodeService { return model.get(); } + @Override + public boolean isCodeIdValid(Long codeID) { + return getCodeById(codeID).isPresent(); + } + @Override public boolean isValid(Long code) { return getCodeByValue(code).isPresent(); diff --git a/src/main/java/com/displaynone/acss/components/acs/visit/VisitDTO.java b/src/main/java/com/displaynone/acss/components/acs/visit/VisitDTO.java new file mode 100644 index 0000000..58ffd82 --- /dev/null +++ b/src/main/java/com/displaynone/acss/components/acs/visit/VisitDTO.java @@ -0,0 +1,13 @@ +package com.displaynone.acss.components.acs.visit; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class VisitDTO { + private Long id; + private Long userId; + private Long codeId; + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/displaynone/acss/components/acs/visit/VisitMapper.java b/src/main/java/com/displaynone/acss/components/acs/visit/VisitMapper.java new file mode 100644 index 0000000..673da6b --- /dev/null +++ b/src/main/java/com/displaynone/acss/components/acs/visit/VisitMapper.java @@ -0,0 +1,25 @@ +package com.displaynone.acss.components.acs.visit; + +import com.displaynone.acss.utils.GlobalUtils; +import lombok.experimental.UtilityClass; + +import java.util.Collection; +import java.util.List; + +@UtilityClass +public class VisitMapper { + public VisitDTO convertToDTO(VisitModel model) { + VisitDTO dto = new VisitDTO(); + + dto.setId(model.getId()); + dto.setUserId(model.getUserId()); + dto.setCodeId(model.getCodeId()); + dto.setCreatedAt(model.getCreatedAt()); + + return dto; + } + + public List convertAllToDTO(Collection models) { + return GlobalUtils.convertAllToDTO(models, VisitMapper::convertToDTO); + } +} diff --git a/src/main/java/com/displaynone/acss/components/acs/visit/VisitModel.java b/src/main/java/com/displaynone/acss/components/acs/visit/VisitModel.java new file mode 100644 index 0000000..421d8c0 --- /dev/null +++ b/src/main/java/com/displaynone/acss/components/acs/visit/VisitModel.java @@ -0,0 +1,30 @@ +package com.displaynone.acss.components.acs.visit; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +@Entity +@Data +@Builder +@Table(name = "visits") +@NoArgsConstructor +@AllArgsConstructor +public class VisitModel { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private Long userId; + + @Column(nullable = false) + private Long codeId; + + @Column(nullable = false) + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/displaynone/acss/components/acs/visit/VisitRepository.java b/src/main/java/com/displaynone/acss/components/acs/visit/VisitRepository.java new file mode 100644 index 0000000..814f4e8 --- /dev/null +++ b/src/main/java/com/displaynone/acss/components/acs/visit/VisitRepository.java @@ -0,0 +1,17 @@ +package com.displaynone.acss.components.acs.visit; + +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface VisitRepository extends JpaRepository { + List findByCodeId(Long codeId); + + List findByUserId(Long userId); + + Page findByCodeId(Long codeId, Pageable page); + + Page findByUserId(Long userId, Pageable page); +} diff --git a/src/main/java/com/displaynone/acss/components/acs/visit/service/VisitService.java b/src/main/java/com/displaynone/acss/components/acs/visit/service/VisitService.java new file mode 100644 index 0000000..067698a --- /dev/null +++ b/src/main/java/com/displaynone/acss/components/acs/visit/service/VisitService.java @@ -0,0 +1,17 @@ +package com.displaynone.acss.components.acs.visit.service; + +import com.displaynone.acss.components.acs.visit.VisitModel; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; + +import java.util.List; + +public interface VisitService { + List getByCodeId(Long code); + + List getByUserId(Long userID); + + Page getVisitsByCodeIdPaginated(Long codeId, Pageable pageable); + + Page getVisitsByUserIdPaginated(Long userId, Pageable pageable); +} diff --git a/src/main/java/com/displaynone/acss/components/acs/visit/service/VisitServiceImpl.java b/src/main/java/com/displaynone/acss/components/acs/visit/service/VisitServiceImpl.java new file mode 100644 index 0000000..e2de706 --- /dev/null +++ b/src/main/java/com/displaynone/acss/components/acs/visit/service/VisitServiceImpl.java @@ -0,0 +1,36 @@ +package com.displaynone.acss.components.acs.visit.service; + +import com.displaynone.acss.components.acs.visit.VisitModel; +import com.displaynone.acss.components.acs.visit.VisitRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +@RequiredArgsConstructor +public class VisitServiceImpl implements VisitService { + private final VisitRepository visitRepository; + + @Override + public List getByCodeId(Long code) { + return visitRepository.findByCodeId(code); + } + + @Override + public List getByUserId(Long userId) { + return visitRepository.findByUserId(userId); + } + + @Override + public Page getVisitsByCodeIdPaginated(Long codeId, Pageable pageable) { + return visitRepository.findByCodeId(codeId, pageable); + } + + @Override + public Page getVisitsByUserIdPaginated(Long userId, Pageable pageable) { + return visitRepository.findByUserId(userId, pageable); + } +} diff --git a/src/main/java/com/displaynone/acss/components/auth/AuthComponent.java b/src/main/java/com/displaynone/acss/components/auth/AuthComponent.java index ccb20a3..89ab33c 100644 --- a/src/main/java/com/displaynone/acss/components/auth/AuthComponent.java +++ b/src/main/java/com/displaynone/acss/components/auth/AuthComponent.java @@ -13,6 +13,7 @@ import org.springframework.security.authentication.UsernamePasswordAuthenticatio import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Component; import java.util.Optional; @@ -22,6 +23,7 @@ import java.util.Optional; public class AuthComponent implements UserDetailsService { private JWTUtils jwtUtils; private final UserService userService; + private final BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); @Autowired public AuthComponent(JWTUtils jwtUtils, UserService userService) { @@ -63,9 +65,10 @@ public class AuthComponent implements UserDetailsService { return _generateTokenPair(userModel); } - public Pair authenticate(@NonNull String login) { - UserModel userModel = getUserByLoginStrict(login); - return Pair.of(userModel, authenticate(userModel)); + public Pair authenticate(@NonNull String login, @NonNull String password) { + UserModel userModel = userService.findByLoginStrict(login); + if (passwordEncoder.matches(password, userModel.getPassword())) return Pair.of(userModel, authenticate(userModel)); + throw new UnauthorizedHTTPException("Wrong auth credentials"); } public AuthTokenPair authenticate(@NonNull UserDetails user) { diff --git a/src/main/java/com/displaynone/acss/components/auth/models/user/UserMapper.java b/src/main/java/com/displaynone/acss/components/auth/models/user/UserMapper.java index 46fd97e..d8ab992 100644 --- a/src/main/java/com/displaynone/acss/components/auth/models/user/UserMapper.java +++ b/src/main/java/com/displaynone/acss/components/auth/models/user/UserMapper.java @@ -16,7 +16,6 @@ public class UserMapper { dto.setName(model.getName()); dto.setPhoto(model.getPhoto()); dto.setPosition(model.getPosition()); - dto.setLastVisit(model.getLastVisit()); dto.setRoles(model.getRoles()); return dto; diff --git a/src/main/java/com/displaynone/acss/components/auth/models/user/UserModel.java b/src/main/java/com/displaynone/acss/components/auth/models/user/UserModel.java index 008b0f3..42491b4 100644 --- a/src/main/java/com/displaynone/acss/components/auth/models/user/UserModel.java +++ b/src/main/java/com/displaynone/acss/components/auth/models/user/UserModel.java @@ -7,7 +7,6 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; -import java.time.LocalDateTime; import java.util.Collection; import java.util.Set; import java.util.stream.Collectors; @@ -26,6 +25,9 @@ public class UserModel implements UserDetails { @Column(unique = true, nullable = false) private String login; + @Column(nullable = false) + private String password; + @Column(nullable = false) private String name; @@ -35,9 +37,6 @@ public class UserModel implements UserDetails { @Column(nullable = false) private String position; - @Column(nullable = false) - private LocalDateTime lastVisit; - @EqualsAndHashCode.Exclude @ManyToMany(fetch = FetchType.EAGER) @JoinTable( @@ -59,11 +58,6 @@ public class UserModel implements UserDetails { return login; } - @Override - public String getPassword() { - return ""; - } - @Override public boolean isAccountNonExpired() { return true; diff --git a/src/main/java/com/displaynone/acss/controllers/acs/ACSController.java b/src/main/java/com/displaynone/acss/controllers/acs/ACSController.java index 4cc206d..3201cfa 100644 --- a/src/main/java/com/displaynone/acss/controllers/acs/ACSController.java +++ b/src/main/java/com/displaynone/acss/controllers/acs/ACSController.java @@ -1,24 +1,64 @@ package com.displaynone.acss.controllers.acs; import com.displaynone.acss.components.acs.ACSComponent; +import com.displaynone.acss.components.acs.visit.VisitDTO; +import com.displaynone.acss.components.acs.visit.VisitMapper; +import com.displaynone.acss.components.auth.AuthComponent; +import com.displaynone.acss.components.auth.models.user.UserModel; import com.displaynone.acss.exception.generics.ForbiddenHTTPException; +import com.displaynone.acss.exception.generics.NotFoundHTTPException; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.web.bind.annotation.*; + @RestController @RequestMapping("/api/acs") @RequiredArgsConstructor public class ACSController { private final ACSComponent acsComponent; + private final AuthComponent authComponent; @PostMapping("/open") - public ResponseEntity open(@RequestBody OpenRB body) { + public ResponseEntity open(@RequestBody OpenRQB body) { Long code = body.getCode(); - if (!acsComponent.isValid(code)) throw new ForbiddenHTTPException("Invalid code"); + if (!acsComponent.isCodeValid(code)) throw new ForbiddenHTTPException("Invalid code"); return ResponseEntity.ok(null); } + + @GetMapping("visits/me") + public ResponseEntity> getMyVisitsPaginated( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size + ) { + Pageable pageable = PageRequest.of(page, size); + UserModel user = (UserModel) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + return ResponseEntity.ok(acsComponent.getVisitsByUserIdPaginated(user.getId(), pageable).map(VisitMapper::convertToDTO)); + } + + @GetMapping("visits/login/{login}") + public ResponseEntity> getUserVisitsPaginated( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size, + @PathVariable String login + ) { + Pageable pageable = PageRequest.of(page, size); + UserModel user = authComponent.getUserByLoginStrict(login); + return ResponseEntity.ok(acsComponent.getVisitsByUserIdPaginated(user.getId(), pageable).map(VisitMapper::convertToDTO)); + } + + @GetMapping("visits/code/{codeId}") + public ResponseEntity> getUserVisitsPaginated( + @RequestParam(defaultValue = "0") int page, + @RequestParam(defaultValue = "10") int size, + @PathVariable Long codeId + ) { + Pageable pageable = PageRequest.of(page, size); + if (!acsComponent.isCodeIdValid(codeId)) throw new NotFoundHTTPException("Invalid code id"); + return ResponseEntity.ok(acsComponent.getVisitsByCodeIdPaginated(codeId, pageable).map(VisitMapper::convertToDTO)); + } } diff --git a/src/main/java/com/displaynone/acss/controllers/acs/OpenRB.java b/src/main/java/com/displaynone/acss/controllers/acs/OpenRQB.java similarity index 81% rename from src/main/java/com/displaynone/acss/controllers/acs/OpenRB.java rename to src/main/java/com/displaynone/acss/controllers/acs/OpenRQB.java index 42f170e..2326ddc 100644 --- a/src/main/java/com/displaynone/acss/controllers/acs/OpenRB.java +++ b/src/main/java/com/displaynone/acss/controllers/acs/OpenRQB.java @@ -3,6 +3,6 @@ package com.displaynone.acss.controllers.acs; import lombok.Data; @Data -public class OpenRB { +public class OpenRQB { private Long code; } diff --git a/src/main/java/com/displaynone/acss/controllers/auth/AuthController.java b/src/main/java/com/displaynone/acss/controllers/auth/AuthController.java index 6a66786..41f565b 100644 --- a/src/main/java/com/displaynone/acss/controllers/auth/AuthController.java +++ b/src/main/java/com/displaynone/acss/controllers/auth/AuthController.java @@ -7,7 +7,6 @@ import com.displaynone.acss.exception.generics.BadRequestHTTPException; import com.displaynone.acss.exception.generics.NotFoundHTTPException; import com.displaynone.acss.exception.generics.UnauthorizedHTTPException; import com.displaynone.acss.utils.Pair; -import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; @@ -22,14 +21,16 @@ public class AuthController { private final AuthComponent authComponent; @PostMapping("/login") - public ResponseEntity login(@RequestBody LoginRB body) { + public ResponseEntity login(@RequestBody LoginRQB body) { String login = body.getLogin(); - if (login == null) throw new BadRequestHTTPException("Login not specified"); + String password = body.getPassword(); + + if (login == null | password == null) throw new BadRequestHTTPException("Auth credentials not specified"); Pair authInfo; try { - authInfo = authComponent.authenticate(login); + authInfo = authComponent.authenticate(login, password); } catch (NotFoundHTTPException e) { throw new UnauthorizedHTTPException(e.getMessage()); } @@ -38,7 +39,7 @@ public class AuthController { } @PostMapping("/refresh") - public ResponseEntity refreshToken(@RequestBody TokenRefreshRB body) { + public ResponseEntity refreshToken(@RequestBody TokenRefreshRQB body) { String requestRefreshToken = body.getRefreshToken(); if (requestRefreshToken == null) throw new BadRequestHTTPException("Refresh token not specified"); diff --git a/src/main/java/com/displaynone/acss/controllers/auth/LoginRB.java b/src/main/java/com/displaynone/acss/controllers/auth/LoginRB.java deleted file mode 100644 index 03132d8..0000000 --- a/src/main/java/com/displaynone/acss/controllers/auth/LoginRB.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.displaynone.acss.controllers.auth; - -import lombok.Data; - -@Data -public class LoginRB { - private String login; -} diff --git a/src/main/java/com/displaynone/acss/controllers/auth/LoginRQB.java b/src/main/java/com/displaynone/acss/controllers/auth/LoginRQB.java new file mode 100644 index 0000000..06f7731 --- /dev/null +++ b/src/main/java/com/displaynone/acss/controllers/auth/LoginRQB.java @@ -0,0 +1,9 @@ +package com.displaynone.acss.controllers.auth; + +import lombok.Data; + +@Data +public class LoginRQB { + private final String login; + private final String password; +} diff --git a/src/main/java/com/displaynone/acss/controllers/auth/TokenRefreshRB.java b/src/main/java/com/displaynone/acss/controllers/auth/TokenRefreshRQB.java similarity index 77% rename from src/main/java/com/displaynone/acss/controllers/auth/TokenRefreshRB.java rename to src/main/java/com/displaynone/acss/controllers/auth/TokenRefreshRQB.java index 316bff0..5daf391 100644 --- a/src/main/java/com/displaynone/acss/controllers/auth/TokenRefreshRB.java +++ b/src/main/java/com/displaynone/acss/controllers/auth/TokenRefreshRQB.java @@ -3,6 +3,6 @@ package com.displaynone.acss.controllers.auth; import lombok.Data; @Data -public class TokenRefreshRB { +public class TokenRefreshRQB { public String refreshToken; } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8ed8610..9831f51 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,4 +1,4 @@ -server.port=8085 +server.port=8086 spring.application.name=ACSS diff --git a/src/main/resources/db/changelog/01/0001-users.xml b/src/main/resources/db/changelog/01/0001-users.xml index cdaf877..fb3f414 100644 --- a/src/main/resources/db/changelog/01/0001-users.xml +++ b/src/main/resources/db/changelog/01/0001-users.xml @@ -12,11 +12,12 @@ + + + - - diff --git a/src/main/resources/db/changelog/data/csv/0001-users-data.csv b/src/main/resources/db/changelog/data/csv/0001-users-data.csv index 73c0954..f5f4e19 100644 --- a/src/main/resources/db/changelog/data/csv/0001-users-data.csv +++ b/src/main/resources/db/changelog/data/csv/0001-users-data.csv @@ -1,11 +1,11 @@ -id;login;name;photo;position;last_visit -1;john_doe;John Doe;https://dummyimage.com/600x400/ff0/000;Software Engineer;2025-02-16T09:00:00 -2;jane_smith;Jane Smith;https://dummyimage.com/600x400/ff0/000;Product Manager;2025-02-15T10:30:00 -3;bob_jones;Bob Jones;https://dummyimage.com/600x400/ff0/000;QA Engineer;2025-02-14T11:45:00 -4;alice_johnson;Alice Johnson;https://dummyimage.com/600x400/ff0/000;UX Designer;2025-02-13T08:15:00 -5;charlie_brown;Charlie Brown;https://dummyimage.com/600x400/ff0/000;DevOps Engineer;2025-02-12T14:00:00 -6;diana_ross;Diana Ross;https://dummyimage.com/600x400/ff0/000;HR Manager;2025-02-11T13:25:00 -7;edward_norton;Edward Norton;https://dummyimage.com/600x400/ff0/000;Backend Developer;2025-02-10T16:50:00 -8;fiona_green;Fiona Green;https://dummyimage.com/600x400/ff0/000;Frontend Developer;2025-02-09T12:10:00 -9;george_hill;George Hill;https://dummyimage.com/600x400/ff0/000;Data Scientist;2025-02-08T09:30:00 -10;helen_white;Helen White;https://dummyimage.com/600x400/ff0/000;Project Manager;2025-02-07T17:20:00 +id;login;name;photo;position;password +1;user;Default User;https://dummyimage.com/600x400/ff0/000;Software Engineer;$2a$12$CUo06gR1qTWC9JB2o1HnXuTK2U5yLIdCPprVWgY8jdB9l.xhbAoQK +2;admin;Admin User;https://dummyimage.com/600x400/ff0/000;Product Manager;$2a$12$e0djVwP9MBeFd9aZia33W.u1Yiq3gDpVNECXn7I.KgvjPr0eoeWwS +3;bob_jones;Bob Jones;https://dummyimage.com/600x400/ff0/000;QA Engineer;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +4;alice_johnson;Alice Johnson;https://dummyimage.com/600x400/ff0/000;UX Designer;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +5;charlie_brown;Charlie Brown;https://dummyimage.com/600x400/ff0/000;DevOps Engineer;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +6;diana_ross;Diana Ross;https://dummyimage.com/600x400/ff0/000;HR Manager;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +7;edward_norton;Edward Norton;https://dummyimage.com/600x400/ff0/000;Backend Developer;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +8;fiona_green;Fiona Green;https://dummyimage.com/600x400/ff0/000;Frontend Developer;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +9;george_hill;George Hill;https://dummyimage.com/600x400/ff0/000;Data Scientist;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. +10;helen_white;Helen White;https://dummyimage.com/600x400/ff0/000;Project Manager;$2a$12$b//P422i15PDoij6g4SOluIUol7X3E0eFttGMGlGCJuBmZFE6nMw. diff --git a/src/main/resources/db/changelog/data/csv/0003-user_roles-data.csv b/src/main/resources/db/changelog/data/csv/0003-user_roles-data.csv index ec912ce..d0678c5 100644 --- a/src/main/resources/db/changelog/data/csv/0003-user_roles-data.csv +++ b/src/main/resources/db/changelog/data/csv/0003-user_roles-data.csv @@ -1,6 +1,6 @@ user_id;role_id 1;2 -2;2 +2;1 3;2 4;1 5;2