WIP implementation of infrastructure layer of publication creation.

This commit is contained in:
Florian THIERRY
2024-03-11 14:37:45 +01:00
parent c19bd5407f
commit 7193e52f67
13 changed files with 291 additions and 3 deletions

View File

@@ -25,6 +25,10 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-data-jpa</artifactId>-->

View File

@@ -0,0 +1,23 @@
package org.codiki.exposition.category.model;
import java.util.List;
import java.util.UUID;
import org.codiki.domain.category.model.Category;
public record CategoryDto(
UUID id,
String name,
List<CategoryDto> subCategories
) {
public CategoryDto(Category category) {
this(
category.id(),
category.name(),
category.subCategories()
.stream()
.map(CategoryDto::new)
.toList()
);
}
}

View File

@@ -0,0 +1,27 @@
package org.codiki.exposition.publication;
import org.codiki.application.publication.PublicationUseCases;
import org.codiki.domain.publication.model.Publication;
import org.codiki.domain.publication.model.PublicationCreationRequest;
import org.codiki.exposition.publication.model.PublicationCreationRequestDto;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/publications")
public class PublicationController {
private final PublicationUseCases publicationUseCases;
public PublicationController(PublicationUseCases publicationUseCases) {
this.publicationUseCases = publicationUseCases;
}
@PostMapping
public PublicationDto createPublication(@RequestBody PublicationCreationRequestDto requestDto) {
PublicationCreationRequest request = requestDto.toDomain();
Publication newPublication = publicationUseCases.createPublication(request);
return new PublicationDto(newPublication);
}
}

View File

@@ -0,0 +1,36 @@
package org.codiki.exposition.publication;
import java.time.ZonedDateTime;
import java.util.UUID;
import org.codiki.domain.category.model.Category;
import org.codiki.domain.publication.model.Author;
import org.codiki.domain.publication.model.Publication;
import org.codiki.exposition.category.model.CategoryDto;
import org.codiki.exposition.publication.model.AuthorDto;
public record PublicationDto(
UUID id,
String key,
String title,
String text,
String description,
String image,
ZonedDateTime creationDate,
AuthorDto author,
CategoryDto category
) {
public PublicationDto(Publication publication) {
this(
publication.id(),
publication.key(),
publication.title(),
publication.text(),
publication.description(),
publication.image(),
publication.creationDate(),
new AuthorDto(publication.author()),
new CategoryDto(publication.category())
);
}
}

View File

@@ -0,0 +1,19 @@
package org.codiki.exposition.publication.model;
import java.util.UUID;
import org.codiki.domain.publication.model.Author;
public record AuthorDto(
UUID id,
String name,
String image
) {
public AuthorDto(Author author) {
this(
author.id(),
author.name(),
author.image()
);
}
}

View File

@@ -0,0 +1,17 @@
package org.codiki.exposition.publication.model;
import java.util.UUID;
import org.codiki.domain.publication.model.PublicationCreationRequest;
public record PublicationCreationRequestDto(
String title,
String text,
String description,
String image,
UUID categoryId
) {
public PublicationCreationRequest toDomain() {
return new PublicationCreationRequest(title, text, description, image, categoryId);
}
}