Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/main/java/mate/academy/mapstruct/mapper/GroupMapper.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package mate.academy.mapstruct.mapper;

import java.util.List;
import mate.academy.mapstruct.dto.group.CreateGroupRequestDto;
import mate.academy.mapstruct.dto.group.GroupDto;
import mate.academy.mapstruct.model.Group;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface GroupMapper {
GroupDto toDto(Group group);

Group toModel(CreateGroupRequestDto requestDto);
Group toModel(CreateGroupRequestDto dto);

List<GroupDto> toDtoList(List<Group> groups);
}
69 changes: 68 additions & 1 deletion src/main/java/mate/academy/mapstruct/mapper/StudentMapper.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,81 @@
package mate.academy.mapstruct.mapper;

import java.util.List;
import java.util.stream.Collectors;
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.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.ReportingPolicy;

@Mapper(
componentModel = "spring",
uses = {GroupMapper.class, SubjectMapper.class},
unmappedTargetPolicy = ReportingPolicy.IGNORE
)
public interface StudentMapper {

// Student -> StudentDto (returns subjectIds list and groupId)
@Mapping(target = "groupId",
expression = "java(student.getGroup() != null ? student.getGroup().getId() : null)")
@Mapping(target = "subjectIds", source = "subjects", qualifiedByName = "toSubjectIds")
StudentDto toDto(Student student);

// Student -> StudentWithoutSubjectsDto (no subjectIds present; only groupId)
@Mapping(target = "groupId",
expression = "java(student.getGroup() != null ? student.getGroup().getId() : null)")
StudentWithoutSubjectsDto toStudentWithoutSubjectsDto(Student student);

Student toModel(CreateStudentRequestDto requestDto);
/**
* Map CreateStudentRequestDto -> Student
* The request DTO has:
* - {@code Long groupId;}
* - {@code List<Long> subjects;} // ids
*
* We create Group and Subject placeholders (only id set).
*/
@Mapping(target = "group", source = "groupId", qualifiedByName = "mapGroupById")
@Mapping(target = "subjects", source = "subjects", qualifiedByName = "mapSubjectsByIds")
Student toModel(CreateStudentRequestDto dto);

// ---- helpers ----

@Named("toSubjectIds")
default List<Long> toSubjectIds(List<Subject> subjects) {
if (subjects == null) {
return null;
}
return subjects.stream()
.map(Subject::getId)
.collect(Collectors.toList());
}

@Named("mapGroupById")
default Group mapGroupById(Long id) {
if (id == null) {
return null;
}
Group group = new Group();
group.setId(id);
return group;
}

@Named("mapSubjectsByIds")
default List<Subject> mapSubjectsByIds(List<Long> ids) {
if (ids == null) {
return null;
}
return ids.stream()
.map(id -> {
Subject s = new Subject();
s.setId(id);
return s;
})
.collect(Collectors.toList());
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,17 @@
package mate.academy.mapstruct.mapper;

import java.util.List;
import mate.academy.mapstruct.dto.subject.CreateSubjectRequestDto;
import mate.academy.mapstruct.dto.subject.SubjectDto;
import mate.academy.mapstruct.model.Subject;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;

@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface SubjectMapper {
SubjectDto toDto(Subject subject);

Subject toModel(CreateSubjectRequestDto requestDto);
Subject toModel(CreateSubjectRequestDto dto);

List<SubjectDto> toDtoList(List<Subject> subjects);
}