From f13edddb07af36f524cdd23be8965a1ba2320f7a Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 4 Feb 2024 22:18:12 +0900 Subject: [PATCH 01/12] =?UTF-8?q?[#35]=20feat:=20Setting=20Entity=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/domain/setting/entity/Setting.java | 38 +++++++++++++++++++ .../domain/setting/enumerate/DomainType.java | 4 ++ 2 files changed, 42 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java create mode 100644 src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java diff --git a/src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java b/src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java new file mode 100644 index 00000000..f2e06135 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java @@ -0,0 +1,38 @@ +package com.gongjakso.server.domain.setting.entity; + +import com.gongjakso.server.domain.setting.enumerate.DomainType; +import com.gongjakso.server.global.common.BaseTimeEntity; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Entity +@Table(name = "setting") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Setting extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "setting_id", nullable = false, columnDefinition = "bigint") + private Long settingId; + + @Column(name = "domain_type", columnDefinition = "varchar(100)") + @Enumerated(EnumType.STRING) + private DomainType domainType; + + @Column(name = "image_url", columnDefinition = "text") + private String imageUrl; + + @Column(name = "link_url", columnDefinition = "text") + private String linkUrl; + + @Builder + public Setting(String domainType, String imageUrl, String linkUrl) { + this.domainType = DomainType.valueOf(domainType); + this.imageUrl = imageUrl; + this.linkUrl = linkUrl; + } +} diff --git a/src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java b/src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java new file mode 100644 index 00000000..881747c3 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java @@ -0,0 +1,4 @@ +package com.gongjakso.server.domain.setting.enumerate; + +public enum DomainType { +} From 373333c44676214de8a243331f841d4a5e119970 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 4 Feb 2024 23:25:56 +0900 Subject: [PATCH 02/12] =?UTF-8?q?[#36]=20feat:=20Email=20Entity=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/domain/email/entity/Email.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/domain/email/entity/Email.java diff --git a/src/main/java/com/gongjakso/server/domain/email/entity/Email.java b/src/main/java/com/gongjakso/server/domain/email/entity/Email.java new file mode 100644 index 00000000..dcfccf07 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/email/entity/Email.java @@ -0,0 +1,35 @@ +package com.gongjakso.server.domain.email.entity; + +import com.gongjakso.server.global.common.BaseTimeEntity; +import jakarta.persistence.*; +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.SQLDelete; + +@Getter +@Entity +@Table(name = "email") +@SQLDelete(sql = "UPDATE email SET deleted_at = NOW() where email_id = ?") +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Email extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "email_id", nullable = false, columnDefinition = "bigint") + private Long emailId; + + @Column(name = "address", nullable = false, columnDefinition = "text") + private String address; + + // 이메일 수신 동의 여부 (추후, 미동의로 바뀔 경우 대비) + @Column(name = "is_receive", nullable = false, columnDefinition = "tinyint") + private Boolean isReceive; + + @Builder + public Email(String address) { + this.address = address; + this.isReceive = Boolean.TRUE; + } +} From 5b2bd5b974fd681f6bb6dfa56d8563912ec9c2a7 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 4 Feb 2024 23:26:02 +0900 Subject: [PATCH 03/12] =?UTF-8?q?[#36]=20feat:=20Email=20DTO=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/email/dto/request/EmailReq.java | 19 ++++++++++++++++ .../domain/email/dto/response/EmailRes.java | 22 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/domain/email/dto/request/EmailReq.java create mode 100644 src/main/java/com/gongjakso/server/domain/email/dto/response/EmailRes.java diff --git a/src/main/java/com/gongjakso/server/domain/email/dto/request/EmailReq.java b/src/main/java/com/gongjakso/server/domain/email/dto/request/EmailReq.java new file mode 100644 index 00000000..db94474d --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/email/dto/request/EmailReq.java @@ -0,0 +1,19 @@ +package com.gongjakso.server.domain.email.dto.request; + +import com.gongjakso.server.domain.email.entity.Email; +import jakarta.validation.constraints.NotNull; +import lombok.Builder; + +@Builder +public record EmailReq( + @NotNull(message = "이메일 정보가 담겨있지 않습니다.") + @jakarta.validation.constraints.Email(message = "유효한 이메일 형식이 아닙니다.") + String address +) { + + public Email from() { + return Email.builder() + .address(this.address) + .build(); + } +} diff --git a/src/main/java/com/gongjakso/server/domain/email/dto/response/EmailRes.java b/src/main/java/com/gongjakso/server/domain/email/dto/response/EmailRes.java new file mode 100644 index 00000000..ba962270 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/email/dto/response/EmailRes.java @@ -0,0 +1,22 @@ +package com.gongjakso.server.domain.email.dto.response; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.gongjakso.server.domain.email.entity.Email; +import lombok.Builder; + +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public record EmailRes( + Long emailId, + String address, + Boolean isReceive +) { + + public static EmailRes of(Email email) { + return EmailRes.builder() + .emailId(email.getEmailId()) + .address(email.getAddress()) + .isReceive(email.getIsReceive()) + .build(); + } +} From 459b40dd77dd13e8f41642ca4c7d7b57ec967ead Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 4 Feb 2024 23:26:10 +0900 Subject: [PATCH 04/12] =?UTF-8?q?[#36]=20feat:=20Email=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D=20API=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../email/controller/EmailController.java | 29 ++++++++++++++++ .../email/repository/EmailRepository.java | 9 +++++ .../domain/email/service/EmailService.java | 34 +++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/domain/email/controller/EmailController.java create mode 100644 src/main/java/com/gongjakso/server/domain/email/repository/EmailRepository.java create mode 100644 src/main/java/com/gongjakso/server/domain/email/service/EmailService.java diff --git a/src/main/java/com/gongjakso/server/domain/email/controller/EmailController.java b/src/main/java/com/gongjakso/server/domain/email/controller/EmailController.java new file mode 100644 index 00000000..0cb43793 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/email/controller/EmailController.java @@ -0,0 +1,29 @@ +package com.gongjakso.server.domain.email.controller; + +import com.gongjakso.server.domain.email.dto.request.EmailReq; +import com.gongjakso.server.domain.email.dto.response.EmailRes; +import com.gongjakso.server.domain.email.service.EmailService; +import com.gongjakso.server.global.common.ApplicationResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("api/v1/email") +@Tag(name = "출시 알림 수신", description = "출시 알림 수신 관련하여, 정보 저장 및 정보 조회에 사용되는 API") +public class EmailController { + + private final EmailService emailService; + + @Operation(description = "출시 알림 수신 이메일 등록 API") + @PostMapping("") + public ApplicationResponse registerEmail(@Valid @RequestBody EmailReq emailReq) { + return ApplicationResponse.ok(emailService.registerEmail(emailReq)); + } +} diff --git a/src/main/java/com/gongjakso/server/domain/email/repository/EmailRepository.java b/src/main/java/com/gongjakso/server/domain/email/repository/EmailRepository.java new file mode 100644 index 00000000..08898c50 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/email/repository/EmailRepository.java @@ -0,0 +1,9 @@ +package com.gongjakso.server.domain.email.repository; + +import com.gongjakso.server.domain.email.entity.Email; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface EmailRepository extends JpaRepository { + + Boolean existsEmailByAddressAndDeletedAtIsNull(String address); +} diff --git a/src/main/java/com/gongjakso/server/domain/email/service/EmailService.java b/src/main/java/com/gongjakso/server/domain/email/service/EmailService.java new file mode 100644 index 00000000..179d6687 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/email/service/EmailService.java @@ -0,0 +1,34 @@ +package com.gongjakso.server.domain.email.service; + +import com.gongjakso.server.domain.email.dto.request.EmailReq; +import com.gongjakso.server.domain.email.dto.response.EmailRes; +import com.gongjakso.server.domain.email.entity.Email; +import com.gongjakso.server.domain.email.repository.EmailRepository; +import com.gongjakso.server.global.exception.ApplicationException; +import com.gongjakso.server.global.exception.ErrorCode; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class EmailService { + + private final EmailRepository emailRepository; + + @Transactional + public EmailRes registerEmail(EmailReq emailReq) { + // Validation + if(emailRepository.existsEmailByAddressAndDeletedAtIsNull(emailReq.address())) { + throw new ApplicationException(ErrorCode.ALREADY_EXIST_EXCEPTION); + } + + // Business Logic + Email email = emailReq.from(); + Email saveEmail = emailRepository.save(email); + + // Response + return EmailRes.of(saveEmail); + } +} From 11ef52fc8e2cb77ec8a77610bddd07986ac31b3b Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Sun, 4 Feb 2024 23:31:11 +0900 Subject: [PATCH 05/12] =?UTF-8?q?[#36]=20chore:=20Common=20Error=20Code=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/gongjakso/server/global/exception/ErrorCode.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/com/gongjakso/server/global/exception/ErrorCode.java b/src/main/java/com/gongjakso/server/global/exception/ErrorCode.java index b383302c..55f5e931 100644 --- a/src/main/java/com/gongjakso/server/global/exception/ErrorCode.java +++ b/src/main/java/com/gongjakso/server/global/exception/ErrorCode.java @@ -19,6 +19,7 @@ public enum ErrorCode { UNAUTHORIZED_EXCEPTION(HttpStatus.UNAUTHORIZED, 2003, "권한이 없는 요청입니다."), ALREADY_DELETE_EXCEPTION(HttpStatus.BAD_REQUEST, 2004, "이미 삭제된 리소스입니다."), FORBIDDEN_EXCEPTION(HttpStatus.FORBIDDEN, 2005, "인가되지 않는 요청입니다."), + ALREADY_EXIST_EXCEPTION(HttpStatus.BAD_REQUEST, 2006, "이미 존재하는 리소스입니다."), // 3000: Auth Error From 6dad73bef83a9ca21f6a890de0979e76dc282740 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Mon, 5 Feb 2024 00:08:41 +0900 Subject: [PATCH 06/12] =?UTF-8?q?[#35]=20refactor:=20Setting=EC=97=90?= =?UTF-8?q?=EC=84=9C=20Banner=EB=A1=9C=20=EB=8F=84=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/Banner.java} | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) rename src/main/java/com/gongjakso/server/domain/{setting/entity/Setting.java => banner/entity/Banner.java} (54%) diff --git a/src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java b/src/main/java/com/gongjakso/server/domain/banner/entity/Banner.java similarity index 54% rename from src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java rename to src/main/java/com/gongjakso/server/domain/banner/entity/Banner.java index f2e06135..129574cd 100644 --- a/src/main/java/com/gongjakso/server/domain/setting/entity/Setting.java +++ b/src/main/java/com/gongjakso/server/domain/banner/entity/Banner.java @@ -1,6 +1,6 @@ -package com.gongjakso.server.domain.setting.entity; +package com.gongjakso.server.domain.banner.entity; -import com.gongjakso.server.domain.setting.enumerate.DomainType; +import com.gongjakso.server.domain.banner.enumerate.DomainType; import com.gongjakso.server.global.common.BaseTimeEntity; import jakarta.persistence.*; import lombok.AccessLevel; @@ -10,14 +10,14 @@ @Getter @Entity -@Table(name = "setting") +@Table(name = "banner") @NoArgsConstructor(access = AccessLevel.PROTECTED) -public class Setting extends BaseTimeEntity { +public class Banner extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "setting_id", nullable = false, columnDefinition = "bigint") - private Long settingId; + @Column(name = "banner_id", nullable = false, columnDefinition = "bigint") + private Long bannerId; @Column(name = "domain_type", columnDefinition = "varchar(100)") @Enumerated(EnumType.STRING) @@ -29,10 +29,18 @@ public class Setting extends BaseTimeEntity { @Column(name = "link_url", columnDefinition = "text") private String linkUrl; + @Column(name = "priority", nullable = false, columnDefinition = "int") + private Integer priority; + + @Column(name = "is_post", nullable = false, columnDefinition = "tinyint") + private Boolean isPost; + @Builder - public Setting(String domainType, String imageUrl, String linkUrl) { + public Banner(String domainType, String imageUrl, String linkUrl, Integer priority) { this.domainType = DomainType.valueOf(domainType); this.imageUrl = imageUrl; this.linkUrl = linkUrl; + this.priority = priority; + this.isPost = Boolean.TRUE; } } From d783858bd0ce4d3efd8699730387b08210948e77 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Mon, 5 Feb 2024 00:08:55 +0900 Subject: [PATCH 07/12] =?UTF-8?q?[#35]=20feat:=20=EB=B0=B0=EB=84=88=20?= =?UTF-8?q?=EC=9C=84=EC=B9=98=EB=B3=84=20Enum=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/domain/banner/enumerate/DomainType.java | 12 ++++++++++++ .../server/domain/setting/enumerate/DomainType.java | 4 ---- 2 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 src/main/java/com/gongjakso/server/domain/banner/enumerate/DomainType.java delete mode 100644 src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java diff --git a/src/main/java/com/gongjakso/server/domain/banner/enumerate/DomainType.java b/src/main/java/com/gongjakso/server/domain/banner/enumerate/DomainType.java new file mode 100644 index 00000000..1d1485f9 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/banner/enumerate/DomainType.java @@ -0,0 +1,12 @@ +package com.gongjakso.server.domain.banner.enumerate; + +public enum DomainType { + // 메인 페이지 + MAIN, + + // 프로젝트, + PROJECT, + + // 공모전 + CONTEST +} diff --git a/src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java b/src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java deleted file mode 100644 index 881747c3..00000000 --- a/src/main/java/com/gongjakso/server/domain/setting/enumerate/DomainType.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.gongjakso.server.domain.setting.enumerate; - -public enum DomainType { -} From 75cade1a31c1c655d5cef84b7324f1102baf0727 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Mon, 5 Feb 2024 00:09:10 +0900 Subject: [PATCH 08/12] =?UTF-8?q?[#35]=20feat:=20Banner=20Response=20DTO?= =?UTF-8?q?=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/banner/dto/response/BannerRes.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/domain/banner/dto/response/BannerRes.java diff --git a/src/main/java/com/gongjakso/server/domain/banner/dto/response/BannerRes.java b/src/main/java/com/gongjakso/server/domain/banner/dto/response/BannerRes.java new file mode 100644 index 00000000..197ffe1a --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/banner/dto/response/BannerRes.java @@ -0,0 +1,29 @@ +package com.gongjakso.server.domain.banner.dto.response; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.gongjakso.server.domain.banner.entity.Banner; +import com.gongjakso.server.domain.banner.enumerate.DomainType; +import lombok.Builder; + +@Builder +@JsonInclude(JsonInclude.Include.NON_NULL) +public record BannerRes( + Long bannerId, + DomainType domainType, + String imageUrl, + String linkUrl, + Integer priority, + Boolean isPost +) { + + public static BannerRes of(Banner banner) { + return BannerRes.builder() + .bannerId(banner.getBannerId()) + .domainType(banner.getDomainType()) + .imageUrl(banner.getImageUrl()) + .linkUrl(banner.getLinkUrl()) + .priority(banner.getPriority()) + .isPost(banner.getIsPost()) + .build(); + } +} From 17151cd97055f8921eb07e460fd849ee9543a06e Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Mon, 5 Feb 2024 00:09:22 +0900 Subject: [PATCH 09/12] =?UTF-8?q?[#35]=20feat:=20Banner=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=EB=B3=84=20=EB=B0=98=ED=99=98=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../banner/controller/BannerController.java | 40 +++++++++++++++ .../banner/repository/BannerRepository.java | 12 +++++ .../domain/banner/service/BannerService.java | 50 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java create mode 100644 src/main/java/com/gongjakso/server/domain/banner/repository/BannerRepository.java create mode 100644 src/main/java/com/gongjakso/server/domain/banner/service/BannerService.java diff --git a/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java b/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java new file mode 100644 index 00000000..354aef7a --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java @@ -0,0 +1,40 @@ +package com.gongjakso.server.domain.banner.controller; + +import com.gongjakso.server.domain.banner.dto.response.BannerRes; +import com.gongjakso.server.domain.banner.service.BannerService; +import com.gongjakso.server.global.common.ApplicationResponse; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/v1/setting") +@Tag(name = "Banner", description = "메인 페이지, 공고 페이지 등의 배너 이미지 정보 반환 API") +public class BannerController { + + private final BannerService bannerService; + + @Operation(description = "메인 페이지 공고 리스트 반환") + @GetMapping("/main") + public ApplicationResponse> getMainImageList() { + return ApplicationResponse.ok(bannerService.getMainImageList()); + } + + @Operation(description = "프로젝트 공고 페이지 배너 리스트 반환") + @GetMapping("/project") + public ApplicationResponse> getProjectImageList() { + return ApplicationResponse.ok(bannerService.getProjectImageList()); + } + + @Operation(description = "공모전 공고 페이지 배너 리스트 반환") + @GetMapping("/project") + public ApplicationResponse> getContestImageList() { + return ApplicationResponse.ok(bannerService.getContestImageList()); + } +} diff --git a/src/main/java/com/gongjakso/server/domain/banner/repository/BannerRepository.java b/src/main/java/com/gongjakso/server/domain/banner/repository/BannerRepository.java new file mode 100644 index 00000000..c514189f --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/banner/repository/BannerRepository.java @@ -0,0 +1,12 @@ +package com.gongjakso.server.domain.banner.repository; + +import com.gongjakso.server.domain.banner.entity.Banner; +import com.gongjakso.server.domain.banner.enumerate.DomainType; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.List; + +public interface BannerRepository extends JpaRepository { + + List findAllByDomainTypeAndDeletedAtIsNullOrderByPriorityAsc(DomainType domainType); +} diff --git a/src/main/java/com/gongjakso/server/domain/banner/service/BannerService.java b/src/main/java/com/gongjakso/server/domain/banner/service/BannerService.java new file mode 100644 index 00000000..5e1c0685 --- /dev/null +++ b/src/main/java/com/gongjakso/server/domain/banner/service/BannerService.java @@ -0,0 +1,50 @@ +package com.gongjakso.server.domain.banner.service; + +import com.gongjakso.server.domain.banner.dto.response.BannerRes; +import com.gongjakso.server.domain.banner.entity.Banner; +import com.gongjakso.server.domain.banner.enumerate.DomainType; +import com.gongjakso.server.domain.banner.repository.BannerRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class BannerService { + + private final BannerRepository bannerRepository; + + public List getMainImageList() { + // Business Logic + List bannerList = bannerRepository.findAllByDomainTypeAndDeletedAtIsNullOrderByPriorityAsc(DomainType.MAIN); + + // Response + return bannerList.stream() + .map(BannerRes::of) + .collect(Collectors.toList()); + } + + public List getProjectImageList() { + // Business Logic + List bannerList = bannerRepository.findAllByDomainTypeAndDeletedAtIsNullOrderByPriorityAsc(DomainType.PROJECT); + + // Response + return bannerList.stream() + .map(BannerRes::of) + .collect(Collectors.toList()); + } + + public List getContestImageList() { + // Business Logic + List bannerList = bannerRepository.findAllByDomainTypeAndDeletedAtIsNullOrderByPriorityAsc(DomainType.CONTEST); + + // Response + return bannerList.stream() + .map(BannerRes::of) + .collect(Collectors.toList()); + } +} From 4f433c1e96a88d26299a13a14315b27dd98003f2 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Mon, 5 Feb 2024 00:12:29 +0900 Subject: [PATCH 10/12] =?UTF-8?q?[#35]=20fix:=20API=20Endpoint=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 --- .../server/domain/banner/controller/BannerController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java b/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java index 354aef7a..cf165f36 100644 --- a/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java +++ b/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java @@ -14,7 +14,7 @@ @RestController @RequiredArgsConstructor -@RequestMapping("/api/v1/setting") +@RequestMapping("/api/v1/banner") @Tag(name = "Banner", description = "메인 페이지, 공고 페이지 등의 배너 이미지 정보 반환 API") public class BannerController { From 9c1fbe26f11e67d0023dfcd3e01f0d724985d636 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Mon, 5 Feb 2024 23:47:07 +0900 Subject: [PATCH 11/12] =?UTF-8?q?[#29]=20chore:=20JWT=20Token=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=A0=20=EC=88=98=20=EC=9E=88=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/global/config/SwaggerConfig.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/gongjakso/server/global/config/SwaggerConfig.java b/src/main/java/com/gongjakso/server/global/config/SwaggerConfig.java index dcbc8dc6..c78b15d3 100644 --- a/src/main/java/com/gongjakso/server/global/config/SwaggerConfig.java +++ b/src/main/java/com/gongjakso/server/global/config/SwaggerConfig.java @@ -3,33 +3,33 @@ import io.swagger.v3.oas.models.Components; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class SwaggerConfig { - private static final String BEARER_TOKEN_PREFIX = "Bearer"; - @Bean public OpenAPI openAPI() { Info info = new Info().title("Gongjakso Server Swagger UI") .description("공작소 서버 API 테스트 페이지입니다.") .version("v0.0.1"); -// String jwtSchemeName = TokenProvider.AUTHORIZATION_HEADER; -// SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwtSchemeName); -// Components components = new Components() -// .addSecuritySchemes(jwtSchemeName, new SecurityScheme() -// .name(jwtSchemeName) -// .type(SecurityScheme.Type.HTTP) -// .scheme(BEARER_TOKEN_PREFIX) -// .bearerFormat(TokenProvider.TYPE)); + String jwtSchemeName = "JWT Authentication"; + SecurityRequirement securityRequirement = new SecurityRequirement().addList(jwtSchemeName); + Components components = new Components() + .addSecuritySchemes(jwtSchemeName, new SecurityScheme() + .name(jwtSchemeName) + .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT")); // Swagger UI 접속 후, 딱 한 번만 accessToken을 입력해주면 모든 API에 토큰 인증 작업이 적용됩니다. return new OpenAPI() .info(info) - //.addSecurityItem(securityRequirement) - .components(new Components()); + .addSecurityItem(securityRequirement) + .components(components); } } \ No newline at end of file From 886e5b7129d222d96dac5490c3b672409be3c708 Mon Sep 17 00:00:00 2001 From: dl-00-e8 Date: Tue, 6 Feb 2024 00:17:44 +0900 Subject: [PATCH 12/12] =?UTF-8?q?[#35]=20fix:=20API=20Endpoint=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/domain/banner/controller/BannerController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java b/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java index cf165f36..3a55839e 100644 --- a/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java +++ b/src/main/java/com/gongjakso/server/domain/banner/controller/BannerController.java @@ -33,7 +33,7 @@ public ApplicationResponse> getProjectImageList() { } @Operation(description = "공모전 공고 페이지 배너 리스트 반환") - @GetMapping("/project") + @GetMapping("/content") public ApplicationResponse> getContestImageList() { return ApplicationResponse.ok(bannerService.getContestImageList()); }