diff --git a/pom.xml b/pom.xml
index 0cc023f..8f5f8a1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,15 +33,14 @@
org.springframework.boot
spring-boot-starter-web
-
-
-
-
-
-
-
-
-
+
+ org.flywaydb
+ flyway-core
+
+
+ org.flywaydb
+ flyway-database-postgresql
+
org.postgresql
postgresql
diff --git a/src/main/java/ru/tubryansk/tdms/dto/DiplomaTopicDTO.java b/src/main/java/ru/tubryansk/tdms/dto/DiplomaTopicDTO.java
new file mode 100644
index 0000000..ede40ed
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/dto/DiplomaTopicDTO.java
@@ -0,0 +1,15 @@
+package ru.tubryansk.tdms.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DiplomaTopicDTO {
+ private Integer id;
+ private String name;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/dto/RoleDTO.java b/src/main/java/ru/tubryansk/tdms/dto/RoleDTO.java
new file mode 100644
index 0000000..f34d5f9
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/dto/RoleDTO.java
@@ -0,0 +1,15 @@
+package ru.tubryansk.tdms.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class RoleDTO {
+ private Integer id;
+ private String name;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/dto/StudentDTO.java b/src/main/java/ru/tubryansk/tdms/dto/StudentDTO.java
new file mode 100644
index 0000000..2aad7fb
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/dto/StudentDTO.java
@@ -0,0 +1,30 @@
+package ru.tubryansk.tdms.dto;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class StudentDTO {
+ private Integer id;
+ private Boolean form;
+ private Integer protectionOrder;
+ private String magistracy;
+ private Boolean digitalFormatPresent;
+ private Integer markComment;
+ private Integer markPractice;
+ private String predefenceComment;
+ private String normalControl;
+ private Integer antiPlagiarism;
+ private String note;
+ private Boolean recordBookReturned;
+ private String work;
+ private Integer userId;
+ private Integer diplomaTopicId;
+ private Integer mentorUserId;
+ private Integer groupId;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/dto/UserDTO.java b/src/main/java/ru/tubryansk/tdms/dto/UserDTO.java
new file mode 100644
index 0000000..a865dde
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/dto/UserDTO.java
@@ -0,0 +1,26 @@
+package ru.tubryansk.tdms.dto;
+
+
+import jakarta.persistence.Column;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserDTO {
+ private Integer id;
+ private String login;
+ private String password;
+ private String fullName;
+ private String mail;
+ private String numberPhone;
+ private ZonedDateTime createAt;
+ private ZonedDateTime updateAt;
+ List roleId;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/entity/DiplomaTopic.java b/src/main/java/ru/tubryansk/tdms/entity/DiplomaTopic.java
new file mode 100644
index 0000000..0a57e59
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/entity/DiplomaTopic.java
@@ -0,0 +1,24 @@
+package ru.tubryansk.tdms.entity;
+
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "diploma_topic", schema = "vkr")
+public class DiplomaTopic {
+ @Id
+ @Column(name = "id")
+ @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ private Integer id;
+ @Column(name = "name", nullable = false)
+ private String name;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/entity/Group.java b/src/main/java/ru/tubryansk/tdms/entity/Group.java
new file mode 100644
index 0000000..cefd4c9
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/entity/Group.java
@@ -0,0 +1,27 @@
+package ru.tubryansk.tdms.entity;
+
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "group", schema = "vkr")
+public class Group {
+ @Id
+ @Column(name = "id")
+ @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ private Integer id;
+ @Column(name = "name", nullable = false)
+ private String name;
+ @ManyToOne()
+ @JoinColumn(name = "principal_user_id", nullable = false)
+ private User principalUser;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/entity/Role.java b/src/main/java/ru/tubryansk/tdms/entity/Role.java
new file mode 100644
index 0000000..397ed7d
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/entity/Role.java
@@ -0,0 +1,24 @@
+package ru.tubryansk.tdms.entity;
+
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "role", schema = "vkr")
+public class Role {
+ @Id
+ @Column(name = "id")
+ @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ private Integer id;
+ @Column(name = "name", nullable = false)
+ private String name;
+}
diff --git a/src/main/java/ru/tubryansk/tdms/entity/Student.java b/src/main/java/ru/tubryansk/tdms/entity/Student.java
new file mode 100644
index 0000000..158d116
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/entity/Student.java
@@ -0,0 +1,53 @@
+package ru.tubryansk.tdms.entity;
+
+
+import jakarta.persistence.*;
+import lombok.Data;
+
+
+@Data
+@Entity
+@Table(name = "student", schema = "vkr")
+public class Student {
+ @Id
+ @Column(name = "id")
+ @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ private Integer id;
+ @Column(name = "form")
+ private Boolean form;
+ @Column(name = "protection_order" , nullable = false)
+ private Integer protectionOrder;
+ @Column(name = "magistracy" )
+ private String magistracy;
+ @Column(name = "digital_format_present")
+ private Boolean digitalFormatPresent;
+ @Column(name = "mark_comment")
+ private Integer markComment;
+ @Column(name = "mark_practice")
+ private Integer markPractice;
+ @Column(name = "predefence_comment")
+ private String predefenceComment;
+ @Column(name = "normal_control")
+ private String normalControl;
+ @Column(name = "anti_plagiarism")
+ private Integer antiPlagiarism;
+ @Column(name = "note")
+ private String note;
+ @Column(name = "record_book_returned")
+ private Boolean recordBookReturned;
+ @Column(name = "work")
+ private String work;
+ @OneToOne
+ @JoinColumn(name = "user_id", nullable = false)
+ private User user;
+ @ManyToOne
+ @JoinColumn(name = "diploma_topic_id", nullable = false)
+ private DiplomaTopic diplomaTopic;
+ @ManyToOne
+ @JoinColumn(name = "mentor_user_id", nullable = false)
+ private User mentorUser;
+ @ManyToOne
+ @JoinColumn(name = "group_id", nullable = false)
+ private Group group;
+
+}
diff --git a/src/main/java/ru/tubryansk/tdms/entity/User.java b/src/main/java/ru/tubryansk/tdms/entity/User.java
new file mode 100644
index 0000000..2cb71a4
--- /dev/null
+++ b/src/main/java/ru/tubryansk/tdms/entity/User.java
@@ -0,0 +1,45 @@
+package ru.tubryansk.tdms.entity;
+
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+
+
+@Entity
+@Getter
+@Setter
+@NoArgsConstructor
+@AllArgsConstructor
+@Table(name = "user", schema = "vkr")
+public class User {
+ @Id
+ @Column(name = "id")
+ @GeneratedValue(strategy = GenerationType.SEQUENCE)
+ private Integer id;
+ @Column(name = "login", nullable = false, unique = true)
+ private String login;
+ @Column(name = "password", nullable = false)
+ private String password;
+ @Column(name = "full_name", nullable = false)
+ private String fullName;
+ @Column(name = "mail", nullable = false, unique = true)
+ private String mail;
+ @Column(name = "number_phone", nullable = false, unique = true)
+ private String numberPhone;
+ @Column(name = "create_at", nullable = false)
+ private ZonedDateTime createAt;
+ @Column(name = "update_at")
+ private ZonedDateTime updateAt;
+ @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+ @JoinTable(name = "user_role",schema = "vkr",
+ joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
+ inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName = "id"))
+ private List userLoyaltyLevels;
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index 5438ff1..216faa1 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -6,7 +6,6 @@ spring:
username: root
password: root
driver-class-name: org.postgresql.Driver
-
jpa:
open-in-view: false
show-sql: true
@@ -14,3 +13,9 @@ spring:
properties.hibernate:
pretty_print: true
format_sql: true
+ flyway:
+ user: root
+ password: root
+ schemas: vkr
+ locations: db.migration
+ url: jdbc:postgresql://localhost:5432/db
diff --git a/src/main/resources/db.migration/V00001__Create__role_table.sql b/src/main/resources/db.migration/V00001__Create__role_table.sql
new file mode 100644
index 0000000..6099afb
--- /dev/null
+++ b/src/main/resources/db.migration/V00001__Create__role_table.sql
@@ -0,0 +1,5 @@
+create table vkr.role
+(
+ id integer primary key generated by default as identity,
+ name text not null unique
+)
diff --git a/src/main/resources/db.migration/V00010__Create__user_table.sql b/src/main/resources/db.migration/V00010__Create__user_table.sql
new file mode 100644
index 0000000..7a69caf
--- /dev/null
+++ b/src/main/resources/db.migration/V00010__Create__user_table.sql
@@ -0,0 +1,12 @@
+create table vkr.user
+(
+ id integer primary key generated by default as identity,
+ login text not null unique,
+ password text not null,
+ full_name text not null,
+ mail text not null unique,
+ number_phone text not null unique,
+ create_at timestamp(6) with time zone not null,
+ update_at timestamp(6) with time zone
+
+)
diff --git a/src/main/resources/db.migration/V00020__Create__user_role_table.sql b/src/main/resources/db.migration/V00020__Create__user_role_table.sql
new file mode 100644
index 0000000..a4e5da3
--- /dev/null
+++ b/src/main/resources/db.migration/V00020__Create__user_role_table.sql
@@ -0,0 +1,9 @@
+create table vkr.user_role
+(
+ user_id integer not null,
+ role_id integer not null,
+ foreign key (user_id) references vkr.user (id)
+ on delete cascade,
+ foreign key (role_id) references vkr.role (id)
+ on delete cascade
+)
diff --git a/src/main/resources/db.migration/V00030__Create__diploma_topic_table.sql b/src/main/resources/db.migration/V00030__Create__diploma_topic_table.sql
new file mode 100644
index 0000000..03662da
--- /dev/null
+++ b/src/main/resources/db.migration/V00030__Create__diploma_topic_table.sql
@@ -0,0 +1,5 @@
+create table vkr.diploma_topic
+(
+ id integer primary key generated by default as identity,
+ name text not null unique
+)
diff --git a/src/main/resources/db.migration/V00040__Create__group_table.sql b/src/main/resources/db.migration/V00040__Create__group_table.sql
new file mode 100644
index 0000000..0d02d27
--- /dev/null
+++ b/src/main/resources/db.migration/V00040__Create__group_table.sql
@@ -0,0 +1,9 @@
+create table vkr.group
+(
+ id integer primary key generated by default as identity,
+ name text not null unique,
+ principal_user_id integer not null,
+ foreign key (principal_user_id) references vkr.user (id)
+ on delete cascade
+
+)
diff --git a/src/main/resources/db.migration/V00050__Create__student_table.sql b/src/main/resources/db.migration/V00050__Create__student_table.sql
new file mode 100644
index 0000000..73b6224
--- /dev/null
+++ b/src/main/resources/db.migration/V00050__Create__student_table.sql
@@ -0,0 +1,24 @@
+create table vkr.student
+(
+ id integer primary key generated by default as identity,
+ form boolean,
+ protection_order integer not null,
+ magistracy text,
+ digital_format_present boolean,
+ mark_comment integer,
+ mark_practice integer,
+ predefence_comment text,
+ normal_control text,
+ anti_plagiarism int,
+ note text,
+ record_book_returned boolean,
+ work text,
+ user_id integer not null,
+ diploma_topic_id integer not null,
+ mentor_user_id integer not null,
+ group_id integer not null,
+ foreign key (user_id) references vkr.user (id) on delete cascade,
+ foreign key (diploma_topic_id) references vkr.diploma_topic (id) on delete cascade,
+ foreign key (mentor_user_id) references vkr.user (id) on delete cascade,
+ foreign key (group_id) references vkr.group (id) on delete cascade
+)