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: 발급 티켓 관련 DDD 적용 리팩토링 및 관리자 티켓 취소 API 작성 #247

Merged
merged 14 commits into from
Feb 1, 2023
Merged
Show file tree
Hide file tree
Changes from all 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
Expand Up @@ -19,7 +19,7 @@
@SecurityRequirement(name = "access-token")
@Tag(name = "발급 티켓 관련 어드민 컨트롤러")
@RestController
@RequestMapping("/v1/admin/issuedTickets")
@RequestMapping("/v1/event/{eventId}/issuedTickets")
@RequiredArgsConstructor
public class AdminIssuedTicketController {

Expand All @@ -30,16 +30,17 @@ public class AdminIssuedTicketController {
@Operation(summary = "[어드민 기능] 발급 티켓 리스트 가져오기 API 입니다.")
@GetMapping
public RetrieveIssuedTicketListResponse getIssuedTickets(
@PathVariable Long eventId,
@RequestParam Long page,
@RequestParam Long eventId,
@RequestParam(required = false) String userName,
@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);
public IssuedTicketInfoVo patchIssuedTicketStatus(
@PathVariable Long eventId, @PathVariable Long issuedTicketId) {
return entranceIssuedTicketUseCase.execute(eventId, issuedTicketId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,13 @@


import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketDetailResponse;
import band.gosrock.api.issuedTicket.service.CreateIssuedTicketUseCase;
import band.gosrock.api.issuedTicket.service.ReadIssuedTicketUseCase;
import band.gosrock.common.annotation.DevelopOnlyApi;
import band.gosrock.domain.domains.issuedTicket.dto.request.CreateIssuedTicketForDevDTO;
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.PathVariable;
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;

Expand All @@ -24,20 +19,11 @@
@RequiredArgsConstructor
public class IssuedTicketController {

private final CreateIssuedTicketUseCase createIssuedTicketUseCase;
private final ReadIssuedTicketUseCase readIssuedTicketUseCase;

@Operation(summary = "발급 티켓 가져오기 API 입니다.")
@GetMapping(value = "/{issuedTicketId}", produces = "application/json; charset=utf-8")
public RetrieveIssuedTicketDetailResponse getIssuedTicket(@PathVariable Long issuedTicketId) {
return readIssuedTicketUseCase.execute(issuedTicketId);
}

@Operation(summary = "개발용 발급 티켓 생성 API 입니다.")
@DevelopOnlyApi
@PostMapping(value = "/develop")
public RetrieveIssuedTicketDetailResponse postIssuedTicket(
@RequestBody CreateIssuedTicketForDevDTO body) {
return createIssuedTicketUseCase.executeForDev(body);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@

import band.gosrock.domain.common.vo.IssuedTicketInfoVo;
import band.gosrock.domain.common.vo.IssuedTicketOptionAnswerVo;
import band.gosrock.domain.common.vo.UserInfoVo;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicketOptionAnswer;
import band.gosrock.domain.domains.user.domain.User;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -17,14 +15,13 @@ public class RetrieveIssuedTicketDTO {

private final IssuedTicketInfoVo issuedTicketInfo;

private final UserInfoVo userInfo;
// private final UserInfoVo userInfo;

private final List<IssuedTicketOptionAnswerVo> issuedTicketOptionAnswers;

public static RetrieveIssuedTicketDTO of(IssuedTicket issuedTicket, User user) {
public static RetrieveIssuedTicketDTO of(IssuedTicket issuedTicket) {
return RetrieveIssuedTicketDTO.builder()
.issuedTicketInfo(issuedTicket.toIssuedTicketInfoVo())
.userInfo(user.toUserInfoVo())
.issuedTicketOptionAnswers(
issuedTicket.getIssuedTicketOptionAnswers().stream()
.map(IssuedTicketOptionAnswer::toIssuedTicketOptionAnswerVo)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

import band.gosrock.domain.common.vo.EventInfoVo;
import band.gosrock.domain.common.vo.IssuedTicketInfoVo;
import band.gosrock.domain.domains.event.domain.Event;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -23,16 +24,10 @@ public class RetrieveIssuedTicketDetailResponse {
*/
private final EventInfoVo eventInfo;

/*
발급 유저 이름
*/
private final String userName;

public static RetrieveIssuedTicketDetailResponse of(IssuedTicket issuedTicket) {
public static RetrieveIssuedTicketDetailResponse of(IssuedTicket issuedTicket, Event event) {
return RetrieveIssuedTicketDetailResponse.builder()
.issuedTicketInfo(issuedTicket.toIssuedTicketInfoVo())
.eventInfo(issuedTicket.getEvent().toEventInfoVo())
.userName(issuedTicket.getUser().getProfile().getName())
.eventInfo(event.toEventInfoVo())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,7 @@ public static RetrieveIssuedTicketListResponse of(Page<IssuedTicket> issuedTicke
return RetrieveIssuedTicketListResponse.builder()
.page(issuedTickets.getPageable().getPageNumber())
.totalPage(issuedTickets.getTotalPages())
.issuedTickets(
issuedTickets.stream()
.map(
issuedTicket ->
RetrieveIssuedTicketDTO.of(
issuedTicket, issuedTicket.getUser()))
.toList())
.issuedTickets(issuedTickets.stream().map(RetrieveIssuedTicketDTO::of).toList())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@
import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketDetailResponse;
import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketListResponse;
import band.gosrock.common.annotation.Mapper;
import band.gosrock.domain.domains.event.adaptor.EventAdaptor;
import band.gosrock.domain.domains.event.domain.Event;
import band.gosrock.domain.domains.issuedTicket.adaptor.IssuedTicketAdaptor;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import band.gosrock.domain.domains.issuedTicket.dto.condition.IssuedTicketCondition;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;
Expand All @@ -15,6 +18,8 @@ public class IssuedTicketMapper {

private final IssuedTicketAdaptor issuedTicketAdaptor;

private final EventAdaptor eventAdaptor;

@Transactional(readOnly = true)
public RetrieveIssuedTicketListResponse toIssuedTicketPageResponse(
Long page, IssuedTicketCondition condition) {
Expand All @@ -25,7 +30,13 @@ public RetrieveIssuedTicketListResponse toIssuedTicketPageResponse(
@Transactional(readOnly = true)
public RetrieveIssuedTicketDetailResponse toIssuedTicketDetailResponse(
Long currentUserId, Long issuedTicketId) {
return RetrieveIssuedTicketDetailResponse.of(
issuedTicketAdaptor.findForUser(currentUserId, issuedTicketId));
IssuedTicket issuedTicket = issuedTicketAdaptor.findForUser(currentUserId, issuedTicketId);
Event event = eventAdaptor.findById(issuedTicket.getEventId());
return RetrieveIssuedTicketDetailResponse.of(issuedTicket, event);
}

@Transactional(readOnly = true)
public IssuedTicket getIssuedTicket(Long issuedTicketId) {
return issuedTicketAdaptor.queryIssuedTicket(issuedTicketId);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ public class EntranceIssuedTicketUseCase {

private final UserUtils userUtils;

public IssuedTicketInfoVo execute(Long issuedTicketId) {
public IssuedTicketInfoVo execute(Long eventId, Long issuedTicketId) {
Long currentUserId = userUtils.getCurrentUserId();
return issuedTicketDomainService.processingEntranceIssuedTicket(
currentUserId, issuedTicketId);
eventId, currentUserId, issuedTicketId);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
package band.gosrock.domain.common.vo;


import band.gosrock.common.annotation.DateFormat;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicketStatus;
import com.fasterxml.jackson.annotation.JsonFormat;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicketUserInfoVo;
import java.time.LocalDateTime;
import lombok.Builder;
import lombok.Getter;
Expand Down Expand Up @@ -40,11 +41,7 @@ public class IssuedTicketInfoVo {
/*
티켓 발급 시간
*/
@JsonFormat(
shape = JsonFormat.Shape.STRING,
pattern = "yyyy-MM-dd HH:mm:ss",
timezone = "Asia/Seoul")
private final LocalDateTime createdAt;
@DateFormat private final LocalDateTime createdAt;

/*
발급 티켓 상태
Expand All @@ -56,16 +53,19 @@ public class IssuedTicketInfoVo {
*/
private final Money optionPrice;

private final IssuedTicketUserInfoVo userInfo;

public static IssuedTicketInfoVo from(IssuedTicket issuedTicket) {
return IssuedTicketInfoVo.builder()
.issuedTicketId(issuedTicket.getId())
.issuedTicketNo(issuedTicket.getIssuedTicketNo())
.uuid(issuedTicket.getUuid())
.ticketName(issuedTicket.getTicketItem().getName())
.ticketName(issuedTicket.getItemInfo().getTicketName())
.ticketPrice(issuedTicket.getPrice())
.createdAt(issuedTicket.getCreatedAt())
.issuedTicketStatus(issuedTicket.getIssuedTicketStatus())
.optionPrice(issuedTicket.sumOptionPrice())
.userInfo(issuedTicket.getUserInfo())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,13 @@ public IssuedTicket findForUser(Long currentUserId, Long issuedTicketId) {
issuedTicketRepository
.find(issuedTicketId)
.orElseThrow(() -> IssuedTicketNotFoundException.EXCEPTION);
if (!Objects.equals(issuedTicket.getUser().getId(), currentUserId)) {
if (!Objects.equals(issuedTicket.getUserInfo().getUserId(), currentUserId)) {
throw IssuedTicketUserNotMatchedException.EXCEPTION;
}
return issuedTicket;
}

public IssuedTicket find(Long issuedTicketId) {
public IssuedTicket queryIssuedTicket(Long issuedTicketId) {
return issuedTicketRepository
.find(issuedTicketId)
.orElseThrow(() -> IssuedTicketNotFoundException.EXCEPTION);
Expand Down
Loading