diff --git a/pom.xml b/pom.xml
index 88282ee..85d913d 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,10 @@
spring-boot-starter-test
test
+
+ org.springframework.boot
+ spring-boot-starter-security
+
\ No newline at end of file
diff --git a/src/main/java/com/example/nto/config/WebSecurityConfig.java b/src/main/java/com/example/nto/config/WebSecurityConfig.java
new file mode 100644
index 0000000..9b24e68
--- /dev/null
+++ b/src/main/java/com/example/nto/config/WebSecurityConfig.java
@@ -0,0 +1,52 @@
+package com.example.nto.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@Configuration
+@EnableWebSecurity
+public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
+
+ private final UserDetailsService userDetailsService;
+
+ public WebSecurityConfig(UserDetailsService userDetailsService) {
+ this.userDetailsService = userDetailsService;
+ }
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+ http
+ .csrf().disable()
+ .authorizeRequests()
+ .antMatchers("/api/employee/**").hasAnyAuthority("ROLE_EMPLOYEE", "ROLE_ADMIN")
+ /*.antMatchers("/h2-console/**").permitAll()
+ .antMatchers("/edu/v1/user/register").permitAll()
+ .antMatchers("/edu/v1/user/username/{username}").permitAll()
+ .antMatchers("/edu/v1/authority/**").hasAuthority("ROLE_ADMIN")
+ .antMatchers("/edu/v1/user/authority/**").hasAuthority("ROLE_ADMIN")
+ .antMatchers("/edu/v1/user/**").hasAnyAuthority("ROLE_USER", "ROLE_ADMIN")*/
+ .anyRequest().authenticated()
+ .and()
+ .httpBasic()
+ .and()
+ .headers().frameOptions().disable();
+ }
+
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ auth.userDetailsService(userDetailsService)
+ .passwordEncoder(passwordEncoder());
+ }
+
+ @Bean
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
+}
diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java
index 1ca31c1..8bdea7c 100644
--- a/src/main/java/com/example/nto/controller/EmployeeController.java
+++ b/src/main/java/com/example/nto/controller/EmployeeController.java
@@ -2,46 +2,53 @@ package com.example.nto.controller;
import com.example.nto.entity.Code;
import com.example.nto.entity.Employee;
+import com.example.nto.entity.EmployeeData;
+import com.example.nto.entity.Entry;
import com.example.nto.service.EmployeeService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
+import java.util.List;
@RestController
@RequiredArgsConstructor
-@RequestMapping("/api")
+@RequestMapping("/api/employee")
public class EmployeeController {
private final EmployeeService employeeService;
- @GetMapping("/{login}/auth")
- private ResponseEntity auth(@PathVariable("login") String login) {
- return employeeService.checkExistence(login) ? new ResponseEntity<>(null, HttpStatus.OK) : new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
+ @PostMapping("/auth")
+ private void auth() {}
+
+ @PostMapping("/info")
+ private EmployeeData info() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ String login = authentication.getName();
+ return employeeService.info(login);
}
- @GetMapping("/{login}/info")
- private ResponseEntity info(@PathVariable("login") String login) {
- if (!employeeService.checkExistence(login)) {
- return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
- }
-
- return new ResponseEntity<>(employeeService.info(login), HttpStatus.OK);
+ @PostMapping("/open")
+ private void open(@RequestParam("value") long value) {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ String login = authentication.getName();
+ employeeService.open(login, value);
}
- @PatchMapping("/{login}/open")
- private ResponseEntity open(@PathVariable("login") String login, @RequestBody Code value) {
- LocalDateTime localDateTime = LocalDateTime.now();
- if (!employeeService.checkExistence(login)) {
- return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
- }
- Code code = employeeService.getCode(value.getValue());
- if (code == null) {
- return new ResponseEntity<>(null, HttpStatus.BAD_REQUEST);
- }
+ @PostMapping("/get-entry-list")
+ private List getEntryList() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ String login = authentication.getName();
+ return employeeService.getEntryList(login);
+ }
- employeeService.updateTime(login, localDateTime);
- return new ResponseEntity<>(null, HttpStatus.OK);
+ @PostMapping("/am-i-blocked")
+ private boolean amIBlocked() {
+ Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+ String login = authentication.getName();
+ return employeeService.amIBlocked(login);
}
}
diff --git a/src/main/java/com/example/nto/entity/Code.java b/src/main/java/com/example/nto/entity/Code.java
index 355643f..9ee338b 100644
--- a/src/main/java/com/example/nto/entity/Code.java
+++ b/src/main/java/com/example/nto/entity/Code.java
@@ -6,6 +6,8 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
@@ -15,6 +17,7 @@ import javax.persistence.Id;
@AllArgsConstructor
public class Code {
@Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private long value;
}
diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java
index 64e6831..7fbd201 100644
--- a/src/main/java/com/example/nto/entity/Employee.java
+++ b/src/main/java/com/example/nto/entity/Employee.java
@@ -4,22 +4,75 @@ import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import javax.persistence.*;
import java.time.LocalDateTime;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
@Entity
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
-public class Employee {
+public class Employee implements UserDetails {
@Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
+
private String login;
- private String name;
- private String photo;
- private String position;
- private LocalDateTime lastVisit;
+ private String passwordHashed;
+
+ private boolean isBlock;
+
+ @ManyToMany(fetch = FetchType.EAGER)
+ @JoinTable(
+ name = "relationship_employee_and_role",
+ joinColumns = @JoinColumn(name = "employee_id"),
+ inverseJoinColumns = @JoinColumn(name = "role_id")
+ )
+ private Set authorities;
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities() {
+ return authorities;
+ }
+
+ @Override
+ public String getPassword() {
+ return passwordHashed;
+ }
+
+ @Override
+ public String getUsername() {
+ return login;
+ }
+
+ @Override
+ public boolean isAccountNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isAccountNonLocked() {
+ return true;
+ }
+
+ @Override
+ public boolean isCredentialsNonExpired() {
+ return true;
+ }
+
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+
+
+ public boolean isBlock() {
+ return isBlock;
+ }
}
diff --git a/src/main/java/com/example/nto/entity/EmployeeData.java b/src/main/java/com/example/nto/entity/EmployeeData.java
new file mode 100644
index 0000000..eb3979d
--- /dev/null
+++ b/src/main/java/com/example/nto/entity/EmployeeData.java
@@ -0,0 +1,30 @@
+package com.example.nto.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.time.LocalDateTime;
+
+@Entity
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EmployeeData {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private long id;
+
+ private long ownerId;
+
+ private String name;
+ private String photo;
+ private String employeePosition;
+ private LocalDateTime lastVisit;
+}
diff --git a/src/main/java/com/example/nto/entity/Entry.java b/src/main/java/com/example/nto/entity/Entry.java
new file mode 100644
index 0000000..7110013
--- /dev/null
+++ b/src/main/java/com/example/nto/entity/Entry.java
@@ -0,0 +1,29 @@
+package com.example.nto.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import java.time.LocalDateTime;
+
+@Entity
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class Entry {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private long id;
+
+ private long employeeId;
+ private long codeId;
+
+ private LocalDateTime entryTime;
+ private boolean isCard;
+}
diff --git a/src/main/java/com/example/nto/entity/Role.java b/src/main/java/com/example/nto/entity/Role.java
new file mode 100644
index 0000000..b99618f
--- /dev/null
+++ b/src/main/java/com/example/nto/entity/Role.java
@@ -0,0 +1,29 @@
+package com.example.nto.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.Builder;
+import org.springframework.security.core.GrantedAuthority;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+
+@Entity
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Builder
+public class Role implements GrantedAuthority {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String role;
+
+ @Override
+ public String getAuthority() {
+ return role;
+ }
+}
diff --git a/src/main/java/com/example/nto/exception/CodeNotFoundException.java b/src/main/java/com/example/nto/exception/CodeNotFoundException.java
new file mode 100644
index 0000000..720b86f
--- /dev/null
+++ b/src/main/java/com/example/nto/exception/CodeNotFoundException.java
@@ -0,0 +1,7 @@
+package com.example.nto.exception;
+
+public class CodeNotFoundException extends RuntimeException {
+ public CodeNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/example/nto/exception/EmployeeDataNotFoundException.java b/src/main/java/com/example/nto/exception/EmployeeDataNotFoundException.java
new file mode 100644
index 0000000..2144c53
--- /dev/null
+++ b/src/main/java/com/example/nto/exception/EmployeeDataNotFoundException.java
@@ -0,0 +1,7 @@
+package com.example.nto.exception;
+
+public class EmployeeDataNotFoundException extends RuntimeException {
+ public EmployeeDataNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/example/nto/exception/EmployeeIsBlockedException.java b/src/main/java/com/example/nto/exception/EmployeeIsBlockedException.java
new file mode 100644
index 0000000..b65bc1d
--- /dev/null
+++ b/src/main/java/com/example/nto/exception/EmployeeIsBlockedException.java
@@ -0,0 +1,7 @@
+package com.example.nto.exception;
+
+public class EmployeeIsBlockedException extends RuntimeException {
+ public EmployeeIsBlockedException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java b/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java
new file mode 100644
index 0000000..d427077
--- /dev/null
+++ b/src/main/java/com/example/nto/exception/EmployeeNotFoundException.java
@@ -0,0 +1,7 @@
+package com.example.nto.exception;
+
+public class EmployeeNotFoundException extends RuntimeException {
+ public EmployeeNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/src/main/java/com/example/nto/exception/GlobalExceptionHandler.java b/src/main/java/com/example/nto/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..331aeff
--- /dev/null
+++ b/src/main/java/com/example/nto/exception/GlobalExceptionHandler.java
@@ -0,0 +1,29 @@
+package com.example.nto.exception;
+
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+
+@ControllerAdvice
+public class GlobalExceptionHandler {
+ @ExceptionHandler(CodeNotFoundException.class)
+ ResponseEntity codeNotFoundExceptionHandler(NullPointerException e) {
+ return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
+ }
+
+ @ExceptionHandler(EmployeeNotFoundException.class)
+ ResponseEntity employeeNotFoundExceptionHandler(NullPointerException e) {
+ return new ResponseEntity<>(e.getMessage(), HttpStatus.UNAUTHORIZED);
+ }
+
+ @ExceptionHandler(EmployeeDataNotFoundException.class)
+ ResponseEntity employeeDataNotFoundExceptionHandler(NullPointerException e) {
+ return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+
+ @ExceptionHandler(EmployeeIsBlockedException.class)
+ ResponseEntity employeeIsBlockedExceptionHandler(NullPointerException e) {
+ return new ResponseEntity<>(e.getMessage(), HttpStatus.LOCKED);
+ }
+}
diff --git a/src/main/java/com/example/nto/repository/CodeRepository.java b/src/main/java/com/example/nto/repository/CodeRepository.java
index 60cc6ed..b8512ed 100644
--- a/src/main/java/com/example/nto/repository/CodeRepository.java
+++ b/src/main/java/com/example/nto/repository/CodeRepository.java
@@ -5,7 +5,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Repository;
+import java.util.Optional;
+
@Repository
public interface CodeRepository extends JpaRepository {
- @Nullable Code findByValue(Long value);
+ Optional findByValue(Long value);
}
diff --git a/src/main/java/com/example/nto/repository/EmployeeDataRepository.java b/src/main/java/com/example/nto/repository/EmployeeDataRepository.java
new file mode 100644
index 0000000..3c20a90
--- /dev/null
+++ b/src/main/java/com/example/nto/repository/EmployeeDataRepository.java
@@ -0,0 +1,22 @@
+package com.example.nto.repository;
+
+import com.example.nto.entity.Code;
+import com.example.nto.entity.EmployeeData;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.Optional;
+
+public interface EmployeeDataRepository extends JpaRepository {
+ Optional findByOwnerId(long ownerId);
+ @Query(value = "select e.id from employee_data e where owner_id = :owner_id", nativeQuery = true)
+ Optional findIdByOwnerId(@Param("owner_id") long ownerId);
+
+ @Modifying
+ @Query("update EmployeeData e set e.lastVisit = :time where e.id = :id")
+ void updateTimeById(@Param("id") long id, @Param("time") LocalDateTime lastVisit);
+}
diff --git a/src/main/java/com/example/nto/repository/EmployeeRepository.java b/src/main/java/com/example/nto/repository/EmployeeRepository.java
index 44a68cc..09347ca 100644
--- a/src/main/java/com/example/nto/repository/EmployeeRepository.java
+++ b/src/main/java/com/example/nto/repository/EmployeeRepository.java
@@ -4,16 +4,17 @@ import com.example.nto.entity.Employee;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
+import java.util.Optional;
@Repository
public interface EmployeeRepository extends JpaRepository {
- @Nullable Employee findByLogin(String login);
+ @Query(value = "select e.id from Employee e where e.login = :login")
+ Optional findIdByLogin(@Param("login") String login);
- @Modifying
- @Query(value = "UPDATE Employee set lastVisit = :localDateTime where login = :login")
- void updateTime(String login, LocalDateTime localDateTime);
+ Optional findByLogin(String login);
}
diff --git a/src/main/java/com/example/nto/repository/EntryRepository.java b/src/main/java/com/example/nto/repository/EntryRepository.java
new file mode 100644
index 0000000..c140b3d
--- /dev/null
+++ b/src/main/java/com/example/nto/repository/EntryRepository.java
@@ -0,0 +1,20 @@
+package com.example.nto.repository;
+
+import com.example.nto.entity.Employee;
+import com.example.nto.entity.Entry;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+public interface EntryRepository extends JpaRepository {
+ @Modifying
+ @Query(value = "insert into Entry(employee_id, code_id, entry_time, is_card) values (:employeeId, :codeId, :entryTime, false)", nativeQuery = true)
+ void insert(@Param("employeeId") long employeeId, @Param("codeId") long codeId, @Param("entryTime") LocalDateTime entryTime);
+
+ List findAllByEmployeeId(Long employeeId);
+}
diff --git a/src/main/java/com/example/nto/repository/RoleRepository.java b/src/main/java/com/example/nto/repository/RoleRepository.java
new file mode 100644
index 0000000..9b0bffb
--- /dev/null
+++ b/src/main/java/com/example/nto/repository/RoleRepository.java
@@ -0,0 +1,8 @@
+package com.example.nto.repository;
+
+import com.example.nto.entity.Code;
+import com.example.nto.entity.Role;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface RoleRepository extends JpaRepository {
+}
diff --git a/src/main/java/com/example/nto/service/EmployeeService.java b/src/main/java/com/example/nto/service/EmployeeService.java
index bf4fde7..8eee447 100644
--- a/src/main/java/com/example/nto/service/EmployeeService.java
+++ b/src/main/java/com/example/nto/service/EmployeeService.java
@@ -2,16 +2,20 @@ package com.example.nto.service;
import com.example.nto.entity.Code;
import com.example.nto.entity.Employee;
+import com.example.nto.entity.EmployeeData;
+import com.example.nto.entity.Entry;
import org.springframework.lang.Nullable;
+import org.springframework.web.bind.annotation.RequestParam;
import java.time.LocalDateTime;
+import java.util.List;
public interface EmployeeService {
- boolean checkExistence(String login);
+ EmployeeData info(String login);
- @Nullable Employee info(String login);
+ void open(String login, long value);
- @Nullable Code getCode(Long value);
+ List getEntryList(String login);
- void updateTime(String login, LocalDateTime localDateTime);
+ boolean amIBlocked(String login);
}
diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java
index 1d1a74b..97682b8 100644
--- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java
+++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java
@@ -2,39 +2,92 @@ package com.example.nto.service.impl;
import com.example.nto.entity.Code;
import com.example.nto.entity.Employee;
+import com.example.nto.entity.EmployeeData;
+import com.example.nto.entity.Entry;
+import com.example.nto.exception.CodeNotFoundException;
+import com.example.nto.exception.EmployeeDataNotFoundException;
+import com.example.nto.exception.EmployeeIsBlockedException;
+import com.example.nto.exception.EmployeeNotFoundException;
import com.example.nto.repository.CodeRepository;
+import com.example.nto.repository.EmployeeDataRepository;
import com.example.nto.repository.EmployeeRepository;
+import com.example.nto.repository.EntryRepository;
import com.example.nto.service.EmployeeService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
+import java.util.List;
+import java.util.Optional;
@Service
@RequiredArgsConstructor
public class EmployeeServiceImpl implements EmployeeService {
private final EmployeeRepository employeeRepository;
+ private final EmployeeDataRepository employeeDataRepository;
private final CodeRepository codeRepository;
+ private final EntryRepository entryRepository;
@Override
- public boolean checkExistence(String login) {
- return employeeRepository.findByLogin(login) != null;
+ public EmployeeData info(String login) {
+ Optional employee = employeeRepository.findIdByLogin(login);
+ if (employee.isEmpty()) {
+ throw new EmployeeNotFoundException("Employee Not Found");
+ }
+
+ Optional employeeData = employeeDataRepository.findByOwnerId(employee.get());
+ if (employeeData.isEmpty()) {
+ throw new EmployeeDataNotFoundException("Employee Data Not Found");
+ }
+
+ return employeeData.get();
}
- @Override
- public Employee info(String login) {
- return employeeRepository.findByLogin(login);
- }
-
- @Override
- public Code getCode(Long value) {
- return codeRepository.findByValue(value);
- }
-
- @Override
@Transactional
- public void updateTime(String login, LocalDateTime localDateTime) {
- employeeRepository.updateTime(login, localDateTime);
+ @Override
+ public void open(String login, long value) {
+ Optional employee = employeeRepository.findByLogin(login);
+ if (employee.isEmpty()) {
+ throw new EmployeeNotFoundException("Employee Not Found");
+ }
+ if (employee.get().isBlock()) {
+ throw new EmployeeIsBlockedException("Employee Is Blocked");
+ }
+
+ Optional employeeData = employeeDataRepository.findIdByOwnerId(employee.get().getId());
+ if (employeeData.isEmpty()) {
+ throw new EmployeeDataNotFoundException("Employee Data Not Found");
+ }
+
+ Optional code = codeRepository.findByValue(value);
+ if (code.isEmpty()) {
+ throw new CodeNotFoundException("Code Not Found");
+ }
+
+
+ employeeDataRepository.updateTimeById(employeeData.get(), LocalDateTime.now());
+
+ entryRepository.insert(employee.get().getId(), code.get().getId(), LocalDateTime.now());
+ }
+
+ @Override
+ public List getEntryList(String login) {
+ Optional employee = employeeRepository.findIdByLogin(login);
+ if (employee.isEmpty()) {
+ throw new EmployeeNotFoundException("Employee Not Found");
+ }
+
+ return entryRepository.findAllByEmployeeId(employee.get());
+ }
+
+ @Override
+ public boolean amIBlocked(String login) {
+ Optional employee = employeeRepository.findByLogin(login);
+ if (employee.isEmpty()) {
+ throw new EmployeeNotFoundException("Employee Not Found");
+ }
+
+ return employee.get().isBlock();
}
}
diff --git a/src/main/java/com/example/nto/service/impl/UserDetailsServiceImpl.java b/src/main/java/com/example/nto/service/impl/UserDetailsServiceImpl.java
new file mode 100644
index 0000000..0e0bc03
--- /dev/null
+++ b/src/main/java/com/example/nto/service/impl/UserDetailsServiceImpl.java
@@ -0,0 +1,29 @@
+package com.example.nto.service.impl;
+
+import com.example.nto.entity.Employee;
+import com.example.nto.exception.EmployeeNotFoundException;
+import com.example.nto.repository.EmployeeRepository;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Service
+@RequiredArgsConstructor
+public class UserDetailsServiceImpl implements UserDetailsService {
+ private final EmployeeRepository employeeRepository;
+
+ @Override
+ public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
+ Optional employee = employeeRepository.findByLogin(s);
+
+ if (employee.isEmpty()) {
+ throw new EmployeeNotFoundException("Employee Not Found");
+ }
+
+ return employee.get();
+ }
+}
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index ff46b62..57a81ab 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -1,14 +1,23 @@
-INSERT INTO employee (id, login, name, photo, position, last_visit)
-VALUES
-(1, 'pivanov', 'Иванов Петр Федорович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-12T08:30'),
-(2, 'ipetrov', 'Петров Иван Константинович', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Аналитик', '2024-02-13T08:35'),
-(3, 'asemenov', 'Семенов Анатолий Анатольевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Разработчик', '2024-02-13T08:31'),
-(4, 'afedorov', 'Федоров Александр Сергеевич', 'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg', 'Тестировщик', '2024-02-12T08:36');
+INSERT INTO role (role) VALUES ('ROLE_EMPLOYEE');
+INSERT INTO role (role) VALUES ('ROLE_ADMIN');
-INSERT INTO code (id, value)
+INSERT INTO employee (login, password_hashed, is_block)
+VALUES ('admin', '$2a$10$jUSU1.20p4yQLIm3Pjclce92lWKB0ND7NIFCi8L1AaP9eARC9jBqO', false);
+INSERT INTO employee (login, password_hashed, is_block)
+VALUES ('employee', '$2a$12$tcu/4mrJaMwLO5Uskojstu45joSdR2E5/WrLRELDis554DAo.Y5tS', false);
+
+INSERT INTO employee_data (owner_id, name, photo, employee_position, last_visit)
+VALUES (1, 'dangeon master', 'photo', 'fucking slave', '2024-02-12T08:30');
+INSERT INTO employee_data (owner_id, name, photo, employee_position, last_visit)
+VALUES (2, 'dangeon master', 'photo', 'fucking slave', '2024-02-12T08:30');
+
+INSERT INTO relationship_employee_and_role (employee_id, role_id) VALUES (1, 2);
+INSERT INTO relationship_employee_and_role (employee_id, role_id) VALUES (2, 1);
+
+INSERT INTO code (value)
VALUES
-(1, 1234567890123456789),
-(2, 9223372036854775807),
-(3, 1122334455667788990),
-(4, 998877665544332211),
-(5, 5566778899001122334);
\ No newline at end of file
+(1234567890123456789),
+(9223372036854775807),
+(1122334455667788990),
+(998877665544332211),
+(5566778899001122334);
\ No newline at end of file