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

@@ -0,0 +1,27 @@
package org.codiki.infrastructure.category.model;
import java.util.UUID;
import org.codiki.domain.category.model.Category;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "category")
public record CategoryEntity(
@Id
UUID id,
@Column(nullable = false)
String name
// List<Category> subCategories
) {
public CategoryEntity(Category category) {
this(
category.id(),
category.name()
);
}
}

View File

@@ -0,0 +1,22 @@
package org.codiki.infrastructure.publication;
import org.codiki.domain.publication.model.Publication;
import org.codiki.domain.publication.port.PublicationPort;
import org.codiki.infrastructure.publication.model.PublicationEntity;
import org.codiki.infrastructure.publication.repository.PublicationRepository;
import org.springframework.stereotype.Component;
@Component
public class PublicationJpaAdapter implements PublicationPort {
private final PublicationRepository repository;
public PublicationJpaAdapter(PublicationRepository repository) {
this.repository = repository;
}
@Override
public void save(final Publication publication) {
PublicationEntity newPublicationEntity = new PublicationEntity(publication);
repository.save(newPublicationEntity);
}
}

View File

@@ -0,0 +1,28 @@
package org.codiki.infrastructure.publication.model;
import java.util.UUID;
import org.codiki.domain.publication.model.Author;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
@Entity
@Table(name = "`user`")
public record AuthorEntity(
@Id
UUID id,
@Column(nullable = false)
String name,
String image
) {
public AuthorEntity(Author author) {
this(
author.id(),
author.name(),
author.image()
);
}
}

View File

@@ -0,0 +1,54 @@
package org.codiki.infrastructure.publication.model;
import java.time.ZonedDateTime;
import java.util.UUID;
import org.codiki.domain.publication.model.Publication;
import org.codiki.infrastructure.category.model.CategoryEntity;
import static jakarta.persistence.FetchType.LAZY;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
@Entity
@Table(name = "publication")
public record PublicationEntity(
@Id
UUID id,
@Column(nullable = false)
String key,
@Column(nullable = false)
String title,
@Column(nullable = false)
String text,
@Column(nullable = false)
String description,
@Column(nullable = false)
String image,
@Column(nullable = false)
ZonedDateTime creationDate,
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "author_id")
AuthorEntity author,
@ManyToOne(fetch = LAZY)
@JoinColumn(name = "category_id")
CategoryEntity categoryId
) {
public PublicationEntity(Publication publication) {
this(
publication.id(),
publication.key(),
publication.title(),
publication.text(),
publication.description(),
publication.image(),
publication.creationDate(),
new AuthorEntity(publication.author()),
new CategoryEntity(publication.category())
);
}
}

View File

@@ -0,0 +1,9 @@
package org.codiki.infrastructure.publication.repository;
import java.util.UUID;
import org.codiki.infrastructure.publication.model.PublicationEntity;
import org.springframework.data.jpa.repository.JpaRepository;
public interface PublicationRepository extends JpaRepository<PublicationEntity, UUID> {
}

View File

@@ -1,5 +1,6 @@
CREATE TABLE IF NOT EXISTS "user" (
id UUID NOT NULL,
name VARCHAR NOT NULL,
password VARCHAR NOT NULL,
CONSTRAINT user_pk PRIMARY KEY (id)
);
@@ -19,4 +20,27 @@ CREATE TABLE IF NOT EXISTS refresh_token (
CONSTRAINT refresh_token_pk PRIMARY KEY (user_id),
CONSTRAINT refresh_token_fk_user_id FOREIGN KEY (user_id) REFERENCES "user" (id)
);
CREATE INDEX refresh_token_fk_user_id_idx ON user_role (user_id);
CREATE INDEX refresh_token_fk_user_id_idx ON user_role (user_id);
CREATE TABLE IF NOT EXISTS category (
id UUID NOT NULL,
name VARCHAR NOT NULL,
CONSTRAINT category_pk PRIMARY KEY (id)
);
CREATE TABLE IF NOT EXISTS publication (
id UUID NOT NULL,
key VARCHAR(10) NOT NULL,
title VARCHAR NOT NULL,
text VARCHAR NOT NULL,
description VARCHAR NOT NULL,
image VARCHAR NOT NULL,
creationDate TIMESTAMP NOT NULL,
author_id UUID NOT NULL,
category_id UUID NOT NULL,
CONSTRAINT publication_pk PRIMARY KEY (id),
CONSTRAINT publication_author_id_fk FOREIGN KEY (author_id) REFERENCES "user" (id),
CONSTRAINT publication_category_id_fk FOREIGN KEY (category_id) REFERENCES category (id)
);
CREATE INDEX publication_author_id_idx ON publication (author_id);
CREATE INDEX publication_category_id_idx ON publication (category_id);