diff --git a/back-skeleton/initdb/1_TABLES.sql b/back-skeleton/initdb/1_TABLES.sql new file mode 100644 index 0000000000000000000000000000000000000000..41a112f00f367c34f469e63b2c04f61036405f9d --- /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 0000000000000000000000000000000000000000..8cc78f609f6c7767f00c7b8015519ea10cb3eae5 --- /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 9c08aa8f2eb5604c9ee19a31340788fd4e4d7fe2..6621302882fbfa0a590f8822b56e2806c602417a 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 0000000000000000000000000000000000000000..a420a6951fd0eed71c043f84ec0732a0746f95fc --- /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 0000000000000000000000000000000000000000..6224e27fd4a751d23a6bb84fd9471d3c132ed616 --- /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 0000000000000000000000000000000000000000..af85a479e153a086545282eb9a47ea6f388bce4e --- /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); + } + } + + + +}