From b9738f61929599943835c76d092e72747002260f Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 10:31:46 +0900 Subject: [PATCH 1/9] =?UTF-8?q?chore:=20sign=20word=20db=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration/V4__modify_sign_word_table.sql | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/resources/db/migration/V4__modify_sign_word_table.sql diff --git a/src/main/resources/db/migration/V4__modify_sign_word_table.sql b/src/main/resources/db/migration/V4__modify_sign_word_table.sql new file mode 100644 index 0000000..0631f49 --- /dev/null +++ b/src/main/resources/db/migration/V4__modify_sign_word_table.sql @@ -0,0 +1,24 @@ +ALTER TABLE `sonisori`.`sign_words` + ADD COLUMN `description` VARCHAR(500) NULL AFTER `word`, + ADD COLUMN `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() AFTER `description`, + ADD COLUMN `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP() AFTER `created_at`; + +CREATE TABLE `sonisori`.`sign_word_resources` ( + `id` BIGINT NOT NULL AUTO_INCREMENT, + `sign_word_id` BIGINT NOT NULL, + `type` ENUM('image', 'video') NOT NULL, + `resource_url` VARCHAR(500) NOT NULL, + `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(), + `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(), + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; + +ALTER TABLE `sonisori`.`sign_word_resources` + ADD INDEX `fk_sign-word-resources_sign-word_id_idx` (`sign_word_id` ASC) VISIBLE; + +ALTER TABLE `sonisori`.`sign_word_resources` + ADD CONSTRAINT `fk_sign-word-resources_sign-word_id` + FOREIGN KEY (`sign_word_id`) + REFERENCES `sonisori`.`sign_words` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION; From 7c892054d3cd7b4ac5f1e05d90c61730b398bf61 Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 11:15:47 +0900 Subject: [PATCH 2/9] =?UTF-8?q?feat:=20entity=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sonisori/common/enums/ResourceType.java | 5 ++ .../sonisori/sonisori/entity/SignWord.java | 7 ++- .../sonisori/entity/SignWordResource.java | 50 +++++++++++++++++++ .../migration/V4__modify_sign_word_table.sql | 2 +- 4 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 src/main/java/site/sonisori/sonisori/common/enums/ResourceType.java create mode 100644 src/main/java/site/sonisori/sonisori/entity/SignWordResource.java diff --git a/src/main/java/site/sonisori/sonisori/common/enums/ResourceType.java b/src/main/java/site/sonisori/sonisori/common/enums/ResourceType.java new file mode 100644 index 0000000..c313b8b --- /dev/null +++ b/src/main/java/site/sonisori/sonisori/common/enums/ResourceType.java @@ -0,0 +1,5 @@ +package site.sonisori.sonisori.common.enums; + +public enum ResourceType { + image, video +} diff --git a/src/main/java/site/sonisori/sonisori/entity/SignWord.java b/src/main/java/site/sonisori/sonisori/entity/SignWord.java index d4d9413..fb32fbe 100644 --- a/src/main/java/site/sonisori/sonisori/entity/SignWord.java +++ b/src/main/java/site/sonisori/sonisori/entity/SignWord.java @@ -12,6 +12,7 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import site.sonisori.sonisori.common.DateEntity; @Entity @Table(name = "sign_words") @@ -19,7 +20,7 @@ @Builder @NoArgsConstructor @AllArgsConstructor -public class SignWord { +public class SignWord extends DateEntity { @Id @Column(name = "id") @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -29,4 +30,8 @@ public class SignWord { @Column(name = "word") @Size(max = 50) private String word; + + @Column(name = "description") + @Size(max = 500) + private String description; } diff --git a/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java b/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java new file mode 100644 index 0000000..550c456 --- /dev/null +++ b/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java @@ -0,0 +1,50 @@ +package site.sonisori.sonisori.entity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.EnumType; +import jakarta.persistence.Enumerated; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.Table; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import site.sonisori.sonisori.common.DateEntity; +import site.sonisori.sonisori.common.enums.ResourceType; + +@Entity +@Table(name = "sign_word_resources") +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SignWordResource extends DateEntity { + @Id + @Column(name = "id") + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @ManyToOne(fetch = FetchType.LAZY) + @NotNull + @JoinColumn(name = "sign_word_id") + private SignWord signWord; + + @Column(name = "resouce_type") + @Enumerated(EnumType.STRING) + @NotNull + private ResourceType resourceType; + + @NotBlank + @Column("resource_url") + @Size(max = 500) + private String resourceUrl; +} diff --git a/src/main/resources/db/migration/V4__modify_sign_word_table.sql b/src/main/resources/db/migration/V4__modify_sign_word_table.sql index 0631f49..46353e8 100644 --- a/src/main/resources/db/migration/V4__modify_sign_word_table.sql +++ b/src/main/resources/db/migration/V4__modify_sign_word_table.sql @@ -6,7 +6,7 @@ ALTER TABLE `sonisori`.`sign_words` CREATE TABLE `sonisori`.`sign_word_resources` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `sign_word_id` BIGINT NOT NULL, - `type` ENUM('image', 'video') NOT NULL, + `resource_type` ENUM('image', 'video') NOT NULL, `resource_url` VARCHAR(500) NOT NULL, `created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(), `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(), From 504d4d38a70a39095a79b9fa0e958f3ab077529f Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 11:16:29 +0900 Subject: [PATCH 3/9] =?UTF-8?q?refactor:=20value=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/site/sonisori/sonisori/entity/SignWordResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java b/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java index 550c456..65e21c7 100644 --- a/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java +++ b/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java @@ -44,7 +44,7 @@ public class SignWordResource extends DateEntity { private ResourceType resourceType; @NotBlank - @Column("resource_url") + @Column(name = "resource_url") @Size(max = 500) private String resourceUrl; } From 3dc5a0e549fd27bb7148188cedb251d18f29c06b Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 11:56:06 +0900 Subject: [PATCH 4/9] =?UTF-8?q?refactor:=20=EC=98=A4=ED=83=80=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/site/sonisori/sonisori/entity/SignWordResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java b/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java index 65e21c7..5855e14 100644 --- a/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java +++ b/src/main/java/site/sonisori/sonisori/entity/SignWordResource.java @@ -38,7 +38,7 @@ public class SignWordResource extends DateEntity { @JoinColumn(name = "sign_word_id") private SignWord signWord; - @Column(name = "resouce_type") + @Column(name = "resource_type") @Enumerated(EnumType.STRING) @NotNull private ResourceType resourceType; From 2e6d7b2a27ff587bb7ebafae0c74808201bcb908 Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 13:11:53 +0900 Subject: [PATCH 5/9] =?UTF-8?q?feat:=20dto,=20repository,=20service=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/signword/SignWordResponse.java | 10 ++++++ .../repository/SignWordRepository.java | 10 ++++++ .../sonisori/service/SignWordService.java | 31 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java create mode 100644 src/main/java/site/sonisori/sonisori/repository/SignWordRepository.java create mode 100644 src/main/java/site/sonisori/sonisori/service/SignWordService.java diff --git a/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java b/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java new file mode 100644 index 0000000..2faccac --- /dev/null +++ b/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java @@ -0,0 +1,10 @@ +package site.sonisori.sonisori.dto.signword; + +import lombok.Builder; + +@Builder +public record SignWordResponse( + Long id, + String word +) { +} diff --git a/src/main/java/site/sonisori/sonisori/repository/SignWordRepository.java b/src/main/java/site/sonisori/sonisori/repository/SignWordRepository.java new file mode 100644 index 0000000..74a9fe8 --- /dev/null +++ b/src/main/java/site/sonisori/sonisori/repository/SignWordRepository.java @@ -0,0 +1,10 @@ +package site.sonisori.sonisori.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import site.sonisori.sonisori.entity.SignWord; + +@Repository +public interface SignWordRepository extends JpaRepository { +} diff --git a/src/main/java/site/sonisori/sonisori/service/SignWordService.java b/src/main/java/site/sonisori/sonisori/service/SignWordService.java new file mode 100644 index 0000000..80bcf71 --- /dev/null +++ b/src/main/java/site/sonisori/sonisori/service/SignWordService.java @@ -0,0 +1,31 @@ +package site.sonisori.sonisori.service; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Service; + +import lombok.RequiredArgsConstructor; +import site.sonisori.sonisori.dto.signword.SignWordResponse; +import site.sonisori.sonisori.entity.SignWord; +import site.sonisori.sonisori.repository.SignWordRepository; + +@Service +@RequiredArgsConstructor +public class SignWordService { + private final SignWordRepository signWordRepository; + + public List fetchSignWords() { + List signWords = signWordRepository.findAll(); + return signWords.stream() + .map(this::buildSignWordResponse) + .collect(Collectors.toList()); + } + + private SignWordResponse buildSignWordResponse(SignWord signWord) { + return SignWordResponse.builder() + .id(signWord.getId()) + .word(signWord.getWord()) + .build(); + } +} From b3954176d3962a21f16887a53eec50c4ec216212 Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 13:31:34 +0900 Subject: [PATCH 6/9] =?UTF-8?q?feat:=20controller=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/SignWordController.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/site/sonisori/sonisori/controller/SignWordController.java diff --git a/src/main/java/site/sonisori/sonisori/controller/SignWordController.java b/src/main/java/site/sonisori/sonisori/controller/SignWordController.java new file mode 100644 index 0000000..53f0a44 --- /dev/null +++ b/src/main/java/site/sonisori/sonisori/controller/SignWordController.java @@ -0,0 +1,25 @@ +package site.sonisori.sonisori.controller; + +import java.util.List; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.RequiredArgsConstructor; +import site.sonisori.sonisori.dto.signword.SignWordResponse; +import site.sonisori.sonisori.service.SignWordService; + +@RestController +@RequestMapping("/api") +@RequiredArgsConstructor +public class SignWordController { + private final SignWordService signWordService; + + @GetMapping("/words") + public ResponseEntity> getAllSignWords() { + List signWords = signWordService.fetchSignWords(); + return ResponseEntity.ok(signWords); + } +} From e478345bf3250d35158cf6e060af22c23481f94d Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 14:34:01 +0900 Subject: [PATCH 7/9] =?UTF-8?q?refactor:=20=EC=BD=94=EB=93=9C=20=EB=A6=AC?= =?UTF-8?q?=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sonisori/controller/SignWordController.java | 2 +- .../sonisori/dto/signword/SignWordResponse.java | 3 --- .../java/site/sonisori/sonisori/entity/SignWord.java | 5 +++++ .../sonisori/sonisori/service/SignWordService.java | 11 ++--------- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/main/java/site/sonisori/sonisori/controller/SignWordController.java b/src/main/java/site/sonisori/sonisori/controller/SignWordController.java index 53f0a44..209aa7a 100644 --- a/src/main/java/site/sonisori/sonisori/controller/SignWordController.java +++ b/src/main/java/site/sonisori/sonisori/controller/SignWordController.java @@ -19,7 +19,7 @@ public class SignWordController { @GetMapping("/words") public ResponseEntity> getAllSignWords() { - List signWords = signWordService.fetchSignWords(); + List signWords = signWordService.getAllSignWords(); return ResponseEntity.ok(signWords); } } diff --git a/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java b/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java index 2faccac..3b91d59 100644 --- a/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java +++ b/src/main/java/site/sonisori/sonisori/dto/signword/SignWordResponse.java @@ -1,8 +1,5 @@ package site.sonisori.sonisori.dto.signword; -import lombok.Builder; - -@Builder public record SignWordResponse( Long id, String word diff --git a/src/main/java/site/sonisori/sonisori/entity/SignWord.java b/src/main/java/site/sonisori/sonisori/entity/SignWord.java index fb32fbe..ff70cfc 100644 --- a/src/main/java/site/sonisori/sonisori/entity/SignWord.java +++ b/src/main/java/site/sonisori/sonisori/entity/SignWord.java @@ -13,6 +13,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import site.sonisori.sonisori.common.DateEntity; +import site.sonisori.sonisori.dto.signword.SignWordResponse; @Entity @Table(name = "sign_words") @@ -34,4 +35,8 @@ public class SignWord extends DateEntity { @Column(name = "description") @Size(max = 500) private String description; + + public SignWordResponse toDTO() { + return new SignWordResponse(this.id, this.word); + } } diff --git a/src/main/java/site/sonisori/sonisori/service/SignWordService.java b/src/main/java/site/sonisori/sonisori/service/SignWordService.java index 80bcf71..d35096f 100644 --- a/src/main/java/site/sonisori/sonisori/service/SignWordService.java +++ b/src/main/java/site/sonisori/sonisori/service/SignWordService.java @@ -15,17 +15,10 @@ public class SignWordService { private final SignWordRepository signWordRepository; - public List fetchSignWords() { + public List getAllSignWords() { List signWords = signWordRepository.findAll(); return signWords.stream() - .map(this::buildSignWordResponse) + .map(SignWord::toDTO) .collect(Collectors.toList()); } - - private SignWordResponse buildSignWordResponse(SignWord signWord) { - return SignWordResponse.builder() - .id(signWord.getId()) - .word(signWord.getWord()) - .build(); - } } From 8618652c826cb441568ca8ba8e47c955dc5156c7 Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 14:45:16 +0900 Subject: [PATCH 8/9] =?UTF-8?q?style:=20checkstyle=20=EC=98=A4=EB=A5=98=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/site/sonisori/sonisori/entity/SignWord.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/site/sonisori/sonisori/entity/SignWord.java b/src/main/java/site/sonisori/sonisori/entity/SignWord.java index ff70cfc..a0323e0 100644 --- a/src/main/java/site/sonisori/sonisori/entity/SignWord.java +++ b/src/main/java/site/sonisori/sonisori/entity/SignWord.java @@ -36,7 +36,7 @@ public class SignWord extends DateEntity { @Size(max = 500) private String description; - public SignWordResponse toDTO() { + public SignWordResponse toDto() { return new SignWordResponse(this.id, this.word); } } From c49d96753235a27175fe04abd634e2518c23371f Mon Sep 17 00:00:00 2001 From: Hanbi Date: Thu, 5 Dec 2024 15:09:36 +0900 Subject: [PATCH 9/9] =?UTF-8?q?refactor:=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/site/sonisori/sonisori/service/SignWordService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/site/sonisori/sonisori/service/SignWordService.java b/src/main/java/site/sonisori/sonisori/service/SignWordService.java index d35096f..c5410ee 100644 --- a/src/main/java/site/sonisori/sonisori/service/SignWordService.java +++ b/src/main/java/site/sonisori/sonisori/service/SignWordService.java @@ -18,7 +18,7 @@ public class SignWordService { public List getAllSignWords() { List signWords = signWordRepository.findAll(); return signWords.stream() - .map(SignWord::toDTO) + .map(SignWord::toDto) .collect(Collectors.toList()); } }