From 10e083b4be56ba3820eee242dc42f841f86adace Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=A4=80?= <sanbonai06@naver.com> Date: Mon, 23 Jan 2023 00:28:50 +0900 Subject: [PATCH 1/4] =?UTF-8?q?feat(domain)=20:=20=EB=B0=9C=EA=B8=89=20?= =?UTF-8?q?=ED=8B=B0=EC=BC=93=20=EC=83=81=ED=83=9C=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20=EB=A9=94=EC=84=9C=EB=93=9C=EB=93=A4=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 --- .../adaptor/IssuedTicketAdaptor.java | 2 +- .../issuedTicket/domain/IssuedTicket.java | 59 ++++++++++++++++++- .../CanNotCancelEntranceException.java | 12 ++++ .../exception/CanNotCancelException.java | 13 ++++ .../exception/CanNotEntranceException.java | 13 ++++ .../exception/IssuedTicketErrorCode.java | 5 +- 6 files changed, 99 insertions(+), 5 deletions(-) create mode 100644 DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java create mode 100644 DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java create mode 100644 DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java index 4e20525a..89cbe3e2 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java @@ -50,7 +50,7 @@ public Page<IssuedTicket> searchIssuedTicket(Long page, IssuedTicketCondition co } public void delete(IssuedTicket issuedTicket) { - issuedTicket.cancelIssuedTicket(); + issuedTicket.cancel(); } public List<IssuedTicket> findAllByOrderUuid(String orderUuid) { diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java index fbe7f012..9647694e 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java @@ -8,6 +8,9 @@ import band.gosrock.domain.domains.event.domain.Event; import band.gosrock.domain.domains.issuedTicket.dto.request.CreateIssuedTicketDTO; import band.gosrock.domain.domains.issuedTicket.dto.response.CreateIssuedTicketResponse; +import band.gosrock.domain.domains.issuedTicket.exception.CanNotCancelEntranceException; +import band.gosrock.domain.domains.issuedTicket.exception.CanNotCancelException; +import band.gosrock.domain.domains.issuedTicket.exception.CanNotEntranceException; import band.gosrock.domain.domains.ticket_item.domain.TicketItem; import band.gosrock.domain.domains.user.domain.User; import java.util.ArrayList; @@ -57,7 +60,6 @@ public class IssuedTicket extends BaseTimeEntity { /* 발급 티켓의 주문 행 (단방향) - Todo: 발급 티켓이 굳이 order line 을 알아야 할까? -찬진 OrderResponse 에서 필요함! 연관관계는 따로안짓고 레지스터리에서 불러올게용ㄴ */ private Long orderLineId; @@ -98,7 +100,7 @@ public void addOptionAnswers(List<IssuedTicketOptionAnswer> answers) { private Money price; /* - 상태 + 발급 티켓 상태 */ @Enumerated(EnumType.STRING) private IssuedTicketStatus issuedTicketStatus = IssuedTicketStatus.ENTRANCE_INCOMPLETE; @@ -127,6 +129,11 @@ public IssuedTicket( this.issuedTicketOptionAnswers.addAll(issuedTicketOptionAnswers); } + /** ---------------------------- 생성 관련 메서드 ---------------------------------- */ + + /* + 개발 및 테스트 용도로 사용되는 티켓 발급 정적 메서드 + */ public static IssuedTicket createForDev( Event event, User user, @@ -149,16 +156,25 @@ public static IssuedTicket createForDev( return createIssuedTicket; } + /* + issuedTicket 생성하면서 UUID 생성 + */ @PrePersist public void createUUID() { this.uuid = UUID.randomUUID().toString(); } + /* + issuedTicket 생성하면서 티켓 넘버 부여 + */ @PostPersist public void createIssuedTicketNo() { this.issuedTicketNo = "T" + Long.sum(NO_START_NUMBER, this.id); } + /* + 발급 티켓 옵션들 합 계산 + */ public Money sumOptionPrice() { return issuedTicketOptionAnswers.stream() .map( @@ -167,10 +183,16 @@ public Money sumOptionPrice() { .reduce(Money.ZERO, Money::plus); } + /* + issuedTicket VO 변환 메서드 + */ public IssuedTicketInfoVo toIssuedTicketInfoVo() { return IssuedTicketInfoVo.from(this); } + /* + orderLine -> issuedTicket 생성 메서드 + */ public static CreateIssuedTicketResponse orderLineItemToIssuedTickets( CreateIssuedTicketDTO dto) { long quantity = dto.getOrderLineItem().getQuantity(); @@ -196,7 +218,38 @@ public static CreateIssuedTicketResponse orderLineItemToIssuedTickets( return new CreateIssuedTicketResponse(createIssuedTickets, issuedTicketOptionAnswers); } - public void cancelIssuedTicket() { + /** ---------------------------- 상태 변환 관련 메서드 ---------------------------------- */ + + /* + 발급 티켓 취소 메서드 + 티켓이 입장 미완료 상태가 아니면 취소 할 수 없음 + */ + public void cancel() { + if (this.issuedTicketStatus != IssuedTicketStatus.ENTRANCE_INCOMPLETE) { + throw CanNotCancelException.EXCEPTION; + } this.issuedTicketStatus = IssuedTicketStatus.CANCELED; } + + /* + 발급 티켓으로 입장 시 상태 변환 메서드 + 티켓이 입장 미완료 상태가 아니면 입장 할 수 없음 + */ + public void entrance() { + if (this.issuedTicketStatus != IssuedTicketStatus.ENTRANCE_INCOMPLETE) { + throw CanNotEntranceException.EXCEPTION; + } + this.issuedTicketStatus = IssuedTicketStatus.ENTRANCE_COMPLETED; + } + + /* + 입장 처리 취소 메서드 + 티켓이 입장 완료 상태가 아니면 입장 취소 할 수 없음 + */ + public void entranceCancel() { + if (this.issuedTicketStatus != IssuedTicketStatus.ENTRANCE_COMPLETED) { + throw CanNotCancelEntranceException.EXCEPTION; + } + this.issuedTicketStatus = IssuedTicketStatus.ENTRANCE_INCOMPLETE; + } } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java new file mode 100644 index 00000000..b5752d7c --- /dev/null +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java @@ -0,0 +1,12 @@ +package band.gosrock.domain.domains.issuedTicket.exception; + +import band.gosrock.common.exception.DuDoongCodeException; + +public class CanNotCancelEntranceException extends DuDoongCodeException { + + public static final DuDoongCodeException EXCEPTION = new CanNotCancelEntranceException(); + + private CanNotCancelEntranceException() { + super(IssuedTicketErrorCode.CAN_NOT_CANCEL_ENTRANCE); + } +} diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java new file mode 100644 index 00000000..07c5c545 --- /dev/null +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java @@ -0,0 +1,13 @@ +package band.gosrock.domain.domains.issuedTicket.exception; + +import band.gosrock.common.exception.DuDoongCodeException; + +public class CanNotCancelException extends DuDoongCodeException { + + public static final DuDoongCodeException EXCEPTION = new CanNotCancelException(); + + private CanNotCancelException() { + super(IssuedTicketErrorCode.CAN_NOT_CANCEL); + } + +} diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java new file mode 100644 index 00000000..0dad2a63 --- /dev/null +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java @@ -0,0 +1,13 @@ +package band.gosrock.domain.domains.issuedTicket.exception; + +import band.gosrock.common.exception.DuDoongCodeException; + +public class CanNotEntranceException extends DuDoongCodeException { + + public static final DuDoongCodeException EXCEPTION = new CanNotEntranceException(); + + private CanNotEntranceException() { + super(IssuedTicketErrorCode.CAN_NOT_ENTRANCE); + } + +} diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java index 42b8e774..c563e58e 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java @@ -16,7 +16,10 @@ public enum IssuedTicketErrorCode implements BaseErrorCode { ISSUED_TICKET_NOT_FOUND(NOT_FOUND, "IssuedTicket_404_1", "IssuedTicket Not Found"), ISSUED_TICKET_NOT_MATCHED_USER( - BAD_REQUEST, "IssuedTicket_400_1", "IssuedTicket User Not Matched"); + BAD_REQUEST, "IssuedTicket_400_1", "IssuedTicket User Not Matched"), + CAN_NOT_CANCEL(BAD_REQUEST, "IssuedTicket_400_2", "티켓을 취소 할 수 있는 상태가 아닙니다."), + CAN_NOT_CANCEL_ENTRANCE(BAD_REQUEST, "IssuedTicket_400_3", "티켓이 입장 취소 할 수 있는 상태가 아닙니다."), + CAN_NOT_ENTRANCE(BAD_REQUEST, "IssuedTicket_400_5", "티켓이 입장 할 수 있는 상태가 아닙니다."); private Integer status; private String code; From df91343352bec62750537b28a63cf916837b749e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=A4=80?= <sanbonai06@naver.com> Date: Mon, 23 Jan 2023 17:36:30 +0900 Subject: [PATCH 2/4] =?UTF-8?q?feat(api)=20:=20=EB=B0=9C=EA=B8=89=20?= =?UTF-8?q?=ED=8B=B0=EC=BC=93=20=EC=9E=85=EC=9E=A5=20=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AdminIssuedTicketController.java | 12 +++++++++ .../mapper/IssuedTicketMapper.java | 2 +- .../service/EntranceIssuedTicketUseCase.java | 26 +++++++++++++++++++ .../adaptor/IssuedTicketAdaptor.java | 8 +++++- .../issuedTicket/domain/IssuedTicket.java | 6 ++++- .../CanNotCancelEntranceException.java | 1 + .../exception/CanNotCancelException.java | 2 +- .../exception/CanNotEntranceException.java | 2 +- .../IssuedTicketAlreadyEntranceException.java | 13 ++++++++++ .../exception/IssuedTicketErrorCode.java | 3 ++- .../service/IssuedTicketDomainService.java | 14 ++++++++++ 11 files changed, 83 insertions(+), 6 deletions(-) create mode 100644 DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/service/EntranceIssuedTicketUseCase.java create mode 100644 DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketAlreadyEntranceException.java diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/controller/AdminIssuedTicketController.java b/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/controller/AdminIssuedTicketController.java index 986bea6a..2e2192ed 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/controller/AdminIssuedTicketController.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/controller/AdminIssuedTicketController.java @@ -2,12 +2,16 @@ import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketListResponse; +import band.gosrock.api.issuedTicket.service.EntranceIssuedTicketUseCase; import band.gosrock.api.issuedTicket.service.ReadIssuedTicketsUseCase; +import band.gosrock.domain.common.vo.IssuedTicketInfoVo; 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.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @@ -21,6 +25,8 @@ public class AdminIssuedTicketController { private final ReadIssuedTicketsUseCase readIssuedTicketsUseCase; + private final EntranceIssuedTicketUseCase entranceIssuedTicketUseCase; + @Operation(summary = "[어드민 기능] 발급 티켓 리스트 가져오기 API 입니다.") @GetMapping public RetrieveIssuedTicketListResponse getIssuedTickets( @@ -30,4 +36,10 @@ public RetrieveIssuedTicketListResponse getIssuedTickets( @RequestParam(required = false) String phoneNumber) { return readIssuedTicketsUseCase.execute(page, eventId, userName, phoneNumber); } + + @Operation(summary = "[어드민 기능] 발급 티켓 입장 처리 API 입니다.") + @PatchMapping(value = "/{issuedTicketId}") + public IssuedTicketInfoVo patchIssuedTicketStatus(@PathVariable Long issuedTicketId) { + return entranceIssuedTicketUseCase.execute(issuedTicketId); + } } diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/mapper/IssuedTicketMapper.java b/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/mapper/IssuedTicketMapper.java index 478da676..67fbe519 100644 --- a/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/mapper/IssuedTicketMapper.java +++ b/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/mapper/IssuedTicketMapper.java @@ -26,6 +26,6 @@ public RetrieveIssuedTicketListResponse toIssuedTicketPageResponse( public RetrieveIssuedTicketDetailResponse toIssuedTicketDetailResponse( Long currentUserId, Long issuedTicketId) { return RetrieveIssuedTicketDetailResponse.of( - issuedTicketAdaptor.find(currentUserId, issuedTicketId)); + issuedTicketAdaptor.findForUser(currentUserId, issuedTicketId)); } } diff --git a/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/service/EntranceIssuedTicketUseCase.java b/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/service/EntranceIssuedTicketUseCase.java new file mode 100644 index 00000000..cc682e7b --- /dev/null +++ b/DuDoong-Api/src/main/java/band/gosrock/api/issuedTicket/service/EntranceIssuedTicketUseCase.java @@ -0,0 +1,26 @@ +package band.gosrock.api.issuedTicket.service; + + +import band.gosrock.api.common.UserUtils; +import band.gosrock.api.issuedTicket.mapper.IssuedTicketMapper; +import band.gosrock.common.annotation.UseCase; +import band.gosrock.domain.common.vo.IssuedTicketInfoVo; +import band.gosrock.domain.domains.issuedTicket.service.IssuedTicketDomainService; +import lombok.RequiredArgsConstructor; + +@UseCase +@RequiredArgsConstructor +public class EntranceIssuedTicketUseCase { + + private final IssuedTicketDomainService issuedTicketDomainService; + + private final IssuedTicketMapper issuedTicketMapper; + + private final UserUtils userUtils; + + public IssuedTicketInfoVo execute(Long issuedTicketId) { + Long currentUserId = userUtils.getCurrentUserId(); + return issuedTicketDomainService.processingEntranceIssuedTicket( + currentUserId, issuedTicketId); + } +} diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java index 89cbe3e2..0053d06f 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java @@ -32,7 +32,7 @@ public List<IssuedTicket> findAllByOrderLineId(Long orderLineId) { return issuedTicketRepository.findAllByOrderLineId(orderLineId); } - public IssuedTicket find(Long currentUserId, Long issuedTicketId) { + public IssuedTicket findForUser(Long currentUserId, Long issuedTicketId) { IssuedTicket issuedTicket = issuedTicketRepository .find(issuedTicketId) @@ -43,6 +43,12 @@ public IssuedTicket find(Long currentUserId, Long issuedTicketId) { return issuedTicket; } + public IssuedTicket find(Long issuedTicketId) { + return issuedTicketRepository + .find(issuedTicketId) + .orElseThrow(() -> IssuedTicketNotFoundException.EXCEPTION); + } + public Page<IssuedTicket> searchIssuedTicket(Long page, IssuedTicketCondition condition) { PageRequest pageRequest = PageRequest.of(Math.toIntExact(page), 10, Sort.by("id").descending()); diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java index 9647694e..7a1499f7 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/domain/IssuedTicket.java @@ -11,6 +11,7 @@ import band.gosrock.domain.domains.issuedTicket.exception.CanNotCancelEntranceException; import band.gosrock.domain.domains.issuedTicket.exception.CanNotCancelException; import band.gosrock.domain.domains.issuedTicket.exception.CanNotEntranceException; +import band.gosrock.domain.domains.issuedTicket.exception.IssuedTicketAlreadyEntranceException; import band.gosrock.domain.domains.ticket_item.domain.TicketItem; import band.gosrock.domain.domains.user.domain.User; import java.util.ArrayList; @@ -236,9 +237,12 @@ public void cancel() { 티켓이 입장 미완료 상태가 아니면 입장 할 수 없음 */ public void entrance() { - if (this.issuedTicketStatus != IssuedTicketStatus.ENTRANCE_INCOMPLETE) { + if (this.issuedTicketStatus == IssuedTicketStatus.CANCELED) { throw CanNotEntranceException.EXCEPTION; } + if (this.issuedTicketStatus == IssuedTicketStatus.ENTRANCE_COMPLETED) { + throw IssuedTicketAlreadyEntranceException.EXCEPTION; + } this.issuedTicketStatus = IssuedTicketStatus.ENTRANCE_COMPLETED; } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java index b5752d7c..5f4afd9c 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelEntranceException.java @@ -1,5 +1,6 @@ package band.gosrock.domain.domains.issuedTicket.exception; + import band.gosrock.common.exception.DuDoongCodeException; public class CanNotCancelEntranceException extends DuDoongCodeException { diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java index 07c5c545..9e9a8c42 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotCancelException.java @@ -1,5 +1,6 @@ package band.gosrock.domain.domains.issuedTicket.exception; + import band.gosrock.common.exception.DuDoongCodeException; public class CanNotCancelException extends DuDoongCodeException { @@ -9,5 +10,4 @@ public class CanNotCancelException extends DuDoongCodeException { private CanNotCancelException() { super(IssuedTicketErrorCode.CAN_NOT_CANCEL); } - } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java index 0dad2a63..074e4dad 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/CanNotEntranceException.java @@ -1,5 +1,6 @@ package band.gosrock.domain.domains.issuedTicket.exception; + import band.gosrock.common.exception.DuDoongCodeException; public class CanNotEntranceException extends DuDoongCodeException { @@ -9,5 +10,4 @@ public class CanNotEntranceException extends DuDoongCodeException { private CanNotEntranceException() { super(IssuedTicketErrorCode.CAN_NOT_ENTRANCE); } - } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketAlreadyEntranceException.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketAlreadyEntranceException.java new file mode 100644 index 00000000..93422df1 --- /dev/null +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketAlreadyEntranceException.java @@ -0,0 +1,13 @@ +package band.gosrock.domain.domains.issuedTicket.exception; + + +import band.gosrock.common.exception.DuDoongCodeException; + +public class IssuedTicketAlreadyEntranceException extends DuDoongCodeException { + + public static final DuDoongCodeException EXCEPTION = new IssuedTicketAlreadyEntranceException(); + + private IssuedTicketAlreadyEntranceException() { + super(IssuedTicketErrorCode.ISSUED_TICKET_ALREADY_ENTRANCE); + } +} diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java index c563e58e..9925ec1c 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/exception/IssuedTicketErrorCode.java @@ -19,7 +19,8 @@ public enum IssuedTicketErrorCode implements BaseErrorCode { BAD_REQUEST, "IssuedTicket_400_1", "IssuedTicket User Not Matched"), CAN_NOT_CANCEL(BAD_REQUEST, "IssuedTicket_400_2", "티켓을 취소 할 수 있는 상태가 아닙니다."), CAN_NOT_CANCEL_ENTRANCE(BAD_REQUEST, "IssuedTicket_400_3", "티켓이 입장 취소 할 수 있는 상태가 아닙니다."), - CAN_NOT_ENTRANCE(BAD_REQUEST, "IssuedTicket_400_5", "티켓이 입장 할 수 있는 상태가 아닙니다."); + CAN_NOT_ENTRANCE(BAD_REQUEST, "IssuedTicket_400_4", "티켓이 입장 할 수 있는 상태가 아닙니다."), + ISSUED_TICKET_ALREADY_ENTRANCE(BAD_REQUEST, "IssuedTicket_400_5", "이미 입장 처리된 티켓입니다."); private Integer status; private String code; diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java index f8bc8c8e..16385c30 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java @@ -3,7 +3,9 @@ import band.gosrock.common.annotation.DomainService; import band.gosrock.domain.common.aop.redissonLock.RedissonLock; +import band.gosrock.domain.common.vo.IssuedTicketInfoVo; import band.gosrock.domain.domains.event.adaptor.EventAdaptor; +import band.gosrock.domain.domains.event.exception.HostNotAuthEventException; import band.gosrock.domain.domains.issuedTicket.adaptor.IssuedTicketAdaptor; import band.gosrock.domain.domains.issuedTicket.adaptor.IssuedTicketOptionAnswerAdaptor; import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket; @@ -12,6 +14,7 @@ import band.gosrock.domain.domains.issuedTicket.repository.IssuedTicketRepository; import band.gosrock.domain.domains.ticket_item.domain.TicketItem; import java.util.List; +import java.util.Objects; import lombok.RequiredArgsConstructor; import org.springframework.transaction.annotation.Transactional; @@ -54,4 +57,15 @@ public void withDrawIssuedTicket(TicketItem ticketItem, List<IssuedTicket> issue issuedTicketAdaptor.delete(issuedTicket); }); } + + @Transactional + public IssuedTicketInfoVo processingEntranceIssuedTicket( + Long currentUserId, Long issuedTicketId) { + IssuedTicket issuedTicket = issuedTicketAdaptor.find(issuedTicketId); + if (!Objects.equals(issuedTicket.getEvent().getHostId(), currentUserId)) { + throw HostNotAuthEventException.EXCEPTION; + } + issuedTicket.entrance(); + return issuedTicket.toIssuedTicketInfoVo(); + } } From 783dea12f5012e2c553986128653f39c9cae27bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=A4=80?= <sanbonai06@naver.com> Date: Mon, 23 Jan 2023 17:37:28 +0900 Subject: [PATCH 3/4] =?UTF-8?q?fix:=20=ED=8B=B0=EC=BC=93=20=EC=9E=AC?= =?UTF-8?q?=EA=B3=A0=EA=B4=80=EB=A6=AC=20RedissonLock=20=ED=8A=B8=EB=9E=9C?= =?UTF-8?q?=EC=9E=AD=EC=85=98=20=EC=83=88=EB=A1=9C=20=EC=B6=94=EA=B0=80?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=98=B5=EC=85=98=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 --- .../service/IssuedTicketDomainService.java | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java index 16385c30..befb290c 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java @@ -28,11 +28,7 @@ public class IssuedTicketDomainService { private final IssuedTicketOptionAnswerAdaptor issuedTicketOptionAnswerAdaptor; private final EventAdaptor eventAdaptor; - @RedissonLock( - LockName = "티켓재고관리", - paramClassType = TicketItem.class, - identifier = "id", - needSameTransaction = true) + @RedissonLock(LockName = "티켓재고관리", paramClassType = TicketItem.class, identifier = "id") @Transactional public void createIssuedTicket( TicketItem ticketItem, List<CreateIssuedTicketDTO> createIssuedTicketDTOs) { @@ -44,11 +40,7 @@ public void createIssuedTicket( }); } - @RedissonLock( - LockName = "티켓재고관리", - paramClassType = TicketItem.class, - identifier = "id", - needSameTransaction = true) + @RedissonLock(LockName = "티켓재고관리", paramClassType = TicketItem.class, identifier = "id") @Transactional public void withDrawIssuedTicket(TicketItem ticketItem, List<IssuedTicket> issuedTickets) { issuedTickets.forEach( From 9acbe7a64356d6c2227c7cfda15499283f87e27b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=AF=BC=EC=A4=80?= <sanbonai06@naver.com> Date: Mon, 23 Jan 2023 21:06:47 +0900 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20delete=20->=20cancel=EB=A1=9C=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EB=AA=85=20=ED=86=B5=EC=9D=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domains/issuedTicket/adaptor/IssuedTicketAdaptor.java | 2 +- .../domains/issuedTicket/service/IssuedTicketDomainService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java index 0053d06f..daf8bfff 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/adaptor/IssuedTicketAdaptor.java @@ -55,7 +55,7 @@ public Page<IssuedTicket> searchIssuedTicket(Long page, IssuedTicketCondition co return issuedTicketRepository.searchToPage(condition, pageRequest); } - public void delete(IssuedTicket issuedTicket) { + public void cancel(IssuedTicket issuedTicket) { issuedTicket.cancel(); } diff --git a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java index befb290c..ce2776ce 100644 --- a/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java +++ b/DuDoong-Domain/src/main/java/band/gosrock/domain/domains/issuedTicket/service/IssuedTicketDomainService.java @@ -46,7 +46,7 @@ public void withDrawIssuedTicket(TicketItem ticketItem, List<IssuedTicket> issue issuedTickets.forEach( issuedTicket -> { issuedTicket.getTicketItem().increaseQuantity(1L); - issuedTicketAdaptor.delete(issuedTicket); + issuedTicketAdaptor.cancel(issuedTicket); }); }