diff --git a/back-skeleton/initdb/1_TABLES.sql b/back-skeleton/initdb/1_TABLES.sql index 41a112f00f367c34f469e63b2c04f61036405f9d..a71ee28ad95b60a4cbd4df61229f60158cf6363b 100644 --- a/back-skeleton/initdb/1_TABLES.sql +++ b/back-skeleton/initdb/1_TABLES.sql @@ -4,7 +4,8 @@ create table students first_name TEXT not null, last_name TEXT not null, birthdate date null, - major_id int null + major_id int null, + image bytea null ); create table majors diff --git a/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql b/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql index 8cc78f609f6c7767f00c7b8015519ea10cb3eae5..ae5925afbdbdd1ba3f9bb0a635c2fc7bfcd1d9e5 100644 --- a/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql +++ b/back-skeleton/initdb/2_DEFAULT_ENTRIES.sql @@ -1,6 +1,6 @@ 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 students (id, first_name, last_name, birthdate, major_id, image) VALUES (1, 'Paul', 'Harrohide', '2002-06-15', 1, null); 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/src/main/java/com/takima/backskeleton/DTO/StudentDto.java b/back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentDto.java new file mode 100644 index 0000000000000000000000000000000000000000..f92a77828934868723bc4a490c0d8938260006c9 --- /dev/null +++ b/back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentDto.java @@ -0,0 +1,21 @@ +package com.takima.backskeleton.DTO; + +import com.takima.backskeleton.models.Course; +import com.takima.backskeleton.models.Major; +import com.takima.backskeleton.models.Student; +import lombok.Builder; +import lombok.Getter; +import org.springframework.web.multipart.MultipartFile; + +import java.time.Instant; +import java.util.List; +@Builder +@Getter +public class StudentDto { + private String firstName; + private String lastName; + private Instant birthdate; + private List<Course> courses; + private Major major; + private MultipartFile image; +} diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentMapper.java b/back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..f2f8aab8bbdbe4cb3fc66a2e61fc225785ad0cd6 --- /dev/null +++ b/back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentMapper.java @@ -0,0 +1,29 @@ +package com.takima.backskeleton.DTO; + +import com.takima.backskeleton.models.Student; + +import java.io.IOException; + +public class StudentMapper { + public static Student fromDto(StudentDto dto, Long id) throws IOException { + return new Student.Builder() + .id(id) + .firstName(dto.getFirstName()) + .lastName(dto.getLastName()) + .birthdate(dto.getBirthdate()) + .courses(dto.getCourses()) + .major(dto.getMajor()) + .image(dto.getImage().isEmpty() ? dto.getImage().getBytes() : null) + .build(); + } + + public static StudentDto toDto (Student student){ + return StudentDto.builder() + .firstName(student.getFirstName()) + .lastName(student.getLastName()) + .birthdate(student.getBirthdate()) + .courses(student.getCourses()) + .major(student.getMajor()) + .build(); + } +} diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java index f82a41cedae018c6e0be7afa2f593530d65d4f07..91fac9fce148445704a630ac8a0dafa851e3ded6 100644 --- a/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java +++ b/back-skeleton/src/main/java/com/takima/backskeleton/controllers/StudentController.java @@ -1,5 +1,6 @@ package com.takima.backskeleton.controllers; +import com.takima.backskeleton.DTO.StudentDto; import com.takima.backskeleton.models.Student; import com.takima.backskeleton.services.StudentService; import lombok.RequiredArgsConstructor; @@ -27,7 +28,12 @@ public class StudentController { } @PostMapping("") - public void addStudent(@RequestBody Student student) { - studentService.addStudent(student); + public void addStudent(@RequestBody StudentDto studentDto) { + studentService.addStudent(studentDto); + } + + @PostMapping("/{id}") + public void updateStudent(@RequestBody StudentDto studentDto, @PathVariable Long id) { + studentService.updateStudent(studentDto, id); } } 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 index 7193fb907d30ffe27ba9ad925273f98447c05851..894e4ec00a7ec6e93d63d42ab3c526f5725c9a5c 100644 --- a/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java +++ b/back-skeleton/src/main/java/com/takima/backskeleton/models/Student.java @@ -27,6 +27,8 @@ public class Student { @ManyToOne() @JoinColumn(name = "major_id") private Major major; + @Column(name = "image") + private byte[] image; private Student(Builder builder) { this.id = builder.id; @@ -35,20 +37,23 @@ public class Student { this.birthdate = builder.birthdate; this.courses = builder.courses; this.major = builder.major; + this.image = builder.image; } - public Student(){ + public Student() { } public static class Builder { - private final Long id; + private Long id; private String firstName; private String lastName; private Instant birthdate; private List<Course> courses; private Major major; + private byte[] image; - public Builder(Long id) { + public Builder id (Long id) { this.id = id; + return this; } public Builder firstName(String firstName) { @@ -71,6 +76,10 @@ public class Student { this.birthdate = birthdate; return this; } + public Builder image(byte[] image) { + this.image = image; + return this; + } public Student build() { return new Student(this); diff --git a/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java b/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java index e63d921b3a4e79fff3a9256b029a31f8f3acbfb8..21cb0d1fe765562d8fd54a7bbd22889634fe3e8c 100644 --- a/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java +++ b/back-skeleton/src/main/java/com/takima/backskeleton/services/StudentService.java @@ -1,12 +1,16 @@ package com.takima.backskeleton.services; import com.takima.backskeleton.DAO.StudentDao; +import com.takima.backskeleton.DTO.StudentDto; +import com.takima.backskeleton.DTO.StudentMapper; import com.takima.backskeleton.models.Student; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import java.util.NoSuchElementException; @Component @RequiredArgsConstructor @@ -24,9 +28,26 @@ public class StudentService { studentDao.deleteById(id); } - public void addStudent(Student student) { + public void addStudent(StudentDto studentDto) { + Student student; + try { + student = StudentMapper.fromDto(studentDto, null); + } catch (IOException e) { + throw new RuntimeException("Error with Student image", e); + } studentDao.save(student); + } + public void updateStudent(StudentDto studentDto, Long id) { + studentDao.findById(id) + .orElseThrow(() -> new NoSuchElementException("Student doesn't exist")); + Student student; + try { + student = StudentMapper.fromDto(studentDto, id); + } catch (IOException e) { + throw new RuntimeException("Error with Student image", e); + } + studentDao.save(student); } public List<Student> searchByMajorAndCourse(int majorId, int courseId) {