-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProjectService.java
More file actions
69 lines (54 loc) · 2.32 KB
/
Copy pathProjectService.java
File metadata and controls
69 lines (54 loc) · 2.32 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
package demo.codeexample.project.application.usecase;
import demo.codeexample.project.ProjectDto;
import demo.codeexample.project.domain.Category;
import demo.codeexample.project.domain.Genre;
import demo.codeexample.exceptions.UserAuthorizationException;
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.time.LocalDate;
import java.util.List;
public class ProjectService implements ProjectUseCase {
private final ProjectRepositoryPort repository;
private final UserPort userPort;
private final ModelMapper mapper;
public ProjectService(ProjectRepositoryPort repository, UserPort userPort, ModelMapper mapper){
this.repository = repository;
this.userPort = userPort;
this.mapper = mapper;
}
@Override
public List<Project> findAllProjects() {
return repository.findAll();
}
@Override
public List<Project> findProjectByCategory(Category category) {
return repository.findProjectByCategory(category);
}
@Override
public List<Project> findProjectByGenre(Genre genre) {
return repository.findProjectByGenre(genre);
}
@Override
public Project createProject(String title, String description, LocalDate releaseDate, Long producerId,
Category category, Genre genre, String imageURL) {
if(!userPort.validateProducer(producerId))
throw new UserAuthorizationException(producerId);
Project newProject = Project.createNew(title, description, releaseDate, producerId,
category, genre, imageURL);
return repository.save(newProject);
}
@Override
public List<Project> findProjectContainingTitle(String title) {
return repository.findProjectContainingTitle(title);
}
@Override
public ProjectDto getProjectDetails(Long projectId) {
return repository.findById(projectId)
.map(project -> mapper.map(project, ProjectDto.class))
.orElseThrow(() -> new EntityNotFoundException("Project not found: " + projectId));
}
}