Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor : 두둥티켓 계좌정보 분리 #378

Merged
merged 3 commits into from
Feb 19, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package band.gosrock.api.cart.model.dto.response;


import band.gosrock.domain.common.vo.AccountInfoVo;
import band.gosrock.domain.common.vo.Money;
import band.gosrock.domain.domains.cart.domain.Cart;
import band.gosrock.domain.domains.ticket_item.domain.TicketItem;
Expand Down Expand Up @@ -41,7 +42,7 @@ public class CartResponse {
private final TicketPayType ticketPayType;

@Schema(description = "계좌정보", nullable = true)
private final String accountNumber;
private final AccountInfoVo accountInfo;

public static CartResponse of(
List<CartItemResponse> cartItemResponses, Cart cart, TicketItem item) {
Expand All @@ -54,7 +55,7 @@ public static CartResponse of(
.totalQuantity(cart.getTotalQuantity())
.approveType(item.getType())
.ticketPayType(item.getPayType())
.accountNumber(item.getAccountNumber())
.accountInfo(item.getAccountInfo())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package band.gosrock.api.order.model.dto.response;


import band.gosrock.domain.common.vo.AccountInfoVo;
import band.gosrock.domain.common.vo.Money;
import band.gosrock.domain.domains.order.domain.Order;
import band.gosrock.domain.domains.order.domain.OrderMethod;
Expand Down Expand Up @@ -43,7 +44,7 @@ public class CreateOrderResponse {
private final TicketPayType ticketPayType;

@Schema(description = "계좌정보", nullable = true)
private final String accountNumber;
private final AccountInfoVo accountInfo;

public static CreateOrderResponse from(Order order, TicketItem item, Profile profile) {
return CreateOrderResponse.builder()
Expand All @@ -56,7 +57,7 @@ public static CreateOrderResponse from(Order order, TicketItem item, Profile pro
.isNeedPayment(order.isNeedPaid())
.approveType(item.getType())
.ticketPayType(item.getPayType())
.accountNumber(item.getAccountNumber())
.accountInfo(item.getAccountInfo())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,17 @@ public class CreateTicketItemRequest {
private String description;

@Nullable
@Schema(nullable = true, example = "신한은행 110-123-1234567")
@Schema(nullable = true, example = "신한은행")
private String bankName;

@Nullable
@Schema(nullable = true, example = "110-123-1234567")
private String accountNumber;

@Nullable
@Schema(nullable = true, example = "김원진")
private String accountHolder;

@NotNull
@Schema(defaultValue = "0", nullable = false, example = "4000")
private Long price;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@NotNull 말고 @Positive 아니면 @Min 을 이용해서 음수 처리도 해주면 좋을 거 같아요

Expand All @@ -39,7 +47,7 @@ public class CreateTicketItemRequest {
@Schema(nullable = false, example = "100")
private Long supplyCount;

@Schema(nullable = false, defaultValue = "선착순")
@Schema(nullable = false, defaultValue = "승인")
@Enum(message = "선착순, 승인만 허용됩니다")
private TicketType approveType;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package band.gosrock.api.ticketItem.dto.response;


import band.gosrock.domain.common.vo.AccountInfoVo;
import band.gosrock.domain.common.vo.Money;
import band.gosrock.domain.domains.ticket_item.domain.TicketItem;
import band.gosrock.domain.domains.ticket_item.domain.TicketPayType;
Expand Down Expand Up @@ -42,6 +43,9 @@ public class TicketItemResponse {
@Schema(description = "재고공개 여부")
private final Boolean isQuantityPublic;

@Schema(description = "계좌 정보")
private final AccountInfoVo accountInfo;

public static TicketItemResponse from(TicketItem ticketItem, Boolean isAdmin) {

return TicketItemResponse.builder()
Expand All @@ -58,6 +62,7 @@ public static TicketItemResponse from(TicketItem ticketItem, Boolean isAdmin) {
? ticketItem.getQuantity()
: null)
.isQuantityPublic(ticketItem.getIsQuantityPublic())
.accountInfo(ticketItem.getAccountInfo())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ public TicketItem toTicketItem(CreateTicketItemRequest createTicketItemRequest,
.supplyCount(createTicketItemRequest.getSupplyCount())
.purchaseLimit(createTicketItemRequest.getPurchaseLimit())
.type(createTicketItemRequest.getApproveType())
.bankName(createTicketItemRequest.getBankName())
.accountNumber(createTicketItemRequest.getAccountNumber())
.accountHolder(createTicketItemRequest.getAccountHolder())
.isQuantityPublic(createTicketItemRequest.getIsQuantityPublic())
.isSellable(true)
.event(event)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package band.gosrock.domain.common.vo;


import javax.persistence.Embeddable;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;

@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Embeddable
public class AccountInfoVo {

private String bankName;

private String accountNumber;

private String accountHolder;

public AccountInfoVo(String bankName, String accountNumber, String accountHolder) {
this.bankName = bankName;
this.accountNumber = accountNumber;
this.accountHolder = accountHolder;
}

public static AccountInfoVo valueOf(
String bankName, String accountNumber, String accountHolder) {
return new AccountInfoVo(bankName, accountNumber, accountHolder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@


import band.gosrock.domain.common.model.BaseTimeEntity;
import band.gosrock.domain.common.vo.AccountInfoVo;
import band.gosrock.domain.common.vo.Money;
import band.gosrock.domain.common.vo.RefundInfoVo;
import band.gosrock.domain.domains.event.domain.Event;
Expand Down Expand Up @@ -53,8 +54,7 @@ public class TicketItem extends BaseTimeEntity {
@Enumerated(EnumType.STRING)
private TicketType type;

// 계좌번호
private String accountNumber;
@Embedded private AccountInfoVo accountInfo;

// 재고 공개 여부
private Boolean isQuantityPublic;
Expand Down Expand Up @@ -90,7 +90,9 @@ public TicketItem(
Long supplyCount,
Long purchaseLimit,
TicketType type,
String bankName,
String accountNumber,
String accountHolder,
Boolean isQuantityPublic,
Boolean isSellable,
LocalDateTime saleStartAt,
Expand All @@ -104,7 +106,7 @@ public TicketItem(
this.supplyCount = supplyCount;
this.purchaseLimit = purchaseLimit;
this.type = type;
this.accountNumber = accountNumber;
this.accountInfo = AccountInfoVo.valueOf(bankName, accountNumber, accountHolder);
this.isQuantityPublic = isQuantityPublic;
this.isSellable = isSellable;
this.saleStartAt = saleStartAt;
Expand Down Expand Up @@ -149,13 +151,15 @@ public void validateEventId(Long eventId) {
}

public void validateTicketPayType(Boolean isPartner) {
// 두둥티켓은 무조건 승인 + 계좌번호 필요
// 두둥티켓은 무조건 승인 + 계좌정보 필요
if (this.payType.equals(TicketPayType.DUDOONG_TICKET)) {
if (!this.type.equals(TicketType.APPROVAL)) {
throw InvalidTicketTypeException.EXCEPTION;
}
if (StringUtils.isEmpty(this.accountNumber)) {
throw EmptyAccountNumberException.EXCEPTION;
if (StringUtils.isEmpty(this.accountInfo.getBankName())
|| StringUtils.isEmpty(this.accountInfo.getAccountNumber())
|| StringUtils.isEmpty(this.accountInfo.getAccountHolder())) {
throw EmptyAccountInfoException.EXCEPTION;
}
}
// 유료티켓은 무조건 선착순 + 제휴 확인 + 1000원 이상
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package band.gosrock.domain.domains.ticket_item.exception;


import band.gosrock.common.exception.DuDoongCodeException;

public class EmptyAccountInfoException extends DuDoongCodeException {

public static final DuDoongCodeException EXCEPTION = new EmptyAccountInfoException();

private EmptyAccountInfoException() {
super(TicketItemErrorCode.EMPTY_ACCOUT_INFO);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ public enum TicketItemErrorCode implements BaseErrorCode {
@ExplainError("이미 적용되어 옵션그룹 삭제가 불가능할 경우 발생하는 오류입니다.")
FORBIDDEN_OPTION_GROUP_DELETE(BAD_REQUEST, "Option_Group_400_2", "옵션그룹 삭제가 불가능한 상태입니다."),
@ExplainError("두둥티켓 타입에 계좌번호가 입력되지 않았을 경우 발생하는 오류입니다.")
EMPTY_ACCOUT_NUMBER(BAD_REQUEST, "Ticket_Item_400_8", "계좌번호가 필요합니다."),
EMPTY_ACCOUT_INFO(BAD_REQUEST, "Ticket_Item_400_8", "계좌정보가 필요합니다."),
@ExplainError("티켓 지불방식과 승인방식이 불가능한 조합일때 발생하는 오류입니다.")
INVALID_TICKET_TYPE(BAD_REQUEST, "Ticket_Item_400_9", "잘못된 티켓 승인타입입니다."),
@ExplainError("제휴되지 않은 호스트가 유료티켓 생성을 요청했을때 발생하는 오류입니다.")
Expand Down