Skip to content

Commit

Permalink
feat: images json column ์ง€์›
Browse files Browse the repository at this point in the history
  • Loading branch information
umi0410 committed Mar 9, 2022
1 parent 78724f4 commit 6261837
Show file tree
Hide file tree
Showing 6 changed files with 38 additions and 15 deletions.
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ dependencies {
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-aws-messaging
implementation group: 'org.springframework.cloud', name: 'spring-cloud-aws-messaging', version: '2.2.6.RELEASE'

implementation 'com.vladmihalcea:hibernate-types-5:1.2.0'
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import lombok.*;

import java.util.ArrayList;
import java.util.List;

@AllArgsConstructor
Expand All @@ -14,5 +15,6 @@ public class CreateArticleInput {
String board;
String content;
String kind;
List<String> images;
@Builder.Default
List<String> images = new ArrayList<>();
}
21 changes: 15 additions & 6 deletions src/main/java/com/khumu/community/application/entity/Article.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package com.khumu.community.application.entity;

import com.khumu.community.infra.db.JpaConverterJson;
import com.vladmihalcea.hibernate.type.json.JsonStringType;
import lombok.*;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;

import javax.persistence.*;
import java.util.ArrayList;
Expand All @@ -13,6 +16,7 @@
@Getter
@Setter
@Builder
@TypeDef(name = "json", typeClass = JsonStringType.class)
public class Article extends BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand All @@ -22,13 +26,18 @@ public class Article extends BaseEntity {
// LONGTEXT๋Š” VARCHAR๊ฐ€ ์•„๋‹Œ Long text๋กœ ์ €์žฅ๋จ.
@Column(columnDefinition = "LONGTEXT")
String content;

// TODO: new_images -> images colum์œผ๋กœ migrateํ•˜๊ธฐ
// JPA๋Š” MySQL์˜ json ์ปฌ๋Ÿผ์œผ๋กœ๋Š” ๋ชป ์“ฐ๊ณ  Text column์„ json ์ฒ˜๋Ÿผ ํŒŒ์‹ฑํ•ด์„œ ์“ธ ์ˆ˜ ๋ฐ–์— ์—†๋‚˜?
@Convert(converter = JpaConverterJson.class)
@Column(columnDefinition = "LONGTEXT")

@Type( type = "json" )
@Column( columnDefinition = "json")
@Builder.Default
List<String> newImages = new ArrayList<>();
// https://stackoverflow.com/questions/44308167/how-to-map-a-mysql-json-column-to-a-java-entity-property-using-jpa-and-hibernate
List<String> images = new ArrayList<>();
// ์ด๋Ÿฐ ์‹์œผ๋กœ List<String> ๋ฅผ ํ‘œํ˜„ํ•˜๋ คํ•˜๋ฉด ๋‹จ์ˆœ LONGTEXT ํƒ€์ž… ์ปฌ๋Ÿผ์ด ๋˜์–ด๋ฒ„๋ฆผ.
// JPA๋Š” MySQL์˜ json ์ปฌ๋Ÿผ์œผ๋กœ๋Š” ๋ชป ์“ฐ๊ณ  Text column์„ json ์ฒ˜๋Ÿผ ํŒŒ์‹ฑํ•ด์„œ ์“ธ ์ˆ˜ ๋ฐ–์— ์—†๋‚˜?
// @Convert(converter = JpaConverterJson.class)
// @Column(columnDefinition = "LONGTEXT")
// @Builder.Default
// List<String> newImages = new ArrayList<>();

// ๊ฒŒ์‹œ๊ธ€์„ ์กฐํšŒํ•  ๋•Œ๋Š” ํ•ญ์ƒ ์ž‘์„ฑ์ž ์ •๋ณด๋„ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์—
// ๊ฐ์ฒด ์ฐธ์กฐ๋ฅผ ํ•œ๋‹ค.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public ArticleDto write(User requestUser, CreateArticleInput input) {
.title(input.getTitle())
.content(input.getContent())
.isHot(false)
.newImages(input.getImages())
.images(input.getImages())
.kind(input.getKind())
.build();

Expand Down Expand Up @@ -196,7 +196,7 @@ public ArticleDto update(User requestUser, Integer id, UpdateArticleInput input)
article.setContent(input.getContent());
}
if (input.getImages() != null) {
article.setNewImages(input.getImages());
article.setImages(input.getImages());
}
if (input.getKind() != null) {
article.setKind(input.getKind());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,17 +23,11 @@ public interface ArticleMapper {
@Mapping(target="boardName", source="board.name")
@Mapping(target="boardDisplayName", source="board.displayName")
@Mapping(target="createdAt", qualifiedByName="localDateTimeToHumanFriendlyString")
// TODO
// ๋‚˜์ค‘์—” newImages -> images๋กœ ์ปฌ๋Ÿผ ๋ช… ์ž์ฒด๋ฅผ ๋ฐ”๊ฟ”์•ผํ•  ๋“ฏ
@Mapping(target="images", source="newImages")
ArticleDto toDto(Article src);

@Mapping(target="boardName", source="board.name")
@Mapping(target="boardDisplayName", source="board.displayName")
@Mapping(target="createdAt", qualifiedByName="localDateTimeToHumanFriendlyString")
// TODO
// ๋‚˜์ค‘์—” newImages -> images๋กœ ์ปฌ๋Ÿผ ๋ช… ์ž์ฒด๋ฅผ ๋ฐ”๊ฟ”์•ผํ•  ๋“ฏ
@Mapping(target="images", source="newImages")
DetailedArticleDto toDetailedDto(Article src);

Article toEntity(ArticleDto src);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.khumu.community.infra.controller;

import com.khumu.community.application.exception.ForbiddenException;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

@RestControllerAdvice
public class MyAdvice {
@ExceptionHandler(ForbiddenException.class)
public ResponseEntity<DefaultResponse<Void>> forbiddenException(Exception e) {
return ResponseEntity.status(HttpStatus.FORBIDDEN).body(DefaultResponse.<Void>builder()
.message("์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ๊ถŒํ•œ์ด ์—†์Šต๋‹ˆ๋‹ค. (" + e.getMessage() + ")").error(e.getClass().getSimpleName())
.build());
}
}

0 comments on commit 6261837

Please sign in to comment.