From 49785fbd51c64c51daec3533e9923c5042565840 Mon Sep 17 00:00:00 2001 From: Laurine <lenetlaurine@gmail.com> Date: Wed, 27 Sep 2023 11:29:25 +0200 Subject: [PATCH] add update student & image to student --- back-skeleton/initdb/1_TABLES.sql | 3 +- back-skeleton/initdb/2_DEFAULT_ENTRIES.sql | 2 +- .../takima/backskeleton/DTO/StudentDto.java | 21 ++++++++++++++ .../backskeleton/DTO/StudentMapper.java | 29 +++++++++++++++++++ .../controllers/StudentController.java | 10 +++++-- .../takima/backskeleton/models/Student.java | 15 ++++++++-- .../backskeleton/services/StudentService.java | 23 ++++++++++++++- 7 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentDto.java create mode 100644 back-skeleton/src/main/java/com/takima/backskeleton/DTO/StudentMapper.java diff --git a/back-skeleton/initdb/1_TABLES.sql b/back-skeleton/initdb/1_TABLES.sql index 41a112f..a71ee28 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 8cc78f6..ae5925a 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 0000000..f92a778 --- /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 0000000..f2f8aab --- /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 f82a41c..91fac9f 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 7193fb9..894e4ec 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 e63d921..21cb0d1 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) { -- GitLab