chore: initial commit - project structure with domain, application, infrastructure, bootstrap, and basic dependencies

This commit is contained in:
2025-08-25 21:13:43 +02:00
parent a3fc504015
commit 5215bf8779
25 changed files with 1001 additions and 0 deletions

20
application/pom.xml Normal file
View File

@@ -0,0 +1,20 @@
<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.pablotj</groupId>
<artifactId>portfolio-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>application</artifactId>
<dependencies>
<dependency>
<groupId>com.pablotj</groupId>
<artifactId>domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,25 @@
package com.pablotj.portfolio.application.project;
import com.pablotj.portfolio.domain.project.Project;
import com.pablotj.portfolio.domain.project.port.ProjectRepositoryPort;
public class CreateProjectUseCase {
private final ProjectRepositoryPort repository;
public record Command(String title, String description, String url) {}
public CreateProjectUseCase(ProjectRepositoryPort repository) {
this.repository = repository;
}
public Project handle(Command cmd) {
var project = Project.builder()
.id(null)
.title(cmd.title())
.description(cmd.description())
.url(cmd.url())
.build();
return repository.save(project);
}
}

View File

@@ -0,0 +1,25 @@
package com.pablotj.portfolio.application.project;
import com.pablotj.portfolio.domain.project.Project;
import com.pablotj.portfolio.domain.project.ProjectId;
import com.pablotj.portfolio.domain.project.port.ProjectRepositoryPort;
import java.util.List;
import java.util.Optional;
public class GetProjectUseCase {
private final ProjectRepositoryPort repository;
public GetProjectUseCase(ProjectRepositoryPort repository) {
this.repository = repository;
}
public Optional<Project> byId(Long id) {
return repository.findById(new ProjectId(id));
}
public List<Project> all() {
return repository.findAll();
}
}