Checkpoint 5. +fix; +find by qr-code
This commit is contained in:
parent
010e862edc
commit
6acc58cb59
src/main
java/com/example/nto
config
controller
dto
entity
exceptions
repository
service
resources
@ -24,6 +24,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
.csrf().disable()
|
||||
.authorizeRequests()
|
||||
.antMatchers("/api/employee/registration").hasAuthority("ROLE_ADMIN")
|
||||
.antMatchers("/api/employee/login").hasAnyAuthority("ROLE_EMPLOYEE", "ROLE_ADMIN")
|
||||
.antMatchers("/api/employee/**").authenticated()
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.httpBasic()
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.example.nto.controller;
|
||||
|
||||
|
||||
import com.example.nto.dto.CodeDTO;
|
||||
import com.example.nto.dto.EmployeeDTO;
|
||||
import com.example.nto.dto.RegisterDTO;
|
||||
import com.example.nto.entity.Code;
|
||||
@ -98,4 +99,9 @@ public class EmployeeController {
|
||||
return ResponseEntity.status(HttpStatus.OK).body(service.findEmployeeDTOByUsername(authentication.getName()));
|
||||
}
|
||||
|
||||
@GetMapping("/qr-code")
|
||||
public ResponseEntity<EmployeeDTO> getEmployeeByCode(@RequestBody CodeDTO dto){
|
||||
return ResponseEntity.status(HttpStatus.OK).body(service.findEmployeeByCode(dto));
|
||||
}
|
||||
|
||||
}
|
||||
|
8
src/main/java/com/example/nto/dto/CodeDTO.java
Normal file
8
src/main/java/com/example/nto/dto/CodeDTO.java
Normal file
@ -0,0 +1,8 @@
|
||||
package com.example.nto.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class CodeDTO {
|
||||
private long value;
|
||||
}
|
@ -47,6 +47,10 @@ public class Employee implements UserDetails {
|
||||
// @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
|
||||
// @JoinTable(name = "Employee_AUTHORITIES")
|
||||
|
||||
@OneToOne
|
||||
@JoinColumn(name = "code_id", referencedColumnName = "id")
|
||||
private Code code;
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonExpired() {
|
||||
return true;
|
||||
|
@ -0,0 +1,7 @@
|
||||
package com.example.nto.exceptions;
|
||||
|
||||
public class AuthorityNotFoundException extends RuntimeException {
|
||||
public AuthorityNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -0,0 +1,7 @@
|
||||
package com.example.nto.exceptions;
|
||||
|
||||
public class CodeNotFoundException extends RuntimeException {
|
||||
public CodeNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
package com.example.nto.exceptions.handler;
|
||||
|
||||
import com.example.nto.exceptions.AuthorityNotFoundException;
|
||||
import com.example.nto.exceptions.CodeNotFoundException;
|
||||
import com.example.nto.exceptions.EmployeeAlreadyExistException;
|
||||
import com.example.nto.exceptions.EmployeeNotFoundException;
|
||||
import org.springframework.http.HttpStatus;
|
||||
@ -19,5 +21,14 @@ public class GlobalExceptionHandler {
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler(AuthorityNotFoundException.class)
|
||||
public ResponseEntity<String> authorityNotFoundExceptionHandler(AuthorityNotFoundException e){
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
|
||||
}
|
||||
|
||||
@ExceptionHandler(CodeNotFoundException.class)
|
||||
public ResponseEntity<String> codeNotFoundExceptionHandler(CodeNotFoundException e){
|
||||
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(e.getMessage());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,7 +1,10 @@
|
||||
package com.example.nto.repository;
|
||||
|
||||
import com.example.nto.entity.Employee;
|
||||
import com.example.nto.entity.Authority;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface AuthorityRepository extends JpaRepository<Employee, Long> {
|
||||
import java.util.Optional;
|
||||
|
||||
public interface AuthorityRepository extends JpaRepository<Authority, Long> {
|
||||
Optional<Authority> findByAuthority(String authority);
|
||||
}
|
||||
|
@ -3,5 +3,8 @@ package com.example.nto.repository;
|
||||
import com.example.nto.entity.Code;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface CodeRepository extends JpaRepository<Code, Long> {
|
||||
Optional<Code> findByValue(long value);
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.nto.repository;
|
||||
|
||||
import com.example.nto.entity.Code;
|
||||
import com.example.nto.entity.Employee;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
@ -7,4 +8,7 @@ import java.util.Optional;
|
||||
|
||||
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
|
||||
public Optional<Employee> findEmployeeByUsername(String login);
|
||||
|
||||
public Optional<Employee> findEmployeeByCode(Code code);
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,6 @@
|
||||
package com.example.nto.service;
|
||||
|
||||
import com.example.nto.dto.CodeDTO;
|
||||
import com.example.nto.dto.EmployeeDTO;
|
||||
import com.example.nto.dto.RegisterDTO;
|
||||
import com.example.nto.entity.Employee;
|
||||
@ -12,4 +13,6 @@ public interface EmployeeService {
|
||||
public Employee findEmployeeByUsername(String login);
|
||||
|
||||
EmployeeDTO createEmployee(RegisterDTO dto);
|
||||
|
||||
EmployeeDTO findEmployeeByCode(CodeDTO dto);
|
||||
}
|
||||
|
@ -1,10 +1,17 @@
|
||||
package com.example.nto.service.impl;
|
||||
|
||||
import com.example.nto.dto.CodeDTO;
|
||||
import com.example.nto.dto.EmployeeDTO;
|
||||
import com.example.nto.dto.RegisterDTO;
|
||||
import com.example.nto.entity.Authority;
|
||||
import com.example.nto.entity.Code;
|
||||
import com.example.nto.entity.Employee;
|
||||
import com.example.nto.exceptions.AuthorityNotFoundException;
|
||||
import com.example.nto.exceptions.CodeNotFoundException;
|
||||
import com.example.nto.exceptions.EmployeeAlreadyExistException;
|
||||
import com.example.nto.exceptions.EmployeeNotFoundException;
|
||||
import com.example.nto.repository.AuthorityRepository;
|
||||
import com.example.nto.repository.CodeRepository;
|
||||
import com.example.nto.repository.EmployeeRepository;
|
||||
import com.example.nto.service.EmployeeService;
|
||||
import com.example.nto.util.EmployeeMapper;
|
||||
@ -14,39 +21,47 @@ import org.springframework.stereotype.Service;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
public class EmployeeServiceImpl implements EmployeeService {
|
||||
|
||||
private EmployeeRepository repository;
|
||||
private EmployeeRepository employeeRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
private final AuthorityRepository authorityRepository;
|
||||
private final CodeRepository codeRepository;
|
||||
|
||||
@Override
|
||||
public void updateLocalTime(Employee employee) {
|
||||
employee.setLastVisit(LocalDateTime.now().toString());
|
||||
repository.save(employee);
|
||||
employeeRepository.save(employee);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Employee findEmployeeByUsername(String login) {
|
||||
|
||||
return repository.findEmployeeByUsername(login).orElseThrow(() -> new EmployeeNotFoundException("Employee with username "+login+" not found"));
|
||||
return employeeRepository.findEmployeeByUsername(login).orElseThrow(() -> new EmployeeNotFoundException("Employee with username "+login+" not found"));
|
||||
}
|
||||
|
||||
public EmployeeDTO findEmployeeDTOByUsername(String login) {
|
||||
|
||||
return EmployeeMapper.convertToDTO(repository.findEmployeeByUsername(login).orElseThrow(() -> new EmployeeNotFoundException("Employee with username "+login+" not found")));
|
||||
return EmployeeMapper.convertToDTO(employeeRepository.findEmployeeByUsername(login).orElseThrow(() -> new EmployeeNotFoundException("Employee with username "+login+" not found")));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EmployeeDTO createEmployee(RegisterDTO dto) {
|
||||
|
||||
Optional<Employee> optionalEmployee = repository.findEmployeeByUsername(dto.getUsername());
|
||||
Optional<Employee> optionalEmployee = employeeRepository.findEmployeeByUsername(dto.getUsername());
|
||||
if(optionalEmployee.isPresent()){
|
||||
throw new EmployeeAlreadyExistException("Employee with username " + dto.getUsername() +" already exist");
|
||||
}
|
||||
|
||||
Optional<Authority> optionalAuthority = authorityRepository.findByAuthority("ROLE_EMPLOYEE");
|
||||
if(optionalAuthority.isEmpty()){
|
||||
throw new AuthorityNotFoundException("Authority not found");
|
||||
}
|
||||
|
||||
Employee employee = new Employee();
|
||||
employee.setName(dto.getName());
|
||||
employee.setUsername(dto.getUsername());
|
||||
@ -58,7 +73,24 @@ public class EmployeeServiceImpl implements EmployeeService {
|
||||
employee.setJobPos(dto.getJobPos());
|
||||
employee.setLastVisit(LocalDateTime.now().toString());
|
||||
|
||||
return EmployeeMapper.convertToDTO(repository.save(employee));
|
||||
employee.setAuthorities(Set.of(optionalAuthority.get()));
|
||||
|
||||
return EmployeeMapper.convertToDTO(employeeRepository.save(employee));
|
||||
}
|
||||
|
||||
@Override
|
||||
public EmployeeDTO findEmployeeByCode(CodeDTO dto) {
|
||||
Optional<Code> optionalCode = codeRepository.findByValue(dto.getValue());
|
||||
if(optionalCode.isEmpty()){
|
||||
throw new CodeNotFoundException("Qr-Code "+dto.getValue()+" not found");
|
||||
}
|
||||
|
||||
Optional<Employee> optionalEmployee = employeeRepository.findEmployeeByCode(optionalCode.get());
|
||||
if(optionalEmployee.isEmpty()){
|
||||
throw new EmployeeNotFoundException("Employee by qr-code "+dto.getValue()+" not found");
|
||||
}
|
||||
|
||||
return EmployeeMapper.convertToDTO(optionalEmployee.get());
|
||||
}
|
||||
|
||||
|
||||
|
@ -30,7 +30,7 @@ spring:
|
||||
|
||||
hibernate:
|
||||
#ddl-auto: none
|
||||
ddl-auto: update
|
||||
ddl-auto: none
|
||||
|
||||
# Показываем запросы
|
||||
show-sql: true
|
||||
|
@ -3,21 +3,21 @@ VALUES
|
||||
(1, 'ROLE_EMPLOYEE'),
|
||||
(2, 'ROLE_ADMIN');
|
||||
|
||||
INSERT INTO employee (id, username, password, name, photo, job_pos, last_visit)
|
||||
INSERT INTO code (id, value)
|
||||
VALUES
|
||||
(1, 'pivanov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Иванов Петр Федорович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:30'),
|
||||
(2, 'ipetrov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Петров Иван Константинович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35'),
|
||||
(3, 'asemenov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Семенов Анатолий Анатольевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31'),
|
||||
(4, 'afedorov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Федоров Александр Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36'),
|
||||
(5, 'gnazarov', '$2a$12$QH3S01HpdzDARg4qrZ4Qee9SkFmxmau2SiEvsSg5M17K2vBBm673O', 'Назаров Г. Н.', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Администратор', '2024-02-12T08:36');
|
||||
(1, 1234567890123456789),
|
||||
(2, 9223372036854775807),
|
||||
(3, 1122334455667788990),
|
||||
(4, 998877665544332211),
|
||||
(5, 5566778899001122334);
|
||||
|
||||
INSERT INTO code (value)
|
||||
INSERT INTO employee (username, password, name, photo, job_pos, last_visit, code_id)
|
||||
VALUES
|
||||
(1234567890123456789),
|
||||
(9223372036854775807),
|
||||
(1122334455667788990),
|
||||
(998877665544332211),
|
||||
(5566778899001122334);
|
||||
('pivanov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Иванов Петр Федорович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:30', 3),
|
||||
('ipetrov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Петров Иван Константинович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35', 2),
|
||||
('asemenov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Семенов Анатолий Анатольевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31', 4),
|
||||
('afedorov', '$2a$12$oSvuYhIhHJtyw3Gp542S3.WI2aupaIQ5265ItMDvnTPopcLQudx9q', 'Федоров Александр Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36', 1),
|
||||
('gnazarov', '$2a$12$QH3S01HpdzDARg4qrZ4Qee9SkFmxmau2SiEvsSg5M17K2vBBm673O', 'Назаров Г. Н.', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Администратор', '2024-02-12T08:36', 5);
|
||||
|
||||
INSERT INTO employee_authorities(employee_id, authorities_id)
|
||||
VALUES
|
||||
|
@ -8,9 +8,11 @@ password VARCHAR(255),
|
||||
name VARCHAR(255),
|
||||
photo VARCHAR(255),
|
||||
job_pos VARCHAR(255),
|
||||
last_visit VARCHAR(255)
|
||||
last_visit VARCHAR(255),
|
||||
--authorities_id BIGINT NOT NULL,
|
||||
--CONSTRAINT fk_employee_authorities FOREIGN KEY(authorities_id) REFERENCES authorities(id)
|
||||
code_id BIGINT NOT NULL,
|
||||
CONSTRAINT fk_employee_code FOREIGN KEY(code_id) REFERENCES code(id)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS employee_authorities(
|
||||
|
Loading…
x
Reference in New Issue
Block a user