Set up picture upload mechanism.
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package org.codiki.infrastructure.picture;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Optional;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codiki.domain.picture.exception.PictureStorageErrorException;
|
||||
import org.codiki.domain.picture.model.Picture;
|
||||
import org.codiki.domain.picture.port.PicturePort;
|
||||
import org.codiki.infrastructure.picture.model.PictureEntity;
|
||||
import org.codiki.infrastructure.picture.repository.PictureRepository;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import jakarta.transaction.Transactional;
|
||||
|
||||
@Component
|
||||
public class PictureJpaAdapter implements PicturePort {
|
||||
private final PictureRepository repository;
|
||||
private final String pictureFolderPath;
|
||||
|
||||
public PictureJpaAdapter(
|
||||
PictureRepository repository,
|
||||
@Value("${application.pictures.path}") String pictureFolderPath
|
||||
) {
|
||||
this.repository = repository;
|
||||
this.pictureFolderPath = pictureFolderPath;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean existsById(UUID pictureId) {
|
||||
return repository.existsById(pictureId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Optional<Picture> findById(UUID pictureId) {
|
||||
return repository.findById(pictureId)
|
||||
.map(PictureEntity::toDomain);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void save(Picture picture) {
|
||||
PictureEntity pictureEntity = new PictureEntity(picture);
|
||||
repository.save(pictureEntity);
|
||||
|
||||
boolean isMoved = picture.contentFile().renameTo(new File(String.format("%s/%s", pictureFolderPath, picture.id())));
|
||||
if (!isMoved) {
|
||||
throw new PictureStorageErrorException();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteById(UUID pictureId) {
|
||||
repository.deleteById(pictureId);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.codiki.infrastructure.picture.model;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codiki.domain.picture.model.Picture;
|
||||
|
||||
import jakarta.persistence.Entity;
|
||||
import jakarta.persistence.Id;
|
||||
import jakarta.persistence.Table;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@Entity
|
||||
@Table(name = "picture")
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Getter
|
||||
@Setter
|
||||
public class PictureEntity {
|
||||
@Id
|
||||
private UUID id;
|
||||
|
||||
public PictureEntity(Picture picture) {
|
||||
id = picture.id();
|
||||
}
|
||||
|
||||
public Picture toDomain() {
|
||||
return new Picture(id, null);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package org.codiki.infrastructure.picture.repository;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import org.codiki.infrastructure.picture.model.PictureEntity;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
public interface PictureRepository extends JpaRepository<PictureEntity, UUID> {
|
||||
}
|
||||
@@ -47,3 +47,8 @@ CREATE TABLE IF NOT EXISTS publication (
|
||||
);
|
||||
CREATE INDEX publication_author_id_idx ON publication (author_id);
|
||||
CREATE INDEX publication_category_id_idx ON publication (category_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS picture (
|
||||
id UUID NOT NULL,
|
||||
CONSTRAINT picture_pk PRIMARY KEY (id)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user