-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectService.java
More file actions
103 lines (85 loc) · 3.7 KB
/
Copy pathProjectService.java
File metadata and controls
103 lines (85 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package demo.codeexample.project.application.usecase;
import demo.codeexample.project.CreateProjectDto;
import demo.codeexample.project.ProjectCreatedEvent;
import demo.codeexample.project.ProjectDto;
import demo.codeexample.project.application.out.ProjectEventPort;
import demo.codeexample.shared.Category;
import demo.codeexample.project.domain.Genre;
import demo.codeexample.project.application.in.ProjectUseCase;
import demo.codeexample.project.application.out.ProjectRepositoryPort;
import demo.codeexample.project.application.out.UserPort;
import demo.codeexample.project.domain.Project;
import jakarta.persistence.EntityNotFoundException;
import org.modelmapper.ModelMapper;
import java.util.List;
import java.util.Optional;
public class ProjectService implements ProjectUseCase {
private final ProjectRepositoryPort repository;
private final UserPort userPort;
private final ProjectEventPort projectEventPort;
private final ModelMapper mapper;
public ProjectService(ProjectRepositoryPort repository, UserPort userPort,
ProjectEventPort projectEventPort, ModelMapper mapper) {
this.repository = repository;
this.userPort = userPort;
this.projectEventPort = projectEventPort;
this.mapper = mapper;
}
@Override
public List<ProjectDto> findAllCompletedProjectsByCompany(String companyName) {
return repository.findAllProjectsBelongingToCompany(companyName, true).stream()
.map(entity -> mapper.map(entity, ProjectDto.class))
.toList();
}
@Override
public List<ProjectDto> findAllNotCompleteProjectsByCompany(String companyName) {
return repository.findAllProjectsBelongingToCompany(companyName, false).stream()
.map(entity -> mapper.map(entity, ProjectDto.class))
.toList();
}
@Override
public List<ProjectDto> findProjectByCategory(Category category) {
return repository.findProjectByCategory(category).stream()
.map(project -> mapper.map(project, ProjectDto.class))
.toList();
}
@Override
public List<ProjectDto> findProjectByGenre(Genre genre) {
return repository.findProjectByGenre(genre).stream()
.map(project -> mapper.map(project, ProjectDto.class))
.toList();
}
@Override
public Project createProject(CreateProjectDto projectDto) {
userPort.validateEmployees(projectDto.employeesId());
Project project = repository.save(projectDto);
ProjectCreatedEvent event = new ProjectCreatedEvent(
project.getId(),
project.getTitle(),
project.getEmployeesId(),
project.getReleaseDate(),
project.getCompanyName(),
projectDto.recruitingDeadline(),
projectDto.recordingDeadline(),
projectDto.editingDeadline()
);
projectEventPort.publish(event);
return project;
}
@Override
public List<ProjectDto> findProjectContainingTitle(String title) {
return repository.findProjectContainingTitle(title).stream()
.map(project -> mapper.map(project, ProjectDto.class))
.toList();
}
@Override
public Optional<ProjectDto> findProjectByTitle(String title) {
return repository.findByTitle(title)
.map(k -> mapper.map(k, ProjectDto.class));
}
public ProjectDto getProjectDetails(Long projectId) {
return repository.findById(projectId)
.map(project -> mapper.map(project, ProjectDto.class))
.orElseThrow(() -> new EntityNotFoundException("Project not found: " + projectId));
}
}