From a2653e0da71d7f4502c9893e3333982afddd5cb4 Mon Sep 17 00:00:00 2001 From: JackWillov Date: Fri, 10 Jul 2026 02:48:46 +0200 Subject: [PATCH] mappers implement --- .../academy/mapstruct/mapper/GroupMapper.java | 2 + .../mapstruct/mapper/StudentMapper.java | 45 +++++++++++++++++++ .../mapstruct/mapper/SubjectMapper.java | 2 + 3 files changed, 49 insertions(+) diff --git a/src/main/java/mate/academy/mapstruct/mapper/GroupMapper.java b/src/main/java/mate/academy/mapstruct/mapper/GroupMapper.java index d60c9df5..dfed37da 100644 --- a/src/main/java/mate/academy/mapstruct/mapper/GroupMapper.java +++ b/src/main/java/mate/academy/mapstruct/mapper/GroupMapper.java @@ -3,7 +3,9 @@ import mate.academy.mapstruct.dto.group.CreateGroupRequestDto; import mate.academy.mapstruct.dto.group.GroupDto; import mate.academy.mapstruct.model.Group; +import org.mapstruct.Mapper; +@Mapper(componentModel = "spring") public interface GroupMapper { GroupDto toDto(Group group); diff --git a/src/main/java/mate/academy/mapstruct/mapper/StudentMapper.java b/src/main/java/mate/academy/mapstruct/mapper/StudentMapper.java index 853e6b19..49feff10 100644 --- a/src/main/java/mate/academy/mapstruct/mapper/StudentMapper.java +++ b/src/main/java/mate/academy/mapstruct/mapper/StudentMapper.java @@ -1,14 +1,59 @@ package mate.academy.mapstruct.mapper; +import java.util.List; +import java.util.Optional; import mate.academy.mapstruct.dto.student.CreateStudentRequestDto; import mate.academy.mapstruct.dto.student.StudentDto; import mate.academy.mapstruct.dto.student.StudentWithoutSubjectsDto; +import mate.academy.mapstruct.model.Group; import mate.academy.mapstruct.model.Student; +import mate.academy.mapstruct.model.Subject; +import org.mapstruct.AfterMapping; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.MappingTarget; +import org.mapstruct.Named; +@Mapper(componentModel = "spring") public interface StudentMapper { + + @Mapping(source = "group.id", target = "groupId") + @Mapping(target = "subjectIds", ignore = true) StudentDto toDto(Student student); + @AfterMapping + default void setSubjects(@MappingTarget StudentDto studentDto, Student student) { + List subjectIds = student.getSubjects().stream() + .map(Subject::getId) + .toList(); + studentDto.setSubjectIds(subjectIds); + } + + @Mapping(source = "group.id", target = "groupId") StudentWithoutSubjectsDto toStudentWithoutSubjectsDto(Student student); + @Mapping(source = "groupId", target = "group", qualifiedByName = "groupById") + @Mapping(source = "subjects", target = "subjects", qualifiedByName = "subjectsById") Student toModel(CreateStudentRequestDto requestDto); + + @Named("groupById") + default Group groupById(Long id) { + return Optional.ofNullable(id) + .map(Group::new) + .orElse(null); + } + + @Named("subjectsById") + default List subjectsById(List ids) { + return Optional.ofNullable(ids) + .map(idList -> idList.stream() + .map(id -> { + Subject subject = new Subject(); + subject.setId(id); + return subject; + }) + .toList()) + .orElse(null); + } + } diff --git a/src/main/java/mate/academy/mapstruct/mapper/SubjectMapper.java b/src/main/java/mate/academy/mapstruct/mapper/SubjectMapper.java index 2906e78e..3adb9d88 100644 --- a/src/main/java/mate/academy/mapstruct/mapper/SubjectMapper.java +++ b/src/main/java/mate/academy/mapstruct/mapper/SubjectMapper.java @@ -3,7 +3,9 @@ import mate.academy.mapstruct.dto.subject.CreateSubjectRequestDto; import mate.academy.mapstruct.dto.subject.SubjectDto; import mate.academy.mapstruct.model.Subject; +import org.mapstruct.Mapper; +@Mapper(componentModel = "spring") public interface SubjectMapper { SubjectDto toDto(Subject subject);