forked from Olympic/NTO-2025-Backend-TeamTask
feat: Initial commit
This commit is contained in:
35
.gitignore
vendored
Normal file
35
.gitignore
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
target/
|
||||||
|
!.mvn/wrapper/maven-wrapper.jar
|
||||||
|
!**/src/main/**/target/
|
||||||
|
!**/src/test/**/target/
|
||||||
|
|
||||||
|
### IntelliJ IDEA ###
|
||||||
|
.idea
|
||||||
|
*.iws
|
||||||
|
*.iml
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
### Eclipse ###
|
||||||
|
.apt_generated
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.project
|
||||||
|
.settings
|
||||||
|
.springBeans
|
||||||
|
.sts4-cache
|
||||||
|
|
||||||
|
### NetBeans ###
|
||||||
|
/nbproject/private/
|
||||||
|
/nbbuild/
|
||||||
|
/dist/
|
||||||
|
/nbdist/
|
||||||
|
/.nb-gradle/
|
||||||
|
build/
|
||||||
|
!**/src/main/**/build/
|
||||||
|
!**/src/test/**/build/
|
||||||
|
|
||||||
|
### VS Code ###
|
||||||
|
.vscode/
|
||||||
|
|
||||||
|
### Mac OS ###
|
||||||
|
.DS_Store
|
||||||
96
README.md
Normal file
96
README.md
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
# НТО 2025. II отборочный этап. Командные задания — Backend
|
||||||
|
## 📖 Предыстория
|
||||||
|
|
||||||
|
В компании S есть возможность бронирования мест в пространствах, предназначенных под общее использование (open-space). На данный момент для бронирования места используются различные способы бронирования, разработанные в каждом офисе индивидуально.
|
||||||
|
Администрации компании S требуется мобильное приложение, как для рядовых сотрудников, так и для администрации с возможностью просмотра забронированных мест.
|
||||||
|
|
||||||
|
## 📑 Технологический стек
|
||||||
|
|
||||||
|
- Java 17
|
||||||
|
- Spring Boot
|
||||||
|
- H2
|
||||||
|
- Liquibase
|
||||||
|
|
||||||
|
|
||||||
|
## 🛠️ Техническое задание
|
||||||
|
|
||||||
|
Требуется разработать серверное приложение на Java с использованием Spring Boot, которое работает на основе протокола HTTP и взаимодействует с клиентами благодаря RESTful API.
|
||||||
|
|
||||||
|
Для хранения данных о сотрудниках и их посещениях должна использоваться реляционная база данных (H2). Схема БД должна создаваться liquibase-скриптами. ID-поля всех сущностей, сохраняемых в базе, должны выдаваться на уровне БД. Стратегия генерации ID - автоинкремент (1, 2, 3, 4…)
|
||||||
|
|
||||||
|
Сотрудникам не нужно регистрироваться, все данные в базе должны быть предзаполнены liquibase-скриптами при запуске серверного приложения. Данные для предзаполнения таблиц представлены ниже.
|
||||||
|
|
||||||
|
Картинки для аватаров пользователей не должны храниться в БД. Должны быть сохранены лишь URL-адреса на ресурсы, откуда в последующем мобильное приложение загрузит соответствующее изображение.
|
||||||
|
|
||||||
|
Сервер разрабатывается на основе предоставляемой заготовки проекта. Версии зависимостей и сами зависимости изменяться не должны.
|
||||||
|
|
||||||
|
|
||||||
|
## 📂 Правила работы с проектом-заготовкой
|
||||||
|
|
||||||
|
В предоставленном проекте необходимо изучить, но никак не модифицировать, не перемещать и не удалять следующие файлы:
|
||||||
|
- `pom.xml`
|
||||||
|
- `application.yml`
|
||||||
|
- все файлы из `db.changelog`
|
||||||
|
|
||||||
|
Кроме описанных выше файлов, в проекте уже созданы основные классы-сущности и добавлены пустые классы всех слоев. В этих классах необходимо будет написать программный код и добавить аннотации для реализации описанного задания. Наименования классов и прочий код уже написанный в предоставляемом проекте **изменять/удалять не нужно, необходимо их доработать**. Добавлять свои дополнительные классы в проект можно.
|
||||||
|
|
||||||
|
Создание таблиц в БД и предзаполнение их требуемыми данными уже реализовано в заготовке при помощи liquibase. В одной из сущностей добавлены аннотации для реализации связи “один ко многим”, обратите внимание, что в проекте потребуется еще связь данного типа.
|
||||||
|
|
||||||
|
|
||||||
|
## 🌐 Где необходимо разместить сервер
|
||||||
|
|
||||||
|
Серверное приложение должно быть разработано и протестировано локально (**не требуется** размещать сервер удаленно и осуществлять его функционирование 24/7).
|
||||||
|
|
||||||
|
|
||||||
|
## 📋 Технические требования к серверу и его ответам клиенту
|
||||||
|
|
||||||
|
Для конфигурирования Вашего сервера (его хоста/IP адреса) используйте константы из файла `Constants.kt`.
|
||||||
|
|
||||||
|
| **Тип запроса** | **Путь** | **Описание** | **Параметры/Тело** | **Ответы** |
|
||||||
|
|-----------------|-----------------------|---------------------------|--------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||||
|
| **GET** | `api/<CODE>/auth` | Проверка авторизации | `<CODE>` - код для входа | `400` - что-то пошло не так<br>`401` - кода не существует<br>`200` - данный код существует - можно пользоваться приложением |
|
||||||
|
| **GET** | `api/<CODE>/info` | Получение информации о пользователе | `<CODE>` - код для входа | `400` - что-то пошло не так<br>`401` - кода не существует<br>`200` - ОК<br><pre>{<br> "name":"Иванов Петр Федорович",<br> "photoUrl":"<https://funnyducks.ru/upload/iblock/0cd/0cdeb7ec3ed6fddda0f90fccee05557d.jpg>",<br> "booking":{<br> "2025-01-05": {"id":1,"place":"102"},<br> "2025-01-06":{"id":2,"place":"209.13"},<br> "2025-01-09":{"id":3,"place":"Зона 51. 50"}<br> }<br>}</pre> |
|
||||||
|
| **GET** | `api/<CODE>/booking` | Получение доступных для бронирования мест | `<CODE>` - код для входа | `400` - что-то пошло не так<br>`401` - кода не существует<br>`200` - ОК<br><pre>{<br> "2025-01-05": [{"id": 1, "place": "102"},{"id": 2, "place": "209.13"}],<br> "2025-01-06": [{"id": 3, "place": "Зона 51. 50"}],<br> "2025-01-05":[{"id": 1, "place": "102"},{"id": 2, "place": "209.13"}],<br> "2025-01-05": [{"id": 2, "place": "209.13"}]<br>}</pre> **Список дат ограничен текущим + 3 днями** (ответ от сервера содержит 4 дня со свободными местами для каждого)
|
||||||
|
| **POST** | `api/<CODE>/book` | Создание нового бронирования | `<CODE>` - код для входа<br>Тело: <br> <pre>{<br> “date”: “2025-01-05”,<br> “placeID”: 1 <br>}</pre> |`400` - что-то пошло не так<br>`401` - кода не существует<br>`409` - уже забронировано<br>`201` - бронирование успешно создано
|
||||||
|
|
||||||
|
|
||||||
|
## 📊 Пример данных
|
||||||
|
|
||||||
|
Таблица сотрудников:
|
||||||
|
|
||||||
|
| **id** | **name** | **code** | **photo_url** |
|
||||||
|
|--------|-----------|---------------------------------|---------------------------------------------------------------------------------------------|
|
||||||
|
| 1 | Ivanov Ivan | 1111 | https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg |
|
||||||
|
| 2 | Petrov Petr | 2222 | https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg |
|
||||||
|
| 3 | Kozlov Oleg | 3333 | https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg |
|
||||||
|
| 4 | Smirnova Anna | 4444 | https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg |
|
||||||
|
|
||||||
|
|
||||||
|
Таблица мест для бронирования:
|
||||||
|
|
||||||
|
| **id** | **place_name** |
|
||||||
|
|--------|-----------------|
|
||||||
|
| 1 | K-19 |
|
||||||
|
| 2 | M-16 |
|
||||||
|
| 3 | T-1 |
|
||||||
|
|
||||||
|
|
||||||
|
Таблица бронирований:
|
||||||
|
|
||||||
|
| **id** | **date** | **place_id** | **employee_id** |
|
||||||
|
|--------|-----------|--------------|------------------|
|
||||||
|
| 1 | 2025-11-08 | 1 | 1 |
|
||||||
|
| 2 | 2025-11-10 | 2 | 2 |
|
||||||
|
|
||||||
|
|
||||||
|
# 📝 Решение
|
||||||
|
|
||||||
|
Работу необходимо осуществлять в предоставленном проекте-заготовке (шаблоне).
|
||||||
|
Когда завершите разработку, создайте пулреквест и запустите workflow в учебной системе.
|
||||||
|
|
||||||
|
|
||||||
|
## ✅ Особенности оценивания
|
||||||
|
|
||||||
|
При тестировании сервера на него поочередно отправляются команды, описанные в API и ожидаются определенные корректные ответы.
|
||||||
|
Сервер и приложение тестируются независимо.
|
||||||
|
|
||||||
65
pom.xml
Normal file
65
pom.xml
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
<!-- ВНИМАНИЕ: Этот файл НЕЛЬЗЯ никак модифицировать, -->
|
||||||
|
<!-- не перемещать и не удалять! -->
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>org.example</groupId>
|
||||||
|
<artifactId>NTO-2025-Backend-Team-Task</artifactId>
|
||||||
|
<version>1.0-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>17</maven.compiler.source>
|
||||||
|
<maven.compiler.target>17</maven.compiler.target>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
|
<version>3.5.5</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.projectlombok</groupId>
|
||||||
|
<artifactId>lombok</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-web</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.h2database</groupId>
|
||||||
|
<artifactId>h2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-test</artifactId>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.liquibase</groupId>
|
||||||
|
<artifactId>liquibase-core</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springdoc</groupId>
|
||||||
|
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||||
|
<version>2.8.8</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
||||||
12
src/main/java/com/example/nto/App.java
Normal file
12
src/main/java/com/example/nto/App.java
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package com.example.nto;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public class App {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public class BookingController {
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.controller;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public class EmployeeController {
|
||||||
|
}
|
||||||
35
src/main/java/com/example/nto/entity/Booking.java
Normal file
35
src/main/java/com/example/nto/entity/Booking.java
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package com.example.nto.entity;
|
||||||
|
|
||||||
|
import jakarta.persistence.FetchType;
|
||||||
|
import jakarta.persistence.JoinColumn;
|
||||||
|
import jakarta.persistence.ManyToOne;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class Booking {
|
||||||
|
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private LocalDate date;
|
||||||
|
|
||||||
|
@ManyToOne(targetEntity = Place.class, fetch = FetchType.LAZY)
|
||||||
|
@JoinColumn(name = "place_id")
|
||||||
|
private Place place;
|
||||||
|
|
||||||
|
private Employee employee;
|
||||||
|
}
|
||||||
34
src/main/java/com/example/nto/entity/Employee.java
Normal file
34
src/main/java/com/example/nto/entity/Employee.java
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package com.example.nto.entity;
|
||||||
|
|
||||||
|
import jakarta.persistence.*;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class Employee {
|
||||||
|
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
private String photoUrl;
|
||||||
|
|
||||||
|
@OneToMany(mappedBy = "employee", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
|
||||||
|
private List<Booking> bookingList;
|
||||||
|
}
|
||||||
29
src/main/java/com/example/nto/entity/Place.java
Normal file
29
src/main/java/com/example/nto/entity/Place.java
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
package com.example.nto.entity;
|
||||||
|
|
||||||
|
import jakarta.persistence.GeneratedValue;
|
||||||
|
import jakarta.persistence.GenerationType;
|
||||||
|
import jakarta.persistence.Id;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Builder;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@Builder
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class Place {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private String place;
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public interface BookingRepository {
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public interface EmployeeRepository {
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public interface PlaceRepository {
|
||||||
|
}
|
||||||
10
src/main/java/com/example/nto/service/BookingService.java
Normal file
10
src/main/java/com/example/nto/service/BookingService.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public interface BookingService {
|
||||||
|
}
|
||||||
10
src/main/java/com/example/nto/service/EmployeeService.java
Normal file
10
src/main/java/com/example/nto/service/EmployeeService.java
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package com.example.nto.service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public interface EmployeeService {
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.example.nto.service.impl;
|
||||||
|
|
||||||
|
import com.example.nto.service.BookingService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public class BookingServiceImpl implements BookingService {
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package com.example.nto.service.impl;
|
||||||
|
|
||||||
|
import com.example.nto.service.EmployeeService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO: ДОРАБОТАТЬ в рамках задания
|
||||||
|
* =================================
|
||||||
|
* МОЖНО: Добавлять методы, аннотации, зависимости
|
||||||
|
* НЕЛЬЗЯ: Изменять название класса и пакета
|
||||||
|
*/
|
||||||
|
public class EmployeeServiceImpl implements EmployeeService {
|
||||||
|
}
|
||||||
26
src/main/resources/application.yml
Normal file
26
src/main/resources/application.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
# ===================================================
|
||||||
|
# ВНИМАНИЕ: Этот файл НЕЛЬЗЯ никак модифицировать,
|
||||||
|
# перемещать и удалять!
|
||||||
|
# ===================================================
|
||||||
|
spring:
|
||||||
|
datasource:
|
||||||
|
url: jdbc:h2:mem:testdb
|
||||||
|
|
||||||
|
h2:
|
||||||
|
console:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
jpa:
|
||||||
|
generate-ddl: false
|
||||||
|
|
||||||
|
hibernate:
|
||||||
|
ddl-auto: none
|
||||||
|
|
||||||
|
show-sql: true
|
||||||
|
|
||||||
|
liquibase:
|
||||||
|
enabled: true
|
||||||
|
change-log: classpath:db.changelog/db.changelog-master.xml
|
||||||
|
|
||||||
|
booking:
|
||||||
|
days-ahead: 3
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
|
||||||
|
|
||||||
|
<changeSet id="2025-11-05--0001-employee" author="anepretimov">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<tableExists tableName="employee"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
|
||||||
|
<createTable tableName="employee">
|
||||||
|
<column name="id" type="BIGINT" autoIncrement="true">
|
||||||
|
<constraints primaryKey="true" nullable="false"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="name" type="VARCHAR(100)">
|
||||||
|
<constraints nullable="false"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="code" type="VARCHAR(100)">
|
||||||
|
<constraints nullable="false" unique="true"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="photo_url" type="VARCHAR(100)"/>
|
||||||
|
</createTable>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
|
||||||
|
|
||||||
|
<changeSet id="2025-11-05--0002-place" author="anepretimov">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<tableExists tableName="place"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
|
||||||
|
<createTable tableName="place">
|
||||||
|
<column name="id" type="BIGINT" autoIncrement="true">
|
||||||
|
<constraints primaryKey="true" nullable="false"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="place_name" type="VARCHAR(100)">
|
||||||
|
<constraints nullable="false" unique="true"/>
|
||||||
|
</column>
|
||||||
|
</createTable>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
|
||||||
|
|
||||||
|
<changeSet id="2025-11-05--0003-booking" author="anepretimov">
|
||||||
|
<preConditions onFail="MARK_RAN">
|
||||||
|
<not>
|
||||||
|
<tableExists tableName="booking"/>
|
||||||
|
</not>
|
||||||
|
</preConditions>
|
||||||
|
|
||||||
|
<createTable tableName="booking">
|
||||||
|
<column name="id" type="BIGINT" autoIncrement="true">
|
||||||
|
<constraints primaryKey="true" nullable="false"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="date" type="DATE">
|
||||||
|
<constraints nullable="false"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="employee_id" type="BIGINT">
|
||||||
|
<constraints nullable="false" foreignKeyName="fk_booking_employee" referencedTableName="employee"
|
||||||
|
referencedColumnNames="id"/>
|
||||||
|
</column>
|
||||||
|
|
||||||
|
<column name="place_id" type="BIGINT">
|
||||||
|
<constraints nullable="false" foreignKeyName="fk_booking_place" referencedTableName="place"
|
||||||
|
referencedColumnNames="id"/>
|
||||||
|
</column>
|
||||||
|
</createTable>
|
||||||
|
</changeSet>
|
||||||
|
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
|
||||||
|
|
||||||
|
<changeSet id="2025-11-05--0001-employee-data" author="anepretimov">
|
||||||
|
<loadData tableName="employee" file="db.changelog/data/csv/DO_NOT_MODIFY--2025-11-05--0001-employee-data.csv"
|
||||||
|
separator=";"
|
||||||
|
quotchar='"'
|
||||||
|
encoding="UTF-8"/>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
|
||||||
|
|
||||||
|
<changeSet id="2025-11-05--0002-place-data" author="anepretimov">
|
||||||
|
<loadData tableName="place" file="db.changelog/data/csv/DO_NOT_MODIFY--2025-11-05--0002-place-data.csv"
|
||||||
|
separator=";"
|
||||||
|
quotchar='"'
|
||||||
|
encoding="UTF-8"/>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
<?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"
|
||||||
|
xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext"
|
||||||
|
xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd
|
||||||
|
http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd">
|
||||||
|
|
||||||
|
<changeSet id="2025-11-05--0003-booking-data" author="anepretimov">
|
||||||
|
<loadData tableName="booking" file="db.changelog/data/csv/DO_NOT_MODIFY--2025-11-05--0003-booking-data.csv"
|
||||||
|
separator=";"
|
||||||
|
quotchar='"'
|
||||||
|
encoding="UTF-8"/>
|
||||||
|
</changeSet>
|
||||||
|
</databaseChangeLog>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
name;code;photo_url
|
||||||
|
Ivanov Ivan;1111;https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg
|
||||||
|
Petrov Petr;2222;https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg
|
||||||
|
Kozlov Oleg;3333;https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg
|
||||||
|
Smirnova Anna;4444;https://catalog-cdn.detmir.st/media/2fe02057f9915e72a378795d32c79ea9.jpeg
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
place_name
|
||||||
|
K-19
|
||||||
|
M-16
|
||||||
|
T-1
|
||||||
|
@@ -0,0 +1,3 @@
|
|||||||
|
date;place_id;employee_id
|
||||||
|
2025-11-08;1;1
|
||||||
|
2025-11-10;2;2
|
||||||
|
18
src/main/resources/db.changelog/db.changelog-master.xml
Normal file
18
src/main/resources/db.changelog/db.changelog-master.xml
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
<?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/2025-11-05--0001-employee.xml"/>
|
||||||
|
<include file="db.changelog/1/0/2025-11-05--0002-place.xml"/>
|
||||||
|
<include file="db.changelog/1/0/2025-11-05--0003-booking.xml"/>
|
||||||
|
|
||||||
|
<include file="db.changelog/data/2025-11-05--0001-employee-data.xml"/>
|
||||||
|
<include file="db.changelog/data/2025-11-05--0002-place-data.xml"/>
|
||||||
|
<include file="db.changelog/data/2025-11-05--0003-booking-data.xml"/>
|
||||||
|
</databaseChangeLog>
|
||||||
Reference in New Issue
Block a user