Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
87103eefb3 |
27
pom.xml
27
pom.xml
@ -57,21 +57,20 @@
|
|||||||
<artifactId>spring-boot-starter-security</artifactId>
|
<artifactId>spring-boot-starter-security</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.liquibase</groupId>
|
<groupId>io.springfox</groupId>
|
||||||
<artifactId>liquibase-core</artifactId>
|
<artifactId>springfox-boot-starter</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.springfox</groupId>
|
||||||
|
<artifactId>springfox-boot-starter</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.springfox</groupId>
|
||||||
|
<artifactId>springfox-swagger-ui</artifactId>
|
||||||
|
<version>3.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
|
||||||
<plugins>
|
|
||||||
<plugin>
|
|
||||||
<groupId>org.springframework.boot</groupId>
|
|
||||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
|
||||||
<version>2.3.0.RELEASE</version>
|
|
||||||
</plugin>
|
|
||||||
</plugins>
|
|
||||||
</build>
|
|
||||||
|
|
||||||
</project>
|
</project>
|
@ -74,11 +74,9 @@ public class EmployeeController {
|
|||||||
@PatchMapping("/{login}/open")
|
@PatchMapping("/{login}/open")
|
||||||
public ResponseEntity<String> openDoor(@PathVariable String login, @RequestBody Long code) {
|
public ResponseEntity<String> openDoor(@PathVariable String login, @RequestBody Long code) {
|
||||||
Optional<Employee> employee = employeeService.findByLogin(login);
|
Optional<Employee> employee = employeeService.findByLogin(login);
|
||||||
|
if (employee.isPresent() && !employee.get().isBlocked() && employeeService.validateCode(login, code)) {
|
||||||
if (employee.isPresent() && !employee.get().isBlocked() && employeeService.openDoor(login, code)) {
|
|
||||||
return ResponseEntity.ok("Door opened");
|
return ResponseEntity.ok("Door opened");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ResponseEntity.status(403).body("Access denied");
|
return ResponseEntity.status(403).body("Access denied");
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -46,7 +46,7 @@ public class EmployeeServiceImpl implements EmployeeService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean openDoor(String login, long code) {
|
public boolean openDoor(String login, long code) {
|
||||||
if (!validateCode(code)) { // Проверяем, есть ли код в таблице `code`
|
if (!validateCode(code)) { // Проверяем код без привязки к логину
|
||||||
return false; // Код неверный
|
return false; // Код неверный
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,15 +54,14 @@ public class EmployeeServiceImpl implements EmployeeService {
|
|||||||
if (employeeOpt.isPresent()) {
|
if (employeeOpt.isPresent()) {
|
||||||
Employee employee = employeeOpt.get();
|
Employee employee = employeeOpt.get();
|
||||||
|
|
||||||
// Обновляем данные входа сотрудника
|
// Обновляем данные входа
|
||||||
employee.setLastVisit(LocalDateTime.now()); // Фиксируем время входа
|
employee.setLastVisit(LocalDateTime.now()); // Обновляем время последнего визита
|
||||||
employee.setLastEntryCode(code); // Записываем использованный код
|
employee.setLastEntryCode(code); // Сохраняем использованный код
|
||||||
employee.setEntryMethod("QR"); // Фиксируем метод входа
|
employee.setEntryMethod("QR"); // Отмечаем способ входа
|
||||||
|
|
||||||
// Сохраняем изменения
|
// Сохраняем изменения
|
||||||
employeeRepository.save(employee);
|
employeeRepository.save(employee);
|
||||||
|
return true;
|
||||||
return true; // Дверь открывается
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
Manifest-Version: 1.0
|
|
||||||
Main-Class: com.example.nto.App
|
|
||||||
|
|
@ -1,13 +1,28 @@
|
|||||||
spring:
|
spring:
|
||||||
|
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:h2:mem:testdb # Укажи нужную базу (например, PostgreSQL)
|
url: jdbc:h2:mem:testdb
|
||||||
username: sa
|
|
||||||
password:
|
|
||||||
driver-class-name: org.h2.Driver
|
|
||||||
|
|
||||||
liquibase:
|
h2:
|
||||||
change-log: classpath:/db/changelog/db.changelog-1.0.xml
|
console:
|
||||||
|
#enabled: false
|
||||||
|
enabled: true
|
||||||
|
|
||||||
sql:
|
jpa:
|
||||||
init:
|
#generate-ddl: false
|
||||||
mode:never
|
generate-ddl: true
|
||||||
|
|
||||||
|
hibernate:
|
||||||
|
#ddl-auto: none
|
||||||
|
ddl-auto: create-drop
|
||||||
|
|
||||||
|
# Показываем запросы
|
||||||
|
show-sql: true
|
||||||
|
|
||||||
|
# Своевременный запуск data.sql
|
||||||
|
defer-datasource-initialization: true
|
||||||
|
|
||||||
|
spring-doc:
|
||||||
|
swagger-ui:
|
||||||
|
path: /swagger-ui.html
|
||||||
|
operationsSorter: method
|
56
src/main/resources/data.sql
Normal file
56
src/main/resources/data.sql
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
-- Создание таблицы employee
|
||||||
|
CREATE TABLE IF NOT EXISTS employee (
|
||||||
|
id INT PRIMARY KEY AUTO_INCREMENT,
|
||||||
|
login VARCHAR(255) UNIQUE NOT NULL,
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
photo VARCHAR(255),
|
||||||
|
position VARCHAR(255),
|
||||||
|
last_visit TIMESTAMP,
|
||||||
|
password VARCHAR(255) NOT NULL, -- Зашифрованный пароль
|
||||||
|
role VARCHAR(50) NOT NULL,
|
||||||
|
status VARCHAR(20) DEFAULT 'works', -- Новый статус
|
||||||
|
last_entry_code BIGINT, -- Код последнего входа
|
||||||
|
entry_method VARCHAR(50) -- Метод входа (например, QR)
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Вставка данных в таблицу employee
|
||||||
|
INSERT INTO employee (id, login, name, photo, position, last_visit, password, role, status, last_entry_code, entry_method)
|
||||||
|
VALUES
|
||||||
|
(1, 'pivanov', 'Иванов Петр Федорович',
|
||||||
|
'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg',
|
||||||
|
'Разработчик', '2024-02-12T08:30',
|
||||||
|
'$2a$10$LRykcZHYR0tb72biv9aqp./icK7ReK57gRFDd74kiF02ZoZqQtnEm',
|
||||||
|
'ADMIN', 'works', 1234567890123456789, 'QR'),
|
||||||
|
|
||||||
|
(2, 'ipetrov', 'Петров Иван Константинович',
|
||||||
|
'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg',
|
||||||
|
'Аналитик', '2024-02-13T08:35',
|
||||||
|
'$2a$10$rscyLIftEqucmDbSzBHZbO5DUOyICzkYXzQ4stJfbSN.Ao9R4kfQe',
|
||||||
|
'USER', 'works', NULL, NULL),
|
||||||
|
|
||||||
|
(3, 'asemenov', 'Семенов Анатолий Анатольевич',
|
||||||
|
'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg',
|
||||||
|
'Разработчик', '2024-02-13T08:31',
|
||||||
|
'$2a$10$o/g9lV7iDi.WhwztohTcfuIEhHHWUo5xlR0Vvdy2xaaI3RNwfbqzO',
|
||||||
|
'USER', 'works', NULL, NULL),
|
||||||
|
|
||||||
|
(4, 'afedorov', 'Федоров Александр Сергеевич',
|
||||||
|
'https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg',
|
||||||
|
'Тестировщик', '2024-02-12T08:36',
|
||||||
|
'$2a$10$s33LR8PuMLQJQY85.zusceJVJLUn8mwEEwAsAUzQIaiwnjeKjt.km',
|
||||||
|
'USER', 'works', NULL, NULL);
|
||||||
|
|
||||||
|
-- Создание таблицы code
|
||||||
|
CREATE TABLE IF NOT EXISTS code (
|
||||||
|
value BIGINT PRIMARY KEY,
|
||||||
|
employee_id INT,
|
||||||
|
FOREIGN KEY (employee_id) REFERENCES employee(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
|
||||||
|
-- Вставка данных в таблицу code
|
||||||
|
INSERT INTO code (value, employee_id) VALUES
|
||||||
|
(1234567890123456789, 1),
|
||||||
|
(9223372036854775807, 2),
|
||||||
|
(1122334455667788990, 3),
|
||||||
|
(998877665544332211, 4),
|
||||||
|
(5566778899001122334, 1);
|
@ -1,9 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<databaseChangeLog
|
|
||||||
xmlns="http://www.liquibase.org/xml/ns/dbchangelog"
|
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog
|
|
||||||
http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd">
|
|
||||||
|
|
||||||
<include file="db.changelog-1.0.xml"/>
|
|
||||||
</databaseChangeLog>
|
|
Loading…
x
Reference in New Issue
Block a user