diff --git a/pom.xml b/pom.xml index 5ff5428..09e6d10 100644 --- a/pom.xml +++ b/pom.xml @@ -30,12 +30,12 @@ org.liquibase liquibase-core ${liquibase.version} - + - org.liquibase - liquibase-maven-plugin - ${liquibase.version} - + org.liquibase + liquibase-maven-plugin + ${liquibase.version} + mysql mysql-connector-java @@ -61,13 +61,13 @@ h2 test + jakarta.validation jakarta.validation-api 2.0.2 - - + diff --git a/src/main/java/com/project/carsharingapp/model/Role.java b/src/main/java/com/project/carsharingapp/model/Role.java new file mode 100644 index 0000000..cd14e93 --- /dev/null +++ b/src/main/java/com/project/carsharingapp/model/Role.java @@ -0,0 +1,25 @@ +package com.project.carsharingapp.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; + +@Entity +@Setter +@Getter +@Table(name = "roles") +public class Role { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "name", nullable = false, unique = true) + @Enumerated(EnumType.STRING) + private RoleName roleName; +} diff --git a/src/main/java/com/project/carsharingapp/model/RoleName.java b/src/main/java/com/project/carsharingapp/model/RoleName.java new file mode 100644 index 0000000..ea6a3c7 --- /dev/null +++ b/src/main/java/com/project/carsharingapp/model/RoleName.java @@ -0,0 +1,6 @@ +package com.project.carsharingapp.model; + +public enum RoleName { + MANAGER, + CUSTOMER +} diff --git a/src/main/java/com/project/carsharingapp/model/User.java b/src/main/java/com/project/carsharingapp/model/User.java new file mode 100644 index 0000000..d11fa7b --- /dev/null +++ b/src/main/java/com/project/carsharingapp/model/User.java @@ -0,0 +1,46 @@ +package com.project.carsharingapp.model; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.JoinTable; +import jakarta.persistence.ManyToMany; +import jakarta.persistence.Table; +import java.util.HashSet; +import java.util.Set; +import lombok.Getter; +import lombok.Setter; +import org.hibernate.annotations.SQLDelete; +import org.hibernate.annotations.Where; + +@Entity +@Setter +@Getter +@SQLDelete(sql = "UPDATE users SET is_deleted = true WHERE id =?") +@Where(clause = "is_deleted=false") +@Table(name = "users") +public class User { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(nullable = false, unique = true) + private String email; + @Column(nullable = false) + private String firstName; + @Column(nullable = false) + private String lastName; + @Column(nullable = false) + private String password; + private Long telegramChatId; + @Column(nullable = false) + @ManyToMany + @JoinTable(name = "user_roles", + joinColumns = @JoinColumn(name = "user_id"), + inverseJoinColumns = @JoinColumn(name = "role_id")) + private Set roles = new HashSet<>(); + @Column(name = "is_deleted",nullable = false) + private boolean isDeleted = false; +} diff --git a/src/main/java/com/project/carsharingapp/repository/RoleRepository.java b/src/main/java/com/project/carsharingapp/repository/RoleRepository.java new file mode 100644 index 0000000..a12122f --- /dev/null +++ b/src/main/java/com/project/carsharingapp/repository/RoleRepository.java @@ -0,0 +1,7 @@ +package com.project.carsharingapp.repository; + +import com.project.carsharingapp.model.Role; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RoleRepository extends JpaRepository { +} diff --git a/src/main/java/com/project/carsharingapp/repository/UserRepository.java b/src/main/java/com/project/carsharingapp/repository/UserRepository.java new file mode 100644 index 0000000..edbbffc --- /dev/null +++ b/src/main/java/com/project/carsharingapp/repository/UserRepository.java @@ -0,0 +1,7 @@ +package com.project.carsharingapp.repository; + +import com.project.carsharingapp.model.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository { +} diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 2532435..eb0b019 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,8 @@ -#spring.datasource.url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC -#spring.datasource.username=root -#spring.datasource.password=anton7570857 -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC +spring.datasource.username=root +spring.datasource.password=gjujlf123$_0 +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + server.servlet.context-path=/api spring.jpa.hibernate.ddl-auto=validate diff --git a/src/main/resources/db/changelog/changes/create-roles-table.yaml b/src/main/resources/db/changelog/changes/create-roles-table.yaml new file mode 100644 index 0000000..5438ef8 --- /dev/null +++ b/src/main/resources/db/changelog/changes/create-roles-table.yaml @@ -0,0 +1,21 @@ +databaseChangeLog: + - changeSet: + id: create-roles-table + author: osa + changes: + - createTable: + tableName: roles + columns: + - column: + name: id + type: bigint + autoIncrement: true + constraints: + primaryKey: true + nullable: false + - column: + name: name + type: varchar(255) + constraints: + unique: true + nullable: false diff --git a/src/main/resources/db/changelog/changes/create-user-roles-table.yaml b/src/main/resources/db/changelog/changes/create-user-roles-table.yaml new file mode 100644 index 0000000..dc5ca77 --- /dev/null +++ b/src/main/resources/db/changelog/changes/create-user-roles-table.yaml @@ -0,0 +1,24 @@ +databaseChangeLog: + - changeSet: + id: create-user-role-table + author: osa + changes: + - createTable: + tableName: user_roles + columns: + - column: + name: user_id + type: bigint + constraints: + primaryKey: true + nullable: false + references: users(id) + foreignKeyName: fk_user_roles_user_id + - column: + name: role_id + type: bigint + constraints: + primaryKey: true + nullable: false + references: roles(id) + foreignKeyName: fk_user_roles_role_id diff --git a/src/main/resources/db/changelog/changes/create-users-table.yaml b/src/main/resources/db/changelog/changes/create-users-table.yaml new file mode 100644 index 0000000..a5448f2 --- /dev/null +++ b/src/main/resources/db/changelog/changes/create-users-table.yaml @@ -0,0 +1,47 @@ +databaseChangeLog: + - changeSet: + id: create-users-table + author: osa + changes: + - createTable: + tableName: users + columns: + - column: + name: id + type: bigint + autoIncrement: true + constraints: + primaryKey: true + nullable: false + - column: + name: email + type: varchar(255) + constraints: + nullable: false + unique: true + - column: + name: first_name + type: varchar(255) + constraints: + nullable: false + - column: + name: last_name + type: varchar(255) + constraints: + nullable: false + - column: + name: password + type: varchar(255) + constraints: + nullable: false + - column: + name: telegram_chat_id + type: bigint + constraints: + nullable: false + - column: + name: is_deleted + type: boolean + defaultValueBoolean: false + constraints: + nullable: false diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml index 4866ca2..5665573 100644 --- a/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -1,3 +1,10 @@ databaseChangeLog: - include: file: db/changelog/changes/create-cars-table.yaml + - include: + file: db/changelog/changes/create-roles-table.yaml + - include: + file: /db/changelog/changes/create-users-table.yaml + - include: + file: /db/changelog/changes/create-user-roles-table.yaml + diff --git a/src/main/resources/liquibase.properties b/src/main/resources/liquibase.properties index 34f4355..75244f1 100644 --- a/src/main/resources/liquibase.properties +++ b/src/main/resources/liquibase.properties @@ -1,4 +1,4 @@ -#url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC -#username=root -#password=anton7570857 -#changeLogFile=/db/changelog/db.changelog-master.yaml +url=jdbc:mysql://localhost:3306/car_sharing_db?serverTimezone=UTC +username=root +password=gjujlf123$_0 +changeLogFile=/db.changelog/db.changelog-master.yaml