From 47c954dc946a21b56305408880daa84982388514 Mon Sep 17 00:00:00 2001 From: tjdgns8439 Date: Thu, 26 Sep 2024 01:31:23 +0900 Subject: [PATCH 1/2] [MS-202] Feat: Create Banner API --- .../controller/GetBannerController.java | 29 +++++++++++++++ .../controller/RegisterBannerController.java | 31 ++++++++++++++++ .../domain/banner/dto/BannerRequestDto.java | 20 +++++++++++ .../domain/banner/dto/BannerResponseDto.java | 36 +++++++++++++++++++ .../api/domain/banner/entity/Banner.java | 36 +++++++++++++++++++ .../domain/banner/mapper/BannerMapper.java | 36 +++++++++++++++++++ .../banner/repository/BannerRepository.java | 9 +++++ .../banner/service/GetBannerService.java | 27 ++++++++++++++ .../banner/service/RegisterBannerService.java | 20 +++++++++++ 9 files changed, 244 insertions(+) create mode 100644 src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/controller/RegisterBannerController.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/dto/BannerRequestDto.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/dto/BannerResponseDto.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/entity/Banner.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/mapper/BannerMapper.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/repository/BannerRepository.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/service/GetBannerService.java create mode 100644 src/main/java/com/modutaxi/api/domain/banner/service/RegisterBannerService.java diff --git a/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java b/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java new file mode 100644 index 0000000..264d412 --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java @@ -0,0 +1,29 @@ +package com.modutaxi.api.domain.banner.controller; + + +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponseList; +import com.modutaxi.api.domain.banner.service.GetBannerService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.RequiredArgsConstructor; +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; + +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/banners") +@Tag(name = "배너") +public class GetBannerController { + + private final GetBannerService getBannerService; + + @Operation(summary = "배너 리스트 조회", + description = "actibe상태의 배너 리스트를 조회합니다." + ) + @GetMapping + public ResponseEntity getBannerList() { + return ResponseEntity.ok(getBannerService.getBannerList()); + } +} diff --git a/src/main/java/com/modutaxi/api/domain/banner/controller/RegisterBannerController.java b/src/main/java/com/modutaxi/api/domain/banner/controller/RegisterBannerController.java new file mode 100644 index 0000000..c3fd337 --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/controller/RegisterBannerController.java @@ -0,0 +1,31 @@ +package com.modutaxi.api.domain.banner.controller; + +import com.modutaxi.api.common.auth.CurrentMember; +import com.modutaxi.api.domain.banner.dto.BannerRequestDto; +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponse; +import com.modutaxi.api.domain.banner.service.RegisterBannerService; +import com.modutaxi.api.domain.member.entity.Member; +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.http.ResponseEntity; +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/banners") +@Tag(name = "배너") +public class RegisterBannerController { + private final RegisterBannerService registerBannerService; + + @Operation(summary = "배너 생성", description = "배너를 생성합니다. imageUrl, linkUrl을 넣어주세요. 초기 Active 값은 false입니다.") + @PostMapping + public ResponseEntity registerBanner( + @Valid @RequestBody BannerRequestDto.CreateBannerRequest createBannerRequest) { + return ResponseEntity.ok(registerBannerService.createBanner(createBannerRequest)); + } +} \ No newline at end of file diff --git a/src/main/java/com/modutaxi/api/domain/banner/dto/BannerRequestDto.java b/src/main/java/com/modutaxi/api/domain/banner/dto/BannerRequestDto.java new file mode 100644 index 0000000..f750ff5 --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/dto/BannerRequestDto.java @@ -0,0 +1,20 @@ +package com.modutaxi.api.domain.banner.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +public class BannerRequestDto { + @Getter + @Builder + @AllArgsConstructor + @ToString + public static class CreateBannerRequest { + @Schema(example = "String", description = "배너 이미지 url") + private String imageUrl; + @Schema(example = "String", description = "배너 링크 url") + private String linkUrl; + } +} diff --git a/src/main/java/com/modutaxi/api/domain/banner/dto/BannerResponseDto.java b/src/main/java/com/modutaxi/api/domain/banner/dto/BannerResponseDto.java new file mode 100644 index 0000000..982340a --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/dto/BannerResponseDto.java @@ -0,0 +1,36 @@ +package com.modutaxi.api.domain.banner.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.ToString; + +public class BannerResponseDto { + + @Getter + @Builder + @AllArgsConstructor + @ToString + public static class BannerResponse { + @Schema(example = "1", description = "배너 id") + private Long id; + @Schema(example = "String", description = "배너 이미지 url") + private String imageUrl; + @Schema(example = "String", description = "배너 링크 url") + private String linkUrl; + @Schema(example = "false", description = "배너 활성화 여부") + private boolean active; + } + + @Getter + @Builder + @AllArgsConstructor + @ToString + public static class BannerResponseList { + @Schema(description = "배너 리스트") + List BannerResponseList; + } + +} diff --git a/src/main/java/com/modutaxi/api/domain/banner/entity/Banner.java b/src/main/java/com/modutaxi/api/domain/banner/entity/Banner.java new file mode 100644 index 0000000..55b6fec --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/entity/Banner.java @@ -0,0 +1,36 @@ +package com.modutaxi.api.domain.banner.entity; + +import com.modutaxi.api.common.entity.BaseTime; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.validation.constraints.NotNull; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.ToString; +import org.springframework.lang.Nullable; + +@Entity +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@ToString +public class Banner extends BaseTime { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @NotNull + private String imageUrl; + + @Nullable + private String linkUrl; + + @Builder.Default + private boolean active = false; +} diff --git a/src/main/java/com/modutaxi/api/domain/banner/mapper/BannerMapper.java b/src/main/java/com/modutaxi/api/domain/banner/mapper/BannerMapper.java new file mode 100644 index 0000000..9a9616e --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/mapper/BannerMapper.java @@ -0,0 +1,36 @@ +package com.modutaxi.api.domain.banner.mapper; + +import com.modutaxi.api.domain.banner.dto.BannerRequestDto.CreateBannerRequest; +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponse; +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponseList; +import com.modutaxi.api.domain.banner.entity.Banner; +import java.util.List; + + +public class BannerMapper { + + public static Banner toEntity(CreateBannerRequest createBannerRequest) { + return Banner.builder() + .imageUrl(createBannerRequest.getImageUrl()) + .linkUrl(createBannerRequest.getLinkUrl()) + .build(); + } + + + public static BannerResponse toDto(Banner banner){ + return BannerResponse.builder() + .id(banner.getId()) + .imageUrl(banner.getImageUrl()) + .linkUrl(banner.getLinkUrl()) + .active(banner.isActive()) + .build(); + } + + + public static BannerResponseList toDtoList(List bannerResponses){ + return BannerResponseList.builder() + .BannerResponseList(bannerResponses) + .build(); + } +} + diff --git a/src/main/java/com/modutaxi/api/domain/banner/repository/BannerRepository.java b/src/main/java/com/modutaxi/api/domain/banner/repository/BannerRepository.java new file mode 100644 index 0000000..bfa8080 --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/repository/BannerRepository.java @@ -0,0 +1,9 @@ +package com.modutaxi.api.domain.banner.repository; + +import com.modutaxi.api.domain.banner.entity.Banner; +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface BannerRepository extends JpaRepository { + List findAllByActiveTrue(); +} diff --git a/src/main/java/com/modutaxi/api/domain/banner/service/GetBannerService.java b/src/main/java/com/modutaxi/api/domain/banner/service/GetBannerService.java new file mode 100644 index 0000000..ff3039c --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/service/GetBannerService.java @@ -0,0 +1,27 @@ +package com.modutaxi.api.domain.banner.service; + +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponse; +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponseList; +import com.modutaxi.api.domain.banner.entity.Banner; +import com.modutaxi.api.domain.banner.mapper.BannerMapper; +import com.modutaxi.api.domain.banner.repository.BannerRepository; +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor +public class GetBannerService { + + private final BannerRepository bannerRepository; + + public BannerResponseList getBannerList() { + + List banners = bannerRepository.findAllByActiveTrue(); + + List bannerResponses = + banners.stream().map(BannerMapper::toDto).toList(); + + return BannerMapper.toDtoList(bannerResponses); + } +} diff --git a/src/main/java/com/modutaxi/api/domain/banner/service/RegisterBannerService.java b/src/main/java/com/modutaxi/api/domain/banner/service/RegisterBannerService.java new file mode 100644 index 0000000..c9dc3dc --- /dev/null +++ b/src/main/java/com/modutaxi/api/domain/banner/service/RegisterBannerService.java @@ -0,0 +1,20 @@ +package com.modutaxi.api.domain.banner.service; + +import com.modutaxi.api.domain.banner.dto.BannerRequestDto.CreateBannerRequest; +import com.modutaxi.api.domain.banner.dto.BannerResponseDto.BannerResponse; +import com.modutaxi.api.domain.banner.mapper.BannerMapper; +import com.modutaxi.api.domain.banner.repository.BannerRepository; +import jakarta.transaction.Transactional; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@RequiredArgsConstructor +@Service +public class RegisterBannerService { + + private final BannerRepository bannerRepository; + @Transactional + public BannerResponse createBanner(CreateBannerRequest createBannerRequest) { + return BannerMapper.toDto(bannerRepository.save(BannerMapper.toEntity(createBannerRequest))); + } +} \ No newline at end of file From 624cf0270ed8bd815babf89a33cb5cbb47ca5726 Mon Sep 17 00:00:00 2001 From: tjdgns8439 Date: Sat, 28 Sep 2024 13:23:34 +0900 Subject: [PATCH 2/2] =?UTF-8?q?[MS-202]=20Chore:=20=EC=98=A4=ED=83=80=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 --- .../api/domain/banner/controller/GetBannerController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java b/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java index 264d412..d4c3d49 100644 --- a/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java +++ b/src/main/java/com/modutaxi/api/domain/banner/controller/GetBannerController.java @@ -20,7 +20,7 @@ public class GetBannerController { private final GetBannerService getBannerService; @Operation(summary = "배너 리스트 조회", - description = "actibe상태의 배너 리스트를 조회합니다." + description = "active 상태의 배너 리스트를 조회합니다." ) @GetMapping public ResponseEntity getBannerList() {