From b6805b3aa8fa8da7b2bfe092323f6571c0d6c01e Mon Sep 17 00:00:00 2001 From: kim-wonjin Date: Thu, 19 Jan 2023 15:44:34 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat(ticketItem)=20:=20controller,=20dto=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 --- .../controller/TicketItemController.java | 36 ++++++++++++++++++ .../dto/request/CreateTicketItemRequest.java | 38 +++++++++++++++++++ .../response/CreateTicketItemResponse.java | 24 ++++++++++++ .../service/CreateTicketItemUseCase.java | 4 ++ 4 files changed, 102 insertions(+) create mode 100644 DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java create mode 100644 DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java create mode 100644 DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java create mode 100644 DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java new file mode 100644 index 00000000..55111731 --- /dev/null +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java @@ -0,0 +1,36 @@ +package band.gosrock.api.ticketItem.controller; + +import band.gosrock.api.order.model.dto.request.CreateOrderRequest; +import band.gosrock.api.order.model.dto.response.CreateOrderResponse; +import band.gosrock.api.ticketItem.dto.request.CreateTicketItemRequest; +import band.gosrock.api.ticketItem.dto.response.CreateTicketItemResponse; +import band.gosrock.api.ticketItem.service.CreateTicketItemUseCase; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.security.SecurityRequirement; +import io.swagger.v3.oas.annotations.tags.Tag; +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; + +import javax.validation.Valid; + +@SecurityRequirement(name = "access-token") +@Tag(name = "티켓 상품 관련 컨트롤러") +@RestController +@RequestMapping("/v1/ticket_items") +@RequiredArgsConstructor +public class TicketItemController { + + public final CreateTicketItemUseCase createTicketItemUseCase; + + @Operation(summary = "특정 이벤트에 속하는 티켓 상품을 생성합니다.", + description = "제휴 되지 않은 회원은 티켓 가격 0으로 강제해 보내주세요!") + @PostMapping + public CreateTicketItemResponse createTicketItem( + @RequestBody @Valid CreateTicketItemRequest createTicketItemRequest) { + return createTicketItemUseCase.execute(createTicketItemRequest); + } + +} diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java new file mode 100644 index 00000000..d70b2d88 --- /dev/null +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java @@ -0,0 +1,38 @@ +package band.gosrock.api.ticketItem.dto.request; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Getter; +import lombok.RequiredArgsConstructor; +import org.springframework.lang.Nullable; + +import javax.validation.constraints.NotNull; + +@Getter +@RequiredArgsConstructor +public class CreateTicketItemRequest { + + @NotNull + @Schema(nullable = false, example = "APPROVAL") + private String type; + + @NotNull + @Schema(nullable = false, example = "일반 티켓") + private String name; + + @Nullable + @Schema(nullable = true, example = "일반 입장 티켓입니다.") + private String description; + + @NotNull + @Schema(nullable = false, example = "4000") + private Long price; + + @NotNull + @Schema(nullable = false, example = "100") + private Long supplyCount; + + @NotNull + @Schema(nullable = false, example = "1") + private Long purchaseLimit; + +} diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java new file mode 100644 index 00000000..bb2e810a --- /dev/null +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java @@ -0,0 +1,24 @@ +package band.gosrock.api.ticketItem.dto.response; + +import band.gosrock.api.order.model.dto.response.OrderPaymentResponse; +import band.gosrock.domain.domains.order.domain.Order; +import band.gosrock.domain.domains.order.domain.PaymentInfo; +import band.gosrock.domain.domains.ticket_item.domain.TicketItem; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Builder; +import lombok.Getter; + + +@Getter +@Builder +public class CreateTicketItemResponse { + @Schema(description = "ticketItemId") + private final Long ticketItemId; + + public static CreateTicketItemResponse from(TicketItem ticketItem) { + + return CreateTicketItemResponse.builder() + .ticketItemId(ticketItem.getId()) + .build(); + } +} diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java new file mode 100644 index 00000000..18e91e25 --- /dev/null +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java @@ -0,0 +1,4 @@ +package band.gosrock.api.ticketItem.service; + +public class CreateTicketItemUseCase { +} From 952778574229282b01bcbcf7a9557766114b2d1b Mon Sep 17 00:00:00 2001 From: kim-wonjin Date: Sat, 21 Jan 2023 02:30:57 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat(ticketItem)=20:=20=ED=8B=B0=EC=BC=93?= =?UTF-8?q?=20=EC=83=81=ED=92=88=20=EC=83=9D=EC=84=B1=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/TicketItemController.java | 7 +--- .../dto/request/CreateTicketItemRequest.java | 26 ++++++++++++- .../response/CreateTicketItemResponse.java | 35 +++++++++++++++-- .../service/CreateTicketItemUseCase.java | 39 +++++++++++++++++++ .../adaptor/TicketItemAdaptor.java | 4 ++ .../ticket_item/domain/TicketItem.java | 2 + .../InvalidTicketPriceException.java | 12 ++++++ .../exception/TicketItemErrorCode.java | 5 ++- .../service/TicketItemService.java | 29 ++++++++++++++ 9 files changed, 146 insertions(+), 13 deletions(-) create mode 100644 DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java create mode 100644 DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java index 55111731..7a8ee82b 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java @@ -1,7 +1,5 @@ package band.gosrock.api.ticketItem.controller; -import band.gosrock.api.order.model.dto.request.CreateOrderRequest; -import band.gosrock.api.order.model.dto.response.CreateOrderResponse; import band.gosrock.api.ticketItem.dto.request.CreateTicketItemRequest; import band.gosrock.api.ticketItem.dto.response.CreateTicketItemResponse; import band.gosrock.api.ticketItem.service.CreateTicketItemUseCase; @@ -9,10 +7,7 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; 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; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java index d70b2d88..b744ed04 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java @@ -1,5 +1,9 @@ package band.gosrock.api.ticketItem.dto.request; +import band.gosrock.domain.common.vo.Money; +import band.gosrock.domain.domains.event.domain.Event; +import band.gosrock.domain.domains.ticket_item.domain.TicketItem; +import band.gosrock.domain.domains.ticket_item.domain.TicketType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -12,8 +16,12 @@ public class CreateTicketItemRequest { @NotNull - @Schema(nullable = false, example = "APPROVAL") - private String type; + @Schema(nullable = false, example = "1") + private Long eventId; + + @NotNull + @Schema(nullable = false, defaultValue = "FIRST_COME_FIRST_SERVED") + private TicketType type; @NotNull @Schema(nullable = false, example = "일반 티켓") @@ -35,4 +43,18 @@ public class CreateTicketItemRequest { @Schema(nullable = false, example = "1") private Long purchaseLimit; + public TicketItem toEntity(Event event) { + + return TicketItem.builder() + .type(type) + .name(name) + .description(description) + .price(Money.wons(price)) + .quantity(supplyCount) + .supplyCount(supplyCount) + .purchaseLimit(purchaseLimit) + .isSellable(true) + .event(event) + .build(); + } } diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java index bb2e810a..4e27369c 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java @@ -1,9 +1,8 @@ package band.gosrock.api.ticketItem.dto.response; -import band.gosrock.api.order.model.dto.response.OrderPaymentResponse; -import band.gosrock.domain.domains.order.domain.Order; -import band.gosrock.domain.domains.order.domain.PaymentInfo; +import band.gosrock.domain.common.vo.Money; import band.gosrock.domain.domains.ticket_item.domain.TicketItem; +import band.gosrock.domain.domains.ticket_item.domain.TicketType; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; import lombok.Getter; @@ -12,13 +11,41 @@ @Getter @Builder public class CreateTicketItemResponse { - @Schema(description = "ticketItemId") + @Schema(description = "티켓상품 id") private final Long ticketItemId; + @Schema(description = "이름") + private final String ticketName; + + @Schema(description = "설명") + private final String description; + + @Schema(description = "가격") + private final Money price; + + @Schema(description = "티켓 타입") + private final TicketType type; + + @Schema(description = "1인당 구매 제한 매수") + private final Long purchaseLimit; + + @Schema(description = "공급량") + private final Long supplyCount; + + @Schema(description = "재고") + private final Long quantity; + public static CreateTicketItemResponse from(TicketItem ticketItem) { return CreateTicketItemResponse.builder() .ticketItemId(ticketItem.getId()) + .ticketName(ticketItem.getName()) + .description(ticketItem.getDescription()) + .price(ticketItem.getPrice()) + .type(ticketItem.getType()) + .purchaseLimit(ticketItem.getPurchaseLimit()) + .supplyCount(ticketItem.getSupplyCount()) + .quantity(ticketItem.getQuantity()) .build(); } } diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java index 18e91e25..822cbc59 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java @@ -1,4 +1,43 @@ package band.gosrock.api.ticketItem.service; +import band.gosrock.api.common.UserUtils; +import band.gosrock.api.ticketItem.dto.request.CreateTicketItemRequest; +import band.gosrock.api.ticketItem.dto.response.CreateTicketItemResponse; +import band.gosrock.common.annotation.UseCase; +import band.gosrock.domain.common.vo.Money; +import band.gosrock.domain.domains.event.adaptor.EventAdaptor; +import band.gosrock.domain.domains.event.domain.Event; +import band.gosrock.domain.domains.host.adaptor.HostAdaptor; +import band.gosrock.domain.domains.host.domain.Host; +import band.gosrock.domain.domains.host.service.HostService; +import band.gosrock.domain.domains.ticket_item.domain.TicketItem; +import band.gosrock.domain.domains.ticket_item.service.TicketItemService; +import band.gosrock.domain.domains.user.domain.User; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@UseCase +@RequiredArgsConstructor public class CreateTicketItemUseCase { + + private final EventAdaptor eventAdaptor; + private final HostAdaptor hostAdaptor; + private final UserUtils userUtils; + private final HostService hostService; + private final TicketItemService ticketItemService; + + @Transactional + public CreateTicketItemResponse execute(CreateTicketItemRequest createTicketItemRequest) { + User user = userUtils.getCurrentUser(); + Event event = eventAdaptor.findById(createTicketItemRequest.getEventId()); + Host host = hostAdaptor.findById(event.getHostId()); + // 권한 체크 ( 해당 이벤트의 호스트인지 ) + hostService.hasHostUser(host, user.getId()); + // 호스트 제휴 여부에 따른 가격 체크 + if (!host.getPartner()) { + ticketItemService.checkTicketPrice(Money.wons(createTicketItemRequest.getPrice())); + } + TicketItem ticketItem = ticketItemService.createTicketItem(createTicketItemRequest.toEntity(event)); + return CreateTicketItemResponse.from(ticketItem); + } } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/adaptor/TicketItemAdaptor.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/adaptor/TicketItemAdaptor.java index 7d2474f5..c501b3df 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/adaptor/TicketItemAdaptor.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/adaptor/TicketItemAdaptor.java @@ -18,4 +18,8 @@ public TicketItem queryTicketItem(Long ticketItemId) { .findById(ticketItemId) .orElseThrow(() -> TicketItemNotFoundException.EXCEPTION); } + + public TicketItem save(TicketItem ticketItem) { + return ticketItemRepository.save(ticketItem); + } } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/domain/TicketItem.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/domain/TicketItem.java index a48e6ebb..3e7c738b 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/domain/TicketItem.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/domain/TicketItem.java @@ -74,6 +74,7 @@ public TicketItem( Boolean isSellable, LocalDateTime saleStartAt, LocalDateTime saleEndAt, + Event event, List itemOptionGroups) { this.type = type; this.name = name; @@ -85,6 +86,7 @@ public TicketItem( this.isSellable = isSellable; this.saleStartAt = saleStartAt; this.saleEndAt = saleEndAt; + this.event = event; this.itemOptionGroups = itemOptionGroups; } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java new file mode 100644 index 00000000..7ea2e26b --- /dev/null +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java @@ -0,0 +1,12 @@ +package band.gosrock.domain.domains.ticket_item.exception; + +import band.gosrock.common.exception.DuDoongCodeException; + +public class InvalidTicketPriceException extends DuDoongCodeException { + + public static final DuDoongCodeException EXCEPTION = new InvalidTicketPriceException(); + + private InvalidTicketPriceException() { + super(TicketItemErrorCode.INVALID_TICKET_PRICE); + } +} diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/TicketItemErrorCode.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/TicketItemErrorCode.java index 7580e481..d4ce212f 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/TicketItemErrorCode.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/TicketItemErrorCode.java @@ -1,5 +1,6 @@ package band.gosrock.domain.domains.ticket_item.exception; +import static band.gosrock.common.consts.DuDoongStatic.BAD_REQUEST; import static band.gosrock.common.consts.DuDoongStatic.NOT_FOUND; import band.gosrock.common.annotation.ExplainError; @@ -16,7 +17,9 @@ public enum TicketItemErrorCode implements BaseErrorCode { @ExplainError("요청에서 보내준 티켓 상품 id 값이 올바르지 않을 때 발생하는 오류입니다.") TICKET_ITEM_NOT_FOUND(NOT_FOUND, "Ticket_Item_404_1", "티켓 아이템을 찾을 수 없습니다."), @ExplainError("요청에서 보내준 옵션 id 값이 올바르지 않을 때 발생하는 오류입니다.") - OPTION_NOT_FOUND(NOT_FOUND, "Option_404_1", "옵션을 찾을 수 없습니다."); + OPTION_NOT_FOUND(NOT_FOUND, "Option_404_1", "옵션을 찾을 수 없습니다."), + @ExplainError("제휴되지 않은 호스트가 티켓 가격을 0이 아닌 값으로 요청했을때 발생하는 오류입니다.") + INVALID_TICKET_PRICE(BAD_REQUEST, "Ticket_Item_400_1", "티켓 가격을 설정할 수 없습니다."); private Integer status; private String code; diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java new file mode 100644 index 00000000..dc872d61 --- /dev/null +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java @@ -0,0 +1,29 @@ +package band.gosrock.domain.domains.ticket_item.service; + +import band.gosrock.common.annotation.DomainService; +import band.gosrock.domain.common.vo.Money; +import band.gosrock.domain.domains.ticket_item.adaptor.TicketItemAdaptor; +import band.gosrock.domain.domains.ticket_item.domain.TicketItem; +import band.gosrock.domain.domains.ticket_item.exception.InvalidTicketPriceException; +import lombok.RequiredArgsConstructor; +import org.springframework.transaction.annotation.Transactional; + +@DomainService +@Transactional(readOnly = true) +@RequiredArgsConstructor +public class TicketItemService { + + private final TicketItemAdaptor ticketItemAdaptor; + + @Transactional + public TicketItem createTicketItem(TicketItem ticketItem) { + return ticketItemAdaptor.save(ticketItem); + } + + @Transactional + public void checkTicketPrice(Money ticketPrice) { + if (!Money.ZERO.equals(ticketPrice)) { + throw InvalidTicketPriceException.EXCEPTION; + } + } +} \ No newline at end of file From b6da6e57361425c79db2132cb4e7b9124c2dac4e Mon Sep 17 00:00:00 2001 From: kim-wonjin Date: Sat, 21 Jan 2023 02:38:00 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix(ticketItem)=20:=20=ED=8B=B0=EC=BC=93=20?= =?UTF-8?q?=EC=83=81=ED=92=88=20=EC=83=9D=EC=84=B1=20spotless=20=EC=A0=81?= =?UTF-8?q?=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ticketItem/controller/TicketItemController.java | 10 +++++----- .../dto/request/CreateTicketItemRequest.java | 4 ++-- .../dto/response/CreateTicketItemResponse.java | 2 +- .../ticketItem/service/CreateTicketItemUseCase.java | 4 +++- .../exception/InvalidTicketPriceException.java | 1 + .../domains/ticket_item/service/TicketItemService.java | 3 ++- 6 files changed, 14 insertions(+), 10 deletions(-) diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java index 7a8ee82b..4420cf69 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java @@ -1,16 +1,16 @@ package band.gosrock.api.ticketItem.controller; + import band.gosrock.api.ticketItem.dto.request.CreateTicketItemRequest; import band.gosrock.api.ticketItem.dto.response.CreateTicketItemResponse; import band.gosrock.api.ticketItem.service.CreateTicketItemUseCase; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; +import javax.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; - @SecurityRequirement(name = "access-token") @Tag(name = "티켓 상품 관련 컨트롤러") @RestController @@ -20,12 +20,12 @@ public class TicketItemController { public final CreateTicketItemUseCase createTicketItemUseCase; - @Operation(summary = "특정 이벤트에 속하는 티켓 상품을 생성합니다.", - description = "제휴 되지 않은 회원은 티켓 가격 0으로 강제해 보내주세요!") + @Operation( + summary = "특정 이벤트에 속하는 티켓 상품을 생성합니다.", + description = "제휴 되지 않은 회원은 티켓 가격 0으로 강제해 보내주세요!") @PostMapping public CreateTicketItemResponse createTicketItem( @RequestBody @Valid CreateTicketItemRequest createTicketItemRequest) { return createTicketItemUseCase.execute(createTicketItemRequest); } - } diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java index b744ed04..b39b82fb 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/request/CreateTicketItemRequest.java @@ -1,16 +1,16 @@ package band.gosrock.api.ticketItem.dto.request; + import band.gosrock.domain.common.vo.Money; import band.gosrock.domain.domains.event.domain.Event; import band.gosrock.domain.domains.ticket_item.domain.TicketItem; import band.gosrock.domain.domains.ticket_item.domain.TicketType; import io.swagger.v3.oas.annotations.media.Schema; +import javax.validation.constraints.NotNull; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.springframework.lang.Nullable; -import javax.validation.constraints.NotNull; - @Getter @RequiredArgsConstructor public class CreateTicketItemRequest { diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java index 4e27369c..804c2b9c 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/dto/response/CreateTicketItemResponse.java @@ -1,5 +1,6 @@ package band.gosrock.api.ticketItem.dto.response; + import band.gosrock.domain.common.vo.Money; import band.gosrock.domain.domains.ticket_item.domain.TicketItem; import band.gosrock.domain.domains.ticket_item.domain.TicketType; @@ -7,7 +8,6 @@ import lombok.Builder; import lombok.Getter; - @Getter @Builder public class CreateTicketItemResponse { diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java index 822cbc59..7a93b98c 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java @@ -1,5 +1,6 @@ package band.gosrock.api.ticketItem.service; + import band.gosrock.api.common.UserUtils; import band.gosrock.api.ticketItem.dto.request.CreateTicketItemRequest; import band.gosrock.api.ticketItem.dto.response.CreateTicketItemResponse; @@ -37,7 +38,8 @@ public CreateTicketItemResponse execute(CreateTicketItemRequest createTicketItem if (!host.getPartner()) { ticketItemService.checkTicketPrice(Money.wons(createTicketItemRequest.getPrice())); } - TicketItem ticketItem = ticketItemService.createTicketItem(createTicketItemRequest.toEntity(event)); + TicketItem ticketItem = + ticketItemService.createTicketItem(createTicketItemRequest.toEntity(event)); return CreateTicketItemResponse.from(ticketItem); } } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java index 7ea2e26b..f495d740 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/exception/InvalidTicketPriceException.java @@ -1,5 +1,6 @@ package band.gosrock.domain.domains.ticket_item.exception; + import band.gosrock.common.exception.DuDoongCodeException; public class InvalidTicketPriceException extends DuDoongCodeException { diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java index dc872d61..9fefec5a 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/ticket_item/service/TicketItemService.java @@ -1,5 +1,6 @@ package band.gosrock.domain.domains.ticket_item.service; + import band.gosrock.common.annotation.DomainService; import band.gosrock.domain.common.vo.Money; import band.gosrock.domain.domains.ticket_item.adaptor.TicketItemAdaptor; @@ -26,4 +27,4 @@ public void checkTicketPrice(Money ticketPrice) { throw InvalidTicketPriceException.EXCEPTION; } } -} \ No newline at end of file +} From 03f91783947d763d1c6da63337f161432677f16e Mon Sep 17 00:00:00 2001 From: kim-wonjin Date: Sat, 21 Jan 2023 03:16:09 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix(ticketItem)=20:=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gosrock/api/ticketItem/service/CreateTicketItemUseCase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java index 7a93b98c..927f0031 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/service/CreateTicketItemUseCase.java @@ -33,7 +33,7 @@ public CreateTicketItemResponse execute(CreateTicketItemRequest createTicketItem Event event = eventAdaptor.findById(createTicketItemRequest.getEventId()); Host host = hostAdaptor.findById(event.getHostId()); // 권한 체크 ( 해당 이벤트의 호스트인지 ) - hostService.hasHostUser(host, user.getId()); + host.hasHostUserId(user.getId()); // 호스트 제휴 여부에 따른 가격 체크 if (!host.getPartner()) { ticketItemService.checkTicketPrice(Money.wons(createTicketItemRequest.getPrice())); From 2a0e993e2d3bfe30431f77f4570b1dd15d470a79 Mon Sep 17 00:00:00 2001 From: kim-wonjin Date: Sat, 21 Jan 2023 03:20:41 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix(ticketItem)=20:=20uri=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gosrock/api/ticketItem/controller/TicketItemController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java index 4420cf69..5dad7365 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/ticketItem/controller/TicketItemController.java @@ -14,7 +14,7 @@ @SecurityRequirement(name = "access-token") @Tag(name = "티켓 상품 관련 컨트롤러") @RestController -@RequestMapping("/v1/ticket_items") +@RequestMapping("/v1/ticketItems") @RequiredArgsConstructor public class TicketItemController {