From 05cc1f0d652d7bd42f39cacec44ced649d753983 Mon Sep 17 00:00:00 2001 From: amine-mehdi <114956225+amine-mehdi@users.noreply.github.com> Date: Mon, 26 Dec 2022 02:35:50 +0100 Subject: [PATCH] commit1 --- .../controllers/GroupController.java | 246 +++++++++--------- .../controllers/StudentController.java | 178 +++++++------ .../studentsabsence/entities/Absence.java | 30 ++- .../tekup/studentsabsence/entities/Group.java | 34 ++- .../entities/GroupSubject.java | 25 +- .../entities/GroupSubjectKey.java | 12 +- .../studentsabsence/entities/Student.java | 44 +++- .../studentsabsence/entities/Subject.java | 22 +- .../repositories/GroupSubjectRepository.java | 8 +- .../services/impl/AbsenceServiceImp.java | 158 +++++------ .../services/impl/GroupSubjectServiceImp.java | 49 ++-- .../services/impl/ImageServiceImp.java | 34 +-- .../services/impl/StudentServiceImp.java | 69 ++--- .../services/impl/SubjectServiceImp.java | 74 +++--- 14 files changed, 530 insertions(+), 453 deletions(-) diff --git a/src/main/java/de/tekup/studentsabsence/controllers/GroupController.java b/src/main/java/de/tekup/studentsabsence/controllers/GroupController.java index b9cd3be..39f6781 100644 --- a/src/main/java/de/tekup/studentsabsence/controllers/GroupController.java +++ b/src/main/java/de/tekup/studentsabsence/controllers/GroupController.java @@ -1,6 +1,5 @@ package de.tekup.studentsabsence.controllers; - import de.tekup.studentsabsence.entities.Absence; import de.tekup.studentsabsence.entities.Group; import de.tekup.studentsabsence.entities.Student; @@ -24,123 +23,132 @@ @RequestMapping("/groups") @AllArgsConstructor public class GroupController { - private final GroupService groupService; - private final SubjectService subjectService; - private final GroupSubjectService groupSubjectService; - private final AbsenceService absenceService; - - @GetMapping({"", "/"}) - public String index(Model model) { - List groups = groupService.getAllGroups(); - model.addAttribute("groups", groups); - return "groups/index"; - } - - @GetMapping("/add") - public String addView(Model model) { - model.addAttribute("levels", LevelEnum.values()); - model.addAttribute("specialities", SpecialityEnum.values()); - model.addAttribute("group", new Group()); - return "groups/add"; - } - - @PostMapping("/add") - public String add(@Valid Group group, BindingResult bindingResult, Model model) { - if(bindingResult.hasErrors()) { - model.addAttribute("levels", LevelEnum.values()); - model.addAttribute("specialities", SpecialityEnum.values()); - return "groups/add"; - } - - groupService.addGroup(group); - return "redirect:/groups"; - } - - @GetMapping("/{id}/update") - public String updateView(@PathVariable long id, Model model) { - model.addAttribute("levels", LevelEnum.values()); - model.addAttribute("specialities", SpecialityEnum.values()); - model.addAttribute("group", groupService.getGroupById(id)); - return "groups/update"; - } - - @PostMapping("/{id}/update") - public String update(@PathVariable long id, @Valid Group group, BindingResult bindingResult, Model model) { - if(bindingResult.hasErrors()) { - model.addAttribute("levels", LevelEnum.values()); - model.addAttribute("specialities", SpecialityEnum.values()); - return "groups/update"; - } - groupService.updateGroup(group); - return "redirect:/groups"; - } - - @GetMapping("/{id}/delete") - public String delete(@PathVariable long id) { - groupService.deleteGroup(id); - return "redirect:/groups"; - } - - @GetMapping("/{id}/show") - public String show(@PathVariable long id, Model model) { - Group group = groupService.getGroupById(id); - - model.addAttribute("group", group); - model.addAttribute("groupSubjects",groupSubjectService.getSubjectsByGroupId(id)); - model.addAttribute("students",group.getStudents()); - model.addAttribute("absenceService", absenceService); - - group.getStudents().forEach(student -> { - - }); - - return "groups/show"; - } - - @GetMapping("/{id}/add-subject") - public String addSubjectView(Model model , @PathVariable Long id){ - model.addAttribute("groupSubjectHolder", new GroupSubjectHolder()); - model.addAttribute("group",groupService.getGroupById(id)); - model.addAttribute("subjects",subjectService.getAllSubjects()); - return "groups/add-subject"; - - } - - @PostMapping("/{id}/add-subject") - public String addSubject(@PathVariable Long id, @Valid GroupSubjectHolder groupSubjectHolder, BindingResult bindingResult, Model model){ - if(bindingResult.hasErrors()) { - model.addAttribute("group",groupService.getGroupById(id)); - model.addAttribute("subjects",subjectService.getAllSubjects()); - return "groups/add-subject"; - } - - Group group = groupService.getGroupById(id); - groupSubjectService.addSubjectToGroup(group, groupSubjectHolder.getSubject(), groupSubjectHolder.getHours()); - return "redirect:/groups/"+id+"/add-subject"; - } - - @GetMapping("/{gid}/subject/{sid}/delete") - public String deleteSubject(@PathVariable Long gid, @PathVariable Long sid){ - groupSubjectService.deleteSubjectFromGroup(gid, sid); - return "redirect:/groups/"+gid+"/show"; - } - - @GetMapping("/{id}/add-absences") - public String addAbsenceView(@PathVariable long id, Model model) { - Group group = groupService.getGroupById(id); - - model.addAttribute("group", group); - model.addAttribute("absence", new Absence()); - model.addAttribute("groupSubjects", groupSubjectService.getSubjectsByGroupId(id)); - model.addAttribute("students", group.getStudents()); - - return "groups/add-absences"; - } - - @PostMapping("/{id}/add-absences") - public String addAbsence(@PathVariable long id, @Valid Absence absence, BindingResult bindingResult, @RequestParam(value = "students", required = false) List students, Model model) { - //TODO Complete the body of this method - return "redirect:/groups/"+id+"/add-absences"; - } + private final GroupService groupService; + private final SubjectService subjectService; + private final GroupSubjectService groupSubjectService; + private final AbsenceService absenceService; + + @GetMapping({ "", "/" }) + public String index(Model model) { + List groups = groupService.getAllGroups(); + model.addAttribute("groups", groups); + return "groups/index"; + } + + @GetMapping("/add") + public String addView(Model model) { + model.addAttribute("levels", LevelEnum.values()); + model.addAttribute("specialities", SpecialityEnum.values()); + model.addAttribute("group", new Group()); + return "groups/add"; + } + + @PostMapping("/add") + public String add(@Valid Group group, BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("levels", LevelEnum.values()); + model.addAttribute("specialities", SpecialityEnum.values()); + return "groups/add"; + } + + groupService.addGroup(group); + return "redirect:/groups"; + } + + @GetMapping("/{id}/update") + public String updateView(@PathVariable long id, Model model) { + model.addAttribute("levels", LevelEnum.values()); + model.addAttribute("specialities", SpecialityEnum.values()); + model.addAttribute("group", groupService.getGroupById(id)); + return "groups/update"; + } + + @PostMapping("/{id}/update") + public String update(@PathVariable long id, @Valid Group group, BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("levels", LevelEnum.values()); + model.addAttribute("specialities", SpecialityEnum.values()); + return "groups/update"; + } + groupService.updateGroup(group); + return "redirect:/groups"; + } + + @GetMapping("/{id}/delete") + public String delete(@PathVariable long id) { + groupService.deleteGroup(id); + return "redirect:/groups"; + } + + @GetMapping("/{id}/show") + public String show(@PathVariable long id, Model model) { + Group group = groupService.getGroupById(id); + + model.addAttribute("group", group); + model.addAttribute("groupSubjects", groupSubjectService.getSubjectsByGroupId(id)); + model.addAttribute("students", group.getStudents()); + model.addAttribute("absenceService", absenceService); + + group.getStudents().forEach(student -> { + + }); + + return "groups/show"; + } + + @GetMapping("/{id}/add-subject") + public String addSubjectView(Model model, @PathVariable Long id) { + model.addAttribute("groupSubjectHolder", new GroupSubjectHolder()); + model.addAttribute("group", groupService.getGroupById(id)); + model.addAttribute("subjects", subjectService.getAllSubjects()); + return "groups/add-subject"; + + } + + @PostMapping("/{id}/add-subject") + public String addSubject(@PathVariable Long id, @Valid GroupSubjectHolder groupSubjectHolder, + BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("group", groupService.getGroupById(id)); + model.addAttribute("subjects", subjectService.getAllSubjects()); + return "groups/add-subject"; + } + + Group group = groupService.getGroupById(id); + groupSubjectService.addSubjectToGroup(group, groupSubjectHolder.getSubject(), groupSubjectHolder.getHours()); + return "redirect:/groups/" + id + "/add-subject"; + } + + @GetMapping("/{gid}/subject/{sid}/delete") + public String deleteSubject(@PathVariable Long gid, @PathVariable Long sid) { + groupSubjectService.deleteSubjectFromGroup(gid, sid); + return "redirect:/groups/" + gid + "/show"; + } + + @GetMapping("/{id}/add-absences") + public String addAbsenceView(@PathVariable long id, Model model) { + Group group = groupService.getGroupById(id); + + model.addAttribute("group", group); + model.addAttribute("absence", new Absence()); + model.addAttribute("groupSubjects", groupSubjectService.getSubjectsByGroupId(id)); + model.addAttribute("students", group.getStudents()); + + return "groups/add-absences"; + } + + @PostMapping("/{id}/add-absences") + public String addAbsence(@PathVariable long id, @Valid Absence absence, BindingResult bindingResult, + @RequestParam(value = "students", required = false) List students, Model model) { + // TODO Complete the body of this method + if (bindingResult.hasErrors()) { + model.addAttribute("group", groupService.getGroupById(id)); + model.addAttribute("subjects", subjectService.getAllSubjects()); + model.addAttribute("students", students); + return "groups/add-absences"; + } + absenceService.addAbsence(absence); + return "redirect:/groups/" + id + "/add-absences"; + } } diff --git a/src/main/java/de/tekup/studentsabsence/controllers/StudentController.java b/src/main/java/de/tekup/studentsabsence/controllers/StudentController.java index 4a18070..a6f3cb6 100644 --- a/src/main/java/de/tekup/studentsabsence/controllers/StudentController.java +++ b/src/main/java/de/tekup/studentsabsence/controllers/StudentController.java @@ -10,7 +10,10 @@ import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -24,88 +27,95 @@ @AllArgsConstructor @RequestMapping("/students") public class StudentController { - private final StudentService studentService; - private final GroupService groupService; - private final ImageService imageService; - - @GetMapping({"", "/"}) - public String index(Model model) { - List students = studentService.getAllStudents(); - model.addAttribute("students", students); - return "students/index"; - } - - @GetMapping("/add") - public String addView(Model model) { - model.addAttribute("student", new Student()); - model.addAttribute("groups", groupService.getAllGroups()); - return "students/add"; - } - - @PostMapping("/add") - public String add(@Valid Student student, BindingResult bindingResult, Model model) { - if(bindingResult.hasErrors()) { - model.addAttribute("groups", groupService.getAllGroups()); - return "students/add"; - } - - studentService.addStudent(student); - return "redirect:/students"; - } - - @GetMapping("/{sid}/update") - public String updateView(@PathVariable Long sid, Model model) { - model.addAttribute("student", studentService.getStudentBySid(sid)); - model.addAttribute("groups", groupService.getAllGroups()); - return "students/update"; - } - - @PostMapping("/{sid}/update") - public String update(@PathVariable Long sid, @Valid Student student, BindingResult bindingResult, Model model) { - if(bindingResult.hasErrors()) { - model.addAttribute("groups", groupService.getAllGroups()); - return "students/update"; - } - - studentService.updateStudent(student); - return "redirect:/students"; - } - - @GetMapping("/{sid}/delete") - public String delete(@PathVariable Long sid) { - studentService.deleteStudent(sid); - return "redirect:/students"; - } - - @GetMapping("/{sid}/show") - public String show(Model model, @PathVariable Long sid) { - model.addAttribute("student", studentService.getStudentBySid(sid)); - return "students/show"; - } - - @GetMapping("/{sid}/add-image") - public String addImageView(@PathVariable Long sid, Model model) { - model.addAttribute("student", studentService.getStudentBySid(sid)); - return "students/add-image"; - } - - @PostMapping("/{sid}/add-image") - //TODO complete the parameters of this method - public String addImage() { - //TODO complete the body of this method - return "redirect:/students"; - } - - @RequestMapping(value = "/{sid}/display-image") - public void getStudentPhoto(HttpServletResponse response, @PathVariable("sid") long sid) throws Exception { - Student student = studentService.getStudentBySid(sid); - Image image = student.getImage(); - - if(image != null) { - response.setContentType(image.getFileType()); - InputStream inputStream = new ByteArrayInputStream(image.getData()); - IOUtils.copy(inputStream, response.getOutputStream()); - } - } + private final StudentService studentService; + private final GroupService groupService; + private final ImageService imageService; + + @GetMapping({ "", "/" }) + public String index(Model model) { + List students = studentService.getAllStudents(); + model.addAttribute("students", students); + return "students/index"; + } + + @GetMapping("/add") + public String addView(Model model) { + model.addAttribute("student", new Student()); + model.addAttribute("groups", groupService.getAllGroups()); + return "students/add"; + } + + @PostMapping("/add") + public String add(@Valid Student student, BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("groups", groupService.getAllGroups()); + return "students/add"; + } + + studentService.addStudent(student); + return "redirect:/students"; + } + + @GetMapping("/{sid}/update") + public String updateView(@PathVariable Long sid, Model model) { + model.addAttribute("student", studentService.getStudentBySid(sid)); + model.addAttribute("groups", groupService.getAllGroups()); + return "students/update"; + } + + @PostMapping("/{sid}/update") + public String update(@PathVariable Long sid, @Valid Student student, BindingResult bindingResult, Model model) { + if (bindingResult.hasErrors()) { + model.addAttribute("groups", groupService.getAllGroups()); + return "students/update"; + } + + studentService.updateStudent(student); + return "redirect:/students"; + } + + @GetMapping("/{sid}/delete") + public String delete(@PathVariable Long sid) { + studentService.deleteStudent(sid); + return "redirect:/students"; + } + + @GetMapping("/{sid}/show") + public String show(Model model, @PathVariable Long sid) { + model.addAttribute("student", studentService.getStudentBySid(sid)); + return "students/show"; + } + + @GetMapping("/{sid}/add-image") + public String addImageView(@PathVariable Long sid, Model model) { + model.addAttribute("student", studentService.getStudentBySid(sid)); + return "students/add-image"; + } + + @PostMapping("/{sid}/add-image") + // TODO complete the parameters of this method + public String addImage(@PathVariable Long sid, MultipartFile file) { + Student student = studentService.getStudentBySid(sid); + if (student != null) { + try { + student.setImage(imageService.addImage(file)); + } catch (IOException e) { + System.out.println(e); + } + } + return "redirect:/students"; + } + + @GetMapping(value = "/{sid}/display-image") + public void getStudentPhoto(HttpServletResponse response, @PathVariable("sid") long sid) throws Exception { + Student student = studentService.getStudentBySid(sid); + Image image = student.getImage(); + + if (image != null) { + response.setContentType(image.getFileType()); + InputStream inputStream = new ByteArrayInputStream(image.getData()); + IOUtils.copy(inputStream, response.getOutputStream()); + } + } } diff --git a/src/main/java/de/tekup/studentsabsence/entities/Absence.java b/src/main/java/de/tekup/studentsabsence/entities/Absence.java index 6c6c0a9..a1afb88 100644 --- a/src/main/java/de/tekup/studentsabsence/entities/Absence.java +++ b/src/main/java/de/tekup/studentsabsence/entities/Absence.java @@ -17,17 +17,25 @@ @AllArgsConstructor @NoArgsConstructor public class Absence implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @NotNull(message = "Start date is required") - @Past(message = "Should be a date in the past") - @DateTimeFormat(pattern = "dd-MM-yyyy HH:mm") - private LocalDateTime startDate; - @NotNull(message = "Hours is required") - @Positive(message = "Should be positive") - private float hours; - //TODO Complete Relations with other entities + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @NotNull(message = "Start date is required") + @Past(message = "Should be a date in the past") + @DateTimeFormat(pattern = "dd-MM-yyyy HH:mm") + private LocalDateTime startDate; + @NotNull(message = "Hours is required") + @Positive(message = "Should be positive") + private float hours; + // TODO Complete Relations with other entities + + @ManyToOne + private Student student; + + @OneToOne + private Subject subject; } diff --git a/src/main/java/de/tekup/studentsabsence/entities/Group.java b/src/main/java/de/tekup/studentsabsence/entities/Group.java index 1c4121b..58eb185 100644 --- a/src/main/java/de/tekup/studentsabsence/entities/Group.java +++ b/src/main/java/de/tekup/studentsabsence/entities/Group.java @@ -10,6 +10,8 @@ import javax.persistence.*; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; +import java.util.List; + @Entity @Data @ToString(exclude = "students") @@ -17,20 +19,24 @@ @NoArgsConstructor @Table(name = "_group") public class Group { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @NotBlank(message = "Name is required") - private String name; - @NotBlank(message = "Label is required") - private String label; - @Enumerated(EnumType.STRING) - private LevelEnum level; - @NotNull(message = "Speciality is required") - @Enumerated(EnumType.STRING) - private SpecialityEnum speciality; - //TODO Complete Relations with other entities - + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @NotBlank(message = "Name is required") + private String name; + @NotBlank(message = "Label is required") + private String label; + @Enumerated(EnumType.STRING) + private LevelEnum level; + @NotNull(message = "Speciality is required") + @Enumerated(EnumType.STRING) + private SpecialityEnum speciality; + // TODO Complete Relations with other entities + @OneToMany(mappedBy = "group") + private List students; + + @OneToMany(mappedBy = "subject") + private List groupSubjects; } diff --git a/src/main/java/de/tekup/studentsabsence/entities/GroupSubject.java b/src/main/java/de/tekup/studentsabsence/entities/GroupSubject.java index 71419b5..65b2010 100644 --- a/src/main/java/de/tekup/studentsabsence/entities/GroupSubject.java +++ b/src/main/java/de/tekup/studentsabsence/entities/GroupSubject.java @@ -12,18 +12,21 @@ @AllArgsConstructor @NoArgsConstructor public class GroupSubject implements Serializable { - @EmbeddedId - private GroupSubjectKey id; - @ManyToOne - @MapsId("group_id") - @JoinColumn(name = "group_id") - private Group group; + private static final long serialVersionUID = 1L; - @ManyToOne - @MapsId("subject_id") - @JoinColumn(name = "subject_id") - private Subject subject; + @EmbeddedId + private GroupSubjectKey id; - private float hours; + @ManyToOne + @MapsId("group_id") + @JoinColumn(name = "group_id") + private Group group; + + @ManyToOne + @MapsId("subject_id") + @JoinColumn(name = "subject_id") + private Subject subject; + + private float hours; } diff --git a/src/main/java/de/tekup/studentsabsence/entities/GroupSubjectKey.java b/src/main/java/de/tekup/studentsabsence/entities/GroupSubjectKey.java index d994cea..2342be2 100644 --- a/src/main/java/de/tekup/studentsabsence/entities/GroupSubjectKey.java +++ b/src/main/java/de/tekup/studentsabsence/entities/GroupSubjectKey.java @@ -7,13 +7,17 @@ import javax.persistence.Column; import javax.persistence.Embeddable; import java.io.Serializable; + @Embeddable @Data @AllArgsConstructor @NoArgsConstructor public class GroupSubjectKey implements Serializable { - @Column(name = "group_id") - private Long groupId ; - @Column(name = "subject_id") - private Long subjectId; + + private static final long serialVersionUID = 1L; + + @Column(name = "group_id") + private Long groupId; + @Column(name = "subject_id") + private Long subjectId; } diff --git a/src/main/java/de/tekup/studentsabsence/entities/Student.java b/src/main/java/de/tekup/studentsabsence/entities/Student.java index 9ffc61f..0795e54 100644 --- a/src/main/java/de/tekup/studentsabsence/entities/Student.java +++ b/src/main/java/de/tekup/studentsabsence/entities/Student.java @@ -7,29 +7,49 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.persistence.*; -import javax.validation.constraints.*; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; import java.io.Serializable; import java.time.LocalDate; +import java.util.List; + @Entity @Data @AllArgsConstructor @NoArgsConstructor -@ToString(exclude = {"image","group","absences"}) +@ToString(exclude = { "image", "group", "absences" }) public class Student implements Serializable { - //TODO Complete Validations of fields + // TODO Complete Validations of fields + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long sid; + + @NotBlank(message = "FirstName is required") + private String firstName; + + @NotBlank(message = "LastName is required") + private String lastName; + + @NotBlank(message = "Email is required") + @Email(message = "Email be a valid") + private String email; + @NotBlank(message = "Phone is required") + private String phone; + @DateTimeFormat(pattern = "dd-MM-yyyy") + private LocalDate dob; - @Id - private Long sid; - private String firstName; - private String lastName; - private String email; - private String phone; - @DateTimeFormat(pattern = "dd-MM-yyyy") - private LocalDate dob; + // TODO Complete Relations with other entities - //TODO Complete Relations with other entities + @ManyToOne + private Group group; + @OneToOne + private Image image; + @OneToMany(mappedBy = "student") + private List absences; } diff --git a/src/main/java/de/tekup/studentsabsence/entities/Subject.java b/src/main/java/de/tekup/studentsabsence/entities/Subject.java index 2da5287..ca770ca 100644 --- a/src/main/java/de/tekup/studentsabsence/entities/Subject.java +++ b/src/main/java/de/tekup/studentsabsence/entities/Subject.java @@ -4,22 +4,26 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.persistence.Entity; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; +import javax.persistence.*; import javax.validation.constraints.NotBlank; import java.io.Serializable; +import java.util.List; @Entity @Data @AllArgsConstructor @NoArgsConstructor public class Subject implements Serializable { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private Long id; - @NotBlank(message = "Name is required") - private String name; + + private static final long serialVersionUID = 1L; + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + @NotBlank(message = "Name is required") + private String name; + + @OneToMany(mappedBy = "subject") + private List groupSubjects; } diff --git a/src/main/java/de/tekup/studentsabsence/repositories/GroupSubjectRepository.java b/src/main/java/de/tekup/studentsabsence/repositories/GroupSubjectRepository.java index f0520ab..fa13b82 100644 --- a/src/main/java/de/tekup/studentsabsence/repositories/GroupSubjectRepository.java +++ b/src/main/java/de/tekup/studentsabsence/repositories/GroupSubjectRepository.java @@ -6,9 +6,11 @@ import org.springframework.data.repository.CrudRepository; import java.util.List; -import java.util.Optional; public interface GroupSubjectRepository extends CrudRepository { - List findAllByGroup(Group id); - ///TODO create a methode to find a groupSubject by Group Id and Subject Id + List findAllByGroup(Group id); + /// TODO create a methode to find a groupSubject by Group Id and Subject Id + + GroupSubject findByGroupIdAndSubjectId(Long groupId, Long subjectId); + } diff --git a/src/main/java/de/tekup/studentsabsence/services/impl/AbsenceServiceImp.java b/src/main/java/de/tekup/studentsabsence/services/impl/AbsenceServiceImp.java index 2968e07..2a286ea 100644 --- a/src/main/java/de/tekup/studentsabsence/services/impl/AbsenceServiceImp.java +++ b/src/main/java/de/tekup/studentsabsence/services/impl/AbsenceServiceImp.java @@ -13,81 +13,87 @@ @Service @AllArgsConstructor public class AbsenceServiceImp implements AbsenceService { - private final AbsenceRepository absenceRepository; - - @Override - public List getAllAbsences() { - List absences = new ArrayList<>(); - absenceRepository.findAll().forEach(absences::add); - return absences; - } - - @Override - public List getAllAbsencesByGroupId(Long id) { - List absences = new ArrayList<>(); - absenceRepository.findAllByStudent_Group_Id(id).forEach(absences::add); - return absences; - } - - @Override - public List getAllAbsencesByStudentId(Long sid) { - List absences = new ArrayList<>(); - //TODO complete the missing instructions - return absences; - } - - @Override - public List getAllAbsencesByStudentIdAndSubjectId(Long sid, Long id) { - List absences = new ArrayList<>(); - //TODO complete the missing instructions - return absences; - } - - @Override - public List getAllAbsencesByGroupIdAndSubjectId(Long gid, Long id) { - List absences = new ArrayList<>(); - absenceRepository.findAllByStudent_Group_IdAndSubject_Id(gid, id).forEach(absences::add); - return absences; - } - - @Override - public Absence getAbsenceById(Long id) { - return absenceRepository.findById(id).orElseThrow(() -> new NoSuchElementException("No Absence With ID: " + id)); - } - - @Override - public Absence addAbsence(Absence absence) { - return absenceRepository.save(absence); - } - - @Override - public Absence deleteAbsence(Long id) { - Absence absence = getAbsenceById(id); - absenceRepository.delete(absence); - return absence; - } - - @Override - public float hoursCountByStudent(Long sid) { - List absences = getAllAbsencesByStudentId(sid); - return countHours(absences); - } - - @Override - public float hoursCountByGroupAndSubject(Long gid, Long id) { - List absences = getAllAbsencesByGroupIdAndSubjectId(gid, id); - return countHours(absences); - } - - @Override - public float hoursCountByStudentAndSubject(Long sid, Long id) { - List absences = getAllAbsencesByStudentIdAndSubjectId(sid, id); - return countHours(absences); - } - //TODO Complete the countHours method - public float countHours(List absences) { - - return 0; - } + private final AbsenceRepository absenceRepository; + + @Override + public List getAllAbsences() { + List absences = new ArrayList<>(); + absenceRepository.findAll().forEach(absences::add); + return absences; + } + + @Override + public List getAllAbsencesByGroupId(Long id) { + List absences = new ArrayList<>(); + absenceRepository.findAllByStudent_Group_Id(id).forEach(absences::add); + return absences; + } + + @Override + public List getAllAbsencesByStudentId(Long sid) { + List absences = new ArrayList<>(); + // TODO complete the missing instructions + + absences = absenceRepository.findAllByStudent_Sid(sid); + return absences; + } + + @Override + public List getAllAbsencesByStudentIdAndSubjectId(Long sid, Long id) { + List absences = new ArrayList<>(); + // TODO complete the missing instructions + + absences = absenceRepository.findAllByStudent_Group_IdAndSubject_Id(sid, id); + return absences; + } + + @Override + public List getAllAbsencesByGroupIdAndSubjectId(Long gid, Long id) { + List absences = new ArrayList<>(); + absenceRepository.findAllByStudent_Group_IdAndSubject_Id(gid, id).forEach(absences::add); + return absences; + } + + @Override + public Absence getAbsenceById(Long id) { + return absenceRepository.findById(id) + .orElseThrow(() -> new NoSuchElementException("No Absence With ID: " + id)); + } + + @Override + public Absence addAbsence(Absence absence) { + return absenceRepository.save(absence); + } + + @Override + public Absence deleteAbsence(Long id) { + Absence absence = getAbsenceById(id); + absenceRepository.delete(absence); + return absence; + } + + @Override + public float hoursCountByStudent(Long sid) { + List absences = getAllAbsencesByStudentId(sid); + return countHours(absences); + } + + @Override + public float hoursCountByGroupAndSubject(Long gid, Long id) { + List absences = getAllAbsencesByGroupIdAndSubjectId(gid, id); + return countHours(absences); + } + + @Override + public float hoursCountByStudentAndSubject(Long sid, Long id) { + List absences = getAllAbsencesByStudentIdAndSubjectId(sid, id); + return countHours(absences); + } + + // TODO Complete the countHours method + public float countHours(List absences) { + + return (float) absences.stream().mapToDouble(Absence::getHours).sum(); + } } diff --git a/src/main/java/de/tekup/studentsabsence/services/impl/GroupSubjectServiceImp.java b/src/main/java/de/tekup/studentsabsence/services/impl/GroupSubjectServiceImp.java index 01034d0..1334377 100644 --- a/src/main/java/de/tekup/studentsabsence/services/impl/GroupSubjectServiceImp.java +++ b/src/main/java/de/tekup/studentsabsence/services/impl/GroupSubjectServiceImp.java @@ -12,36 +12,31 @@ import java.util.ArrayList; import java.util.List; -import java.util.NoSuchElementException; @Service @AllArgsConstructor public class GroupSubjectServiceImp implements GroupSubjectService { - private final GroupSubjectRepository groupSubjectRepository; - private final GroupService groupService; - - @Override - public void addSubjectToGroup(Group group, Subject subject, float hours) { - groupSubjectRepository.save(new GroupSubject( - new GroupSubjectKey(group.getId(),subject.getId()), - group, - subject, - hours - )); - } - - @Override - public List getSubjectsByGroupId(Long id) { - Group group = groupService.getGroupById(id); - return new ArrayList<>(groupSubjectRepository.findAllByGroup(group)); - } - - @Override - public void deleteSubjectFromGroup(Long gid, Long sid) { - //TODO find a groupSubject by Group Id and Subject Id - GroupSubject groupSubject = null; - - groupSubjectRepository.delete(groupSubject); - } + private final GroupSubjectRepository groupSubjectRepository; + private final GroupService groupService; + + @Override + public void addSubjectToGroup(Group group, Subject subject, float hours) { + groupSubjectRepository + .save(new GroupSubject(new GroupSubjectKey(group.getId(), subject.getId()), group, subject, hours)); + } + + @Override + public List getSubjectsByGroupId(Long id) { + Group group = groupService.getGroupById(id); + return new ArrayList<>(groupSubjectRepository.findAllByGroup(group)); + } + + @Override + public void deleteSubjectFromGroup(Long gid, Long sid) { + // TODO find a groupSubject by Group Id and Subject Id + GroupSubject groupSubject = groupSubjectRepository.findByGroupIdAndSubjectId(gid, sid); + + groupSubjectRepository.delete(groupSubject); + } } diff --git a/src/main/java/de/tekup/studentsabsence/services/impl/ImageServiceImp.java b/src/main/java/de/tekup/studentsabsence/services/impl/ImageServiceImp.java index d4c5500..e01887e 100644 --- a/src/main/java/de/tekup/studentsabsence/services/impl/ImageServiceImp.java +++ b/src/main/java/de/tekup/studentsabsence/services/impl/ImageServiceImp.java @@ -9,25 +9,29 @@ import org.springframework.web.multipart.MultipartFile; import java.io.IOException; -import java.util.NoSuchElementException; +import java.util.Optional; @Service @AllArgsConstructor public class ImageServiceImp implements ImageService { - private final ImageRepository imageRepository; + private final ImageRepository imageRepository; - //TODO Complete this method - @Override - public Image getImage(String id) { - return null; - } + // TODO Complete this method + @Override + public Image getImage(String id) { + Optional res = imageRepository.findById(id); + if (res.isPresent()) { + return res.get(); + } + return null; + } - @Override - public Image addImage(MultipartFile image) throws IOException { - String fileName = StringUtils.cleanPath(image.getOriginalFilename()); - String fileType = image.getContentType(); - byte[] data = image.getBytes(); - Image img = new Image(null, fileName, fileType, data); - return imageRepository.save(img); - } + @Override + public Image addImage(MultipartFile image) throws IOException { + String fileName = StringUtils.cleanPath(image.getOriginalFilename()); + String fileType = image.getContentType(); + byte[] data = image.getBytes(); + Image img = new Image(null, fileName, fileType, data); + return imageRepository.save(img); + } } diff --git a/src/main/java/de/tekup/studentsabsence/services/impl/StudentServiceImp.java b/src/main/java/de/tekup/studentsabsence/services/impl/StudentServiceImp.java index c977c02..9b2d9b2 100644 --- a/src/main/java/de/tekup/studentsabsence/services/impl/StudentServiceImp.java +++ b/src/main/java/de/tekup/studentsabsence/services/impl/StudentServiceImp.java @@ -13,36 +13,41 @@ @Service @AllArgsConstructor public class StudentServiceImp implements StudentService { - private final StudentRepository studentRepository; - - @Override - public List getAllStudents() { - List students = new ArrayList<>(); - studentRepository.findAll().forEach(students::add); - return students; - } - - @Override - public Student getStudentBySid(Long sid) { - return studentRepository.findById(sid). - orElseThrow(() -> new NoSuchElementException("No Student With SID: " + sid)); - } - - @Override - public Student addStudent(Student student) { - return studentRepository.save(student); - - } - - //TODO Complete this method - @Override - public Student updateStudent(Student student) { - return null; - } - - //TODO Complete this method - @Override - public Student deleteStudent(Long sid) { - return null; - } + private final StudentRepository studentRepository; + + @Override + public List getAllStudents() { + List students = new ArrayList<>(); + studentRepository.findAll().forEach(students::add); + return students; + } + + @Override + public Student getStudentBySid(Long sid) { + return studentRepository.findById(sid) + .orElseThrow(() -> new NoSuchElementException("No Student With SID: " + sid)); + } + + @Override + public Student addStudent(Student student) { + return studentRepository.save(student); + + } + + // TODO Complete this method + @Override + public Student updateStudent(Student student) { + if (!studentRepository.existsById(student.getSid())) { + throw new NoSuchElementException("No Studnet With ID: " + student.getSid()); + } + return null; + } + + // TODO Complete this method + @Override + public Student deleteStudent(Long sid) { + Student student = getStudentBySid(sid); + studentRepository.delete(student); + return student; + } } diff --git a/src/main/java/de/tekup/studentsabsence/services/impl/SubjectServiceImp.java b/src/main/java/de/tekup/studentsabsence/services/impl/SubjectServiceImp.java index 5ef179a..03bdc08 100644 --- a/src/main/java/de/tekup/studentsabsence/services/impl/SubjectServiceImp.java +++ b/src/main/java/de/tekup/studentsabsence/services/impl/SubjectServiceImp.java @@ -13,41 +13,43 @@ @Service @AllArgsConstructor public class SubjectServiceImp implements SubjectService { - private final SubjectRepository subjectRepository; - - //TODO Complete this method - @Override - public List getAllSubjects() { - return null; - } - - @Override - public Subject getSubjectById(Long id) { - return subjectRepository.findById(id). - orElseThrow(() -> new NoSuchElementException("No Subject with ID: " + id)); - - } - - @Override - public Subject addSubject(Subject subject) { - return subjectRepository.save(subject); - } - - @Override - public Subject updateSubject(Subject subject) { - if (!subjectRepository.existsById(subject.getId())) { - throw new NoSuchElementException("No Subject with ID : " + subject.getId()); - } - return subjectRepository.save(subject); - } - - @Override - public Subject deleteSubject(Long id) { - Subject subject = getSubjectById(id); - subjectRepository.delete(subject); - return subject; - } - + private final SubjectRepository subjectRepository; + + // TODO Complete this method + @Override + public List getAllSubjects() { + List subjects = new ArrayList(); + subjectRepository.findAll().forEach(s -> { + subjects.add(s); + }); + return subjects; + } + + @Override + public Subject getSubjectById(Long id) { + return subjectRepository.findById(id) + .orElseThrow(() -> new NoSuchElementException("No Subject with ID: " + id)); + + } + + @Override + public Subject addSubject(Subject subject) { + return subjectRepository.save(subject); + } + + @Override + public Subject updateSubject(Subject subject) { + if (!subjectRepository.existsById(subject.getId())) { + throw new NoSuchElementException("No Subject with ID : " + subject.getId()); + } + return subjectRepository.save(subject); + } + + @Override + public Subject deleteSubject(Long id) { + Subject subject = getSubjectById(id); + subjectRepository.delete(subject); + return subject; + } } -