Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Database #1

Merged
merged 2 commits into from
Oct 23, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-security</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
Expand Down Expand Up @@ -73,6 +73,10 @@
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
26 changes: 26 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/Auditable.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.kdp.learn_vocabulary_kdp.entity;


import jakarta.persistence.Column;
import jakarta.persistence.EntityListeners;
import jakarta.persistence.MappedSuperclass;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import java.time.LocalDateTime;

@EntityListeners(AuditingEntityListener.class)
@MappedSuperclass
public abstract class Auditable {
@CreatedDate
@Column(name = "created_at", nullable = false, updatable = false)
protected LocalDateTime createdAt;

@LastModifiedDate
@Column(name = "updated_at")
protected LocalDateTime updatedAt;

@Column(name = "is_deleted")
private Boolean isDeleted;

}
36 changes: 36 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/Quizze.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;
import org.springframework.data.annotation.CreatedDate;

import java.time.LocalDateTime;

@Entity
@Table(name = "quizzes")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Quizze {
@Id
@UuidGenerator
@Column(name = "quizze_id")
private String id;

@Column(name = "total_questions")
private int totalQuestions;

@Column(name = "correct_answers")
private int correctAnswers;

@CreatedDate
@Column(name = "date_completed", nullable = false, updatable = false)
private LocalDateTime dateCompleted;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", insertable = false, updatable = false)
private User user;
}
24 changes: 24 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/Role.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

@Entity
@Table(name = "roles")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Role {
@Id
@UuidGenerator
@Column(name = "role_id")
private String id;

private String role;
}
37 changes: 37 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/Topic.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

import java.util.List;

@Entity
@Table(name = "topics")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Topic extends Auditable {
@Id
@UuidGenerator
@Column(name = "topic_id")
private String id;

private String name;

private String description;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", insertable = false, updatable = false)
private User user;

@ManyToMany
@JoinTable(
name = "topic_word",
joinColumns = @JoinColumn(name = "topic_id"),
inverseJoinColumns = @JoinColumn(name = "word_id")
)
private List<Word> words;
}
26 changes: 26 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/Type.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

import java.util.List;

@Entity
@Table(name = "types")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Type {
@Id
@UuidGenerator
@Column(name = "type_id")
private String id;

private String type;

@OneToMany(mappedBy = "type")
private List<WordType> wordTypes;
}
59 changes: 59 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

import java.util.List;

@Entity
@Table(name = "users")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class User extends Auditable {
@Id
@UuidGenerator
@Column(name = "user_id")
private String id;

@Column(name = "full_name")
private String fullName;

private String password;

private String email;

private String username;

private String avatar;

@ManyToOne
@JoinColumn(name = "role_id")
private Role role;

@Column(name = "is_blocked")
private Boolean isBlocked;

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
private List<Topic> topics;

@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "quizze_id")
private List<Quizze> quizzes;

@OneToMany(mappedBy = "user")
private List<UserWord> userWord;

@Transient
private String refreshToken;

@Transient
private String accessToken;

@Transient
private String expRefreshToken;
}
35 changes: 35 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/UserWord.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

import java.time.LocalDateTime;

@Entity
@Table(name = "user_word")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class UserWord {
@Id
@UuidGenerator
@Column(name = "user_word_id")
private String id;

@ManyToOne
@JoinColumn(name = "user_id")
private User user;

@ManyToOne
@JoinColumn(name = "word_id")
private Word word;

@Column(name = "updated_status_at")
private LocalDateTime updatedStatusAt;

@Column(name = "has_remembered")
private Boolean HasRemembered;
}
31 changes: 31 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/Word.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

import java.util.List;

@Entity
@Table(name = "words")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class Word extends Auditable {
@Id
@UuidGenerator
@Column(name = "word_id")
private String id;

private String word;

private String pronounce;

@OneToMany(mappedBy = "word")
private List<UserWord> userWord;

@OneToMany(mappedBy = "word")
private List<WordType> wordTypes;
}
31 changes: 31 additions & 0 deletions src/main/java/org/kdp/learn_vocabulary_kdp/entity/WordType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package org.kdp.learn_vocabulary_kdp.entity;

import jakarta.persistence.*;
import lombok.*;
import org.hibernate.annotations.UuidGenerator;

@Entity
@Table(name = "word_type")
@Builder
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class WordType {
@Id
@UuidGenerator
@Column(name = "word_type_id")
private String id;

@ManyToOne
@JoinColumn(name = "word_id")
private Word word;

@ManyToOne
@JoinColumn(name = "type_id")
private Type type;

private String definition;

private String description;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.kdp.learn_vocabulary_kdp.repository;

import org.kdp.learn_vocabulary_kdp.entity.Quizze;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface QuizzeRepository extends JpaRepository<Quizze, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.kdp.learn_vocabulary_kdp.repository;

import org.kdp.learn_vocabulary_kdp.entity.Topic;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TopicRepository extends JpaRepository<Topic, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package org.kdp.learn_vocabulary_kdp.repository;

import org.kdp.learn_vocabulary_kdp.entity.Type;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TypeRepository extends JpaRepository<Type, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package org.kdp.learn_vocabulary_kdp.repository;

import org.kdp.learn_vocabulary_kdp.entity.Word;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface WordRepository extends JpaRepository<Word, String> {

}
10 changes: 10 additions & 0 deletions src/main/resources/application.properties
Original file line number Diff line number Diff line change
@@ -1 +1,11 @@
spring.application.name=Learn_Vocabulary_KDP
server.port=9091
# Data source
spring.datasource.url=jdbc:mysql://localhost:6603/Vocabulary_KDP
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
# JPA
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
Loading