diff --git a/src/main/java/org/runnect/server/banner/controller/BannerController.java b/src/main/java/org/runnect/server/banner/controller/BannerController.java new file mode 100644 index 0000000..b745fbc --- /dev/null +++ b/src/main/java/org/runnect/server/banner/controller/BannerController.java @@ -0,0 +1,26 @@ +package org.runnect.server.banner.controller; + +import lombok.RequiredArgsConstructor; +import org.runnect.server.banner.dto.response.GetBannerResponseDto; +import org.runnect.server.banner.service.BannerService; +import org.runnect.server.common.constant.SuccessStatus; +import org.runnect.server.common.dto.ApiResponseDto; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/banner") +public class BannerController { + + private final BannerService bannerService; + + @GetMapping + @ResponseStatus(HttpStatus.OK) + public ApiResponseDto getBanners() { + return ApiResponseDto.success(SuccessStatus.GET_BANNER_SUCCESS, bannerService.getBanners()); + } +} diff --git a/src/main/java/org/runnect/server/banner/dto/response/BannerResponse.java b/src/main/java/org/runnect/server/banner/dto/response/BannerResponse.java new file mode 100644 index 0000000..eab85ff --- /dev/null +++ b/src/main/java/org/runnect/server/banner/dto/response/BannerResponse.java @@ -0,0 +1,19 @@ +package org.runnect.server.banner.dto.response; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class BannerResponse { + private Integer index; + private String imageUrl; + private String linkUrl; + + public static BannerResponse of(Integer index, String imageUrl, String linkUrl) { + return new BannerResponse(index, imageUrl, linkUrl); + } +} diff --git a/src/main/java/org/runnect/server/banner/dto/response/GetBannerResponseDto.java b/src/main/java/org/runnect/server/banner/dto/response/GetBannerResponseDto.java new file mode 100644 index 0000000..b9657f9 --- /dev/null +++ b/src/main/java/org/runnect/server/banner/dto/response/GetBannerResponseDto.java @@ -0,0 +1,19 @@ +package org.runnect.server.banner.dto.response; + +import java.util.List; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor(access = AccessLevel.PRIVATE) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class GetBannerResponseDto { + private List banners; + + public static GetBannerResponseDto of(List banners) { + return new GetBannerResponseDto(banners); + } +} diff --git a/src/main/java/org/runnect/server/banner/entity/Banner.java b/src/main/java/org/runnect/server/banner/entity/Banner.java new file mode 100644 index 0000000..4f229c4 --- /dev/null +++ b/src/main/java/org/runnect/server/banner/entity/Banner.java @@ -0,0 +1,39 @@ +package org.runnect.server.banner.entity; + +import javax.persistence.*; + +import lombok.AccessLevel; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.runnect.server.common.entity.AuditingTimeEntity; + +@Getter +@Entity +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public class Banner extends AuditingTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(nullable = false) + private String imageUrl; + + @Column(nullable = false) + private String linkUrl; + + @Column(nullable = false) + private Integer sortOrder; + + @Column(nullable = false) + private Boolean isActive; + + @Builder + public Banner(String imageUrl, String linkUrl, Integer sortOrder) { + this.imageUrl = imageUrl; + this.linkUrl = linkUrl; + this.sortOrder = sortOrder; + this.isActive = true; + } +} diff --git a/src/main/java/org/runnect/server/banner/repository/BannerRepository.java b/src/main/java/org/runnect/server/banner/repository/BannerRepository.java new file mode 100644 index 0000000..87a49b9 --- /dev/null +++ b/src/main/java/org/runnect/server/banner/repository/BannerRepository.java @@ -0,0 +1,11 @@ +package org.runnect.server.banner.repository; + +import java.util.List; + +import org.runnect.server.banner.entity.Banner; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface BannerRepository extends JpaRepository { + + List findByIsActiveTrueOrderBySortOrderAscIdAsc(); +} diff --git a/src/main/java/org/runnect/server/banner/service/BannerService.java b/src/main/java/org/runnect/server/banner/service/BannerService.java new file mode 100644 index 0000000..17b5454 --- /dev/null +++ b/src/main/java/org/runnect/server/banner/service/BannerService.java @@ -0,0 +1,30 @@ +package org.runnect.server.banner.service; + +import java.util.ArrayList; +import java.util.List; + +import lombok.RequiredArgsConstructor; +import org.runnect.server.banner.dto.response.BannerResponse; +import org.runnect.server.banner.dto.response.GetBannerResponseDto; +import org.runnect.server.banner.entity.Banner; +import org.runnect.server.banner.repository.BannerRepository; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class BannerService { + + private final BannerRepository bannerRepository; + + public GetBannerResponseDto getBanners() { + List banners = bannerRepository.findByIsActiveTrueOrderBySortOrderAscIdAsc(); + + List bannerResponses = new ArrayList<>(); + for (int index = 0; index < banners.size(); index++) { + Banner banner = banners.get(index); + bannerResponses.add(BannerResponse.of(index, banner.getImageUrl(), banner.getLinkUrl())); + } + + return GetBannerResponseDto.of(bannerResponses); + } +} diff --git a/src/main/java/org/runnect/server/common/constant/SuccessStatus.java b/src/main/java/org/runnect/server/common/constant/SuccessStatus.java index b374589..e6bb3a9 100644 --- a/src/main/java/org/runnect/server/common/constant/SuccessStatus.java +++ b/src/main/java/org/runnect/server/common/constant/SuccessStatus.java @@ -31,6 +31,7 @@ public enum SuccessStatus { GET_HEALTH_DATA_SUCCESS(HttpStatus.OK, "건강 데이터 조회 성공"), GET_HEALTH_SUMMARY_SUCCESS(HttpStatus.OK, "건강 통계 조회 성공"), + GET_BANNER_SUCCESS(HttpStatus.OK, "배너 조회 성공"), UPDATE_RECORD_SUCCESS(HttpStatus.OK, "활동 기록 수정 성공"),