From bd1fa1c6e0f91c6191ed3b1c40a02ab517eec801 Mon Sep 17 00:00:00 2001 From: Laurine <lenetlaurine@gmail.com> Date: Mon, 11 Sep 2023 16:16:35 +0200 Subject: [PATCH] working database --- back-skeleton/initdb/1_TABLES.sql | 29 +++++++ back-skeleton/initdb/2_DEFAULT_ENTRIES.sql | 8 ++ back-skeleton/pom.xml | 7 ++ .../takima/backskeleton/models/Course.java | 19 +++++ .../com/takima/backskeleton/models/Major.java | 21 +++++ .../takima/backskeleton/models/Student.java | 80 +++++++++++++++++++ 6 files changed, 164 insertions(+) create mode 100644 back-skeleton/initdb/1_TABLES.sql create mode 100644 back-skeleton/initdb/2_DEFAULT_ENTRIES.sql create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java diff --git a/back-skeleton/initdb/1_TABLES.sql b/back-skeleton/initdb/1_TABLES.sql new file mode 100644 index 0000000..41a112f --- /dev/null +++ b/back-skeleton/initdb/1_TABLES.sql @@ -0,0 +1,29 @@ +create table students +( + id SERIAL PRIMARY KEY, + first_name TEXT not null, + last_name TEXT not null, + birthdate date null, + major_id int null +); + +create table majors +( + id SERIAL PRIMARY KEY, + name TEXT not null, + description TEXT not null +); + +create table courses +( + id SERIAL PRIMARY KEY, + name TEXT not null, + hours int not null +); + +create table student_course +( + id SERIAL PRIMARY KEY, + student_id int not null, + course_id int not null +); diff --git a/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql b/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql new file mode 100644 index 0000000..8cc78f6 --- /dev/null +++ b/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql @@ -0,0 +1,8 @@ +INSERT INTO majors (id, name, description) VALUES (1, 'MIN', 'Ouaiiis du code partout'); + +INSERT INTO students (id, first_name, last_name, birthdate, major_id) VALUES (1, 'Paul', 'Harrohide', '2002-06-15', 1); + +INSERT INTO courses (id, name, hours) VALUES (1, 'Java', 30); +INSERT INTO student_course (id, student_id, course_id) VALUES (1, 1, 1); + + diff --git a/back-skeleton/pom.xml b/back-skeleton/pom.xml index 9c08aa8..6621302 100644 --- a/back-skeleton/pom.xml +++ b/back-skeleton/pom.xml @@ -15,6 +15,7 @@ <description>Skeleton of an API project</description> <properties> <java.version>17</java.version> + <lombok.version>1.18.20</lombok.version> </properties> <dependencies> <dependency> @@ -36,6 +37,12 @@ <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <version>${lombok.version}</version> + <scope>provided</scope> + </dependency> </dependencies> <build> diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java new file mode 100644 index 0000000..a420a69 --- /dev/null +++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Course.java @@ -0,0 +1,19 @@ +package com.takima.backskeleton.models; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import lombok.Builder; +import lombok.NoArgsConstructor; + +@Entity(name = "courses") +@NoArgsConstructor +public class Course { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + private Integer hours; + +} diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java new file mode 100644 index 0000000..6224e27 --- /dev/null +++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Major.java @@ -0,0 +1,21 @@ +package com.takima.backskeleton.models; + +import jakarta.persistence.*; +import lombok.Builder; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Entity(name = "majors") +@NoArgsConstructor +public class Major { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + private String name; + private String description; + @OneToMany(mappedBy = "major") + private List<Student> students; + +} + diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java new file mode 100644 index 0000000..af85a47 --- /dev/null +++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java @@ -0,0 +1,80 @@ +package com.takima.backskeleton.models; + +import jakarta.persistence.*; + +import java.time.Instant; +import java.util.List; + +@Entity +@Table(name= "students") +public class Student { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @Column(name = "first_name") + private String firstName; + @Column(name = "last_name") + private String lastName; + private Instant birthdate; + @ManyToMany(mappedBy="student") + @JoinTable( + name = "student_course", + joinColumns = @JoinColumn(name = "student_id"), + inverseJoinColumns = @JoinColumn(name = "course_id")) + private List<Course> courses; + @ManyToOne() + @JoinColumn(name = "major_id") + private Major major; + + private Student(Builder builder) { + this.id = builder.id; + this.firstName = builder.firstName; + this.lastName = builder.lastName; + this.birthdate = builder.birthdate; + this.courses = builder.courses; + this.major = builder.major; + } + public Student(){ + } + + public static class Builder { + private final Long id; + private String firstName; + private String lastName; + private Instant birthdate; + private List<Course> courses; + private Major major; + + public Builder(Long id) { + this.id = id; + } + + public Builder firstName(String firstName) { + this.firstName = firstName; + return this; + } + public Builder lastName(String lastName) { + this.lastName = lastName; + return this; + } + public Builder courses(List<Course> courses) { + this.courses = courses; + return this; + } + public Builder major(Major major) { + this.major = major; + return this; + } + public Builder birthdate(Instant birthdate) { + this.birthdate = birthdate; + return this; + } + + public Student build() { + return new Student(this); + } + } + + + +} -- GitLab