From 2dc386e896737ec3a06d3c5d1f81e551a72136c2 Mon Sep 17 00:00:00 2001 From: Florian THIERRY Date: Thu, 14 Mar 2024 13:40:32 +0100 Subject: [PATCH] Add publisher id in picture entity. --- .../codiki/application/picture/PictureUseCases.java | 11 ++++++++++- .../org/codiki/domain/picture/model/Picture.java | 1 + .../domain/picture/model/builder/PictureBuilder.java | 12 +++++++++++- .../infrastructure/picture/model/PictureEntity.java | 6 +++++- .../sql/001-initial-script-tables-creation.sql | 7 +++++-- .../Codiki/environments/localhost.bru | 2 +- 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/codiki-application/src/main/java/org/codiki/application/picture/PictureUseCases.java b/codiki-application/src/main/java/org/codiki/application/picture/PictureUseCases.java index a4a2d02..86a10a7 100644 --- a/codiki-application/src/main/java/org/codiki/application/picture/PictureUseCases.java +++ b/codiki-application/src/main/java/org/codiki/application/picture/PictureUseCases.java @@ -5,21 +5,30 @@ import java.util.Optional; import java.util.UUID; import static org.codiki.domain.picture.model.builder.PictureBuilder.aPicture; +import org.codiki.application.user.UserUseCases; +import org.codiki.domain.exception.AuthenticationRequiredException; import org.codiki.domain.picture.model.Picture; import org.codiki.domain.picture.port.PicturePort; +import org.codiki.domain.user.model.User; import org.springframework.stereotype.Service; @Service public class PictureUseCases { private final PicturePort picturePort; + private final UserUseCases userUseCases; - public PictureUseCases(PicturePort picturePort) { + public PictureUseCases(PicturePort picturePort, UserUseCases userUseCases) { this.picturePort = picturePort; + this.userUseCases = userUseCases; } public Picture createPicture(File pictureFile) { + User authenticatedUser = userUseCases.getAuthenticatedUser() + .orElseThrow(AuthenticationRequiredException::new); + Picture newPicture = aPicture() .withId(UUID.randomUUID()) + .withPublisher(authenticatedUser) .withContentFile(pictureFile) .build(); diff --git a/codiki-domain/src/main/java/org/codiki/domain/picture/model/Picture.java b/codiki-domain/src/main/java/org/codiki/domain/picture/model/Picture.java index 5aa9f86..b7d2b4c 100644 --- a/codiki-domain/src/main/java/org/codiki/domain/picture/model/Picture.java +++ b/codiki-domain/src/main/java/org/codiki/domain/picture/model/Picture.java @@ -5,5 +5,6 @@ import java.util.UUID; public record Picture( UUID id, + UUID publisherId, File contentFile ) {} diff --git a/codiki-domain/src/main/java/org/codiki/domain/picture/model/builder/PictureBuilder.java b/codiki-domain/src/main/java/org/codiki/domain/picture/model/builder/PictureBuilder.java index 6b3b0fe..2d9112d 100644 --- a/codiki-domain/src/main/java/org/codiki/domain/picture/model/builder/PictureBuilder.java +++ b/codiki-domain/src/main/java/org/codiki/domain/picture/model/builder/PictureBuilder.java @@ -4,9 +4,11 @@ import java.io.File; import java.util.UUID; import org.codiki.domain.picture.model.Picture; +import org.codiki.domain.user.model.User; public class PictureBuilder { private UUID id; + private UUID publisherId; private File contentFile; private PictureBuilder() {} @@ -26,6 +28,14 @@ public class PictureBuilder { return this; } + public PictureBuilder withPublisherId(UUID publisherId) { + this.publisherId = publisherId; + return this; + } + + public PictureBuilder withPublisher(User publisher) { + return withPublisherId(publisher.id()); + } public PictureBuilder withContentFile(File contentFile) { this.contentFile = contentFile; @@ -33,6 +43,6 @@ public class PictureBuilder { } public Picture build() { - return new Picture(id, contentFile); + return new Picture(id, publisherId, contentFile); } } diff --git a/codiki-infrastructure/src/main/java/org/codiki/infrastructure/picture/model/PictureEntity.java b/codiki-infrastructure/src/main/java/org/codiki/infrastructure/picture/model/PictureEntity.java index ae6d752..6c56ff7 100644 --- a/codiki-infrastructure/src/main/java/org/codiki/infrastructure/picture/model/PictureEntity.java +++ b/codiki-infrastructure/src/main/java/org/codiki/infrastructure/picture/model/PictureEntity.java @@ -4,6 +4,7 @@ import java.util.UUID; import org.codiki.domain.picture.model.Picture; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.Table; @@ -21,12 +22,15 @@ import lombok.Setter; public class PictureEntity { @Id private UUID id; + @Column(nullable = false) + private UUID publisherId; public PictureEntity(Picture picture) { id = picture.id(); + publisherId = picture.publisherId(); } public Picture toDomain() { - return new Picture(id, null); + return new Picture(id, publisherId, null); } } diff --git a/codiki-infrastructure/src/main/resources/sql/001-initial-script-tables-creation.sql b/codiki-infrastructure/src/main/resources/sql/001-initial-script-tables-creation.sql index c281c9a..0408e0d 100644 --- a/codiki-infrastructure/src/main/resources/sql/001-initial-script-tables-creation.sql +++ b/codiki-infrastructure/src/main/resources/sql/001-initial-script-tables-creation.sql @@ -32,9 +32,12 @@ CREATE TABLE IF NOT EXISTS category ( CREATE INDEX category_parent_category_id_idx ON category (parent_category_id); CREATE TABLE IF NOT EXISTS picture ( - id UUID NOT NULL, - CONSTRAINT picture_pk PRIMARY KEY (id) + id UUID NOT NULL, + publisher_id UUID NOT NULL, + CONSTRAINT picture_pk PRIMARY KEY (id), + CONSTRAINT picture_publisher_id_fk FOREIGN KEY (publisher_id) REFERENCES "user" (id) ); +CREATE INDEX picture_publisher_id_idx ON picture (publisher_id); CREATE TABLE IF NOT EXISTS publication ( id UUID NOT NULL, diff --git a/rest-client-collection/Codiki/environments/localhost.bru b/rest-client-collection/Codiki/environments/localhost.bru index 67c21eb..9e136b6 100644 --- a/rest-client-collection/Codiki/environments/localhost.bru +++ b/rest-client-collection/Codiki/environments/localhost.bru @@ -1,7 +1,7 @@ vars { url: http://localhost:8080 publicationId: e23831a6-9cc0-4f3d-9efa-7a1cae191cb1 - bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA0MDc5Mjd9.QdanZXjfLztIVJU-pRS3gZxnC4GIycyhmlCkhYSPchiXpeNzruw_GY3fH1_qshC_AjOCSqGmCq3X1S_zVFdodQ + bearerToken: eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI1YWQ0NjJiOC04ZjllLTRhMjYtYmI4Ni1jNzRmZWY1ZDExYjYiLCJleHAiOjE3MTA0MjE2Nzd9.Ln2C9_3ZmX0nxZukW7N18j3AfJ_NGCiPfhir24C33T-BuvwsQ2iI_09gcxwGtclPWP5DYyM3gFwcH0jdWtPjkA categoryId: 172fa901-3f4b-4540-92f3-1c15820e8ec9 pictureId: 65b660b7-66bb-4e4a-a62c-fd0ca101f972 }