Skip to content

Commit

Permalink
πŸš€ :: Api-v0.0.4-1
Browse files Browse the repository at this point in the history
πŸš€ :: Api-v0.0.4-1
  • Loading branch information
ImNM authored Jan 16, 2023
2 parents e824f42 + 0b382e8 commit 3dab3b8
Show file tree
Hide file tree
Showing 22 changed files with 291 additions and 159 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,6 @@ out/
### VS Code ###
.vscode/
.env
.env.*
.env.*

DuDoong-Domain/src/main/generated/**/*.java
Original file line number Diff line number Diff line change
Expand Up @@ -161,8 +161,11 @@ public OauthUserInfoResponse kakaoOauthUserInfo(

@Operation(summary = "refreshToken μš©μž…λ‹ˆλ‹€.")
@PostMapping("/token/refresh")
public TokenAndUserResponse tokenRefresh(@RequestParam("token") String code) {
return refreshUseCase.execute(code);
public ResponseEntity<TokenAndUserResponse> tokenRefresh(@RequestParam("token") String code) {
TokenAndUserResponse tokenAndUserResponse = refreshUseCase.execute(code);
return ResponseEntity.ok()
.headers(cookieGenerateHelper.getTokenCookies(tokenAndUserResponse))
.body(tokenAndUserResponse);
}

@Operation(summary = "νšŒμ›νƒˆν‡΄λ₯Ό ν•©λ‹ˆλ‹€.")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,21 @@
import band.gosrock.domain.common.vo.UserInfoVo;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import band.gosrock.domain.domains.user.domain.User;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class RetrieveIssuedTicketDTO {

private final IssuedTicketInfoVo issuedTicketInfo;

private final UserInfoVo userInfo;

public RetrieveIssuedTicketDTO(IssuedTicket issuedTicket, User user) {
this.issuedTicketInfo = issuedTicket.toIssuedTicketInfoVo(issuedTicket);
this.userInfo = user.toUserInfoVo(user);
public static RetrieveIssuedTicketDTO of(IssuedTicket issuedTicket, User user) {
return RetrieveIssuedTicketDTO.builder()
.issuedTicketInfo(issuedTicket.toIssuedTicketInfoVo())
.userInfo(user.toUserInfoVo())
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,14 @@

import band.gosrock.domain.common.vo.EventInfoVo;
import band.gosrock.domain.common.vo.IssuedTicketInfoVo;
import band.gosrock.domain.domains.issuedTicket.dto.response.IssuedTicketDTO;
import band.gosrock.domain.domains.user.domain.User;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import lombok.Builder;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
@Builder
public class RetrieveIssuedTicketDetailResponse {

/*
Expand All @@ -27,9 +28,11 @@ public class RetrieveIssuedTicketDetailResponse {
*/
private final String userName;

public RetrieveIssuedTicketDetailResponse(IssuedTicketDTO issuedTicket, User user) {
this.issuedTicketInfo = issuedTicket.getIssuedTicketInfo();
this.eventInfo = issuedTicket.getEventInfo();
this.userName = user.getProfile().getName();
public static RetrieveIssuedTicketDetailResponse of(IssuedTicket issuedTicket) {
return RetrieveIssuedTicketDetailResponse.builder()
.issuedTicketInfo(issuedTicket.toIssuedTicketInfoVo())
.eventInfo(issuedTicket.getEvent().toEventInfoVo())
.userName(issuedTicket.getUser().getProfile().getName())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -1,22 +1,33 @@
package band.gosrock.api.issuedTicket.dto.response;


import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import java.util.List;
import lombok.Builder;
import lombok.Getter;
import org.springframework.data.domain.Page;

@Getter
@Builder
public class RetrieveIssuedTicketListResponse {

private final Long page;
private final int page;

private final Long totalPage;
private final int totalPage;

private final List<RetrieveIssuedTicketDTO> issuedTickets;

public RetrieveIssuedTicketListResponse(
Long page, Long totalPage, List<RetrieveIssuedTicketDTO> issuedTickets) {
this.page = page;
this.totalPage = totalPage;
this.issuedTickets = issuedTickets;
public static RetrieveIssuedTicketListResponse of(Page<IssuedTicket> issuedTickets) {
return RetrieveIssuedTicketListResponse.builder()
.page(issuedTickets.getPageable().getPageNumber())
.totalPage(issuedTickets.getTotalPages())
.issuedTickets(
issuedTickets.stream()
.map(
issuedTicket ->
RetrieveIssuedTicketDTO.of(
issuedTicket, issuedTicket.getUser()))
.toList())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package band.gosrock.api.issuedTicket.mapper;


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.issuedTicket.adaptor.IssuedTicketAdaptor;
import band.gosrock.domain.domains.issuedTicket.dto.condtion.IssuedTicketCondition;
import lombok.RequiredArgsConstructor;
import org.springframework.transaction.annotation.Transactional;

@Mapper
@RequiredArgsConstructor
public class IssuedTicketMapper {

private final IssuedTicketAdaptor issuedTicketAdaptor;

@Transactional(readOnly = true)
public RetrieveIssuedTicketListResponse toIssuedTicketPageResponse(
Long page, IssuedTicketCondition condition) {
return RetrieveIssuedTicketListResponse.of(
issuedTicketAdaptor.searchIssuedTicket(page, condition));
}

@Transactional(readOnly = true)
public RetrieveIssuedTicketDetailResponse toIssuedTicketDetailResponse(
Long currentUserId, Long issuedTicketId) {
return RetrieveIssuedTicketDetailResponse.of(
issuedTicketAdaptor.find(currentUserId, issuedTicketId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,17 @@

import band.gosrock.api.config.security.SecurityUtils;
import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketDetailResponse;
import band.gosrock.api.issuedTicket.mapper.IssuedTicketMapper;
import band.gosrock.common.annotation.UseCase;
import band.gosrock.domain.domains.issuedTicket.dto.response.IssuedTicketDTO;
import band.gosrock.domain.domains.issuedTicket.service.IssuedTicketDomainService;
import band.gosrock.domain.domains.user.domain.User;
import band.gosrock.domain.domains.user.service.UserDomainService;
import lombok.RequiredArgsConstructor;

@UseCase
@RequiredArgsConstructor
public class ReadIssuedTicketUseCase {

private final IssuedTicketDomainService issuedTicketDomainService;
private final UserDomainService userDomainService;
private final IssuedTicketMapper issuedTicketMapper;

/**
* λ°œκΈ‰ ν‹°μΌ“ 상세 정보 API
Expand All @@ -25,12 +23,6 @@ public class ReadIssuedTicketUseCase {
*/
public RetrieveIssuedTicketDetailResponse execute(Long issuedTicketId) {
Long currentUserId = SecurityUtils.getCurrentUserId();
/*
Todo: 지연 λ‘œλ”© νŠΈλžœμž­μ…˜ 이슈 λ•Œλ¬Έμ— 일단은 DTO둜 κ°μ‹Έμ„œ 올림. But, 이게 μ΅œμ„ μΌκΉŒ? κ³ λ―Όν•΄λ³΄μž.
*/
IssuedTicketDTO issuedTicket =
issuedTicketDomainService.retrieveIssuedTicket(currentUserId, issuedTicketId);
User user = userDomainService.retrieveUser(currentUserId);
return new RetrieveIssuedTicketDetailResponse(issuedTicket, user);
return issuedTicketMapper.toIssuedTicketDetailResponse(currentUserId, issuedTicketId);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,46 +2,32 @@


import band.gosrock.api.config.security.SecurityUtils;
import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketDTO;
import band.gosrock.api.issuedTicket.dto.response.RetrieveIssuedTicketListResponse;
import band.gosrock.api.issuedTicket.mapper.IssuedTicketMapper;
import band.gosrock.common.annotation.UseCase;
import band.gosrock.domain.domains.event.service.EventService;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import band.gosrock.domain.domains.issuedTicket.dto.condtion.IssuedTicketCondition;
import band.gosrock.domain.domains.issuedTicket.service.IssuedTicketDomainService;
import band.gosrock.domain.domains.user.service.UserDomainService;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.transaction.annotation.Transactional;

@UseCase
@RequiredArgsConstructor
public class ReadIssuedTicketsUseCase {

private final IssuedTicketDomainService issuedTicketDomainService;
private final UserDomainService userDomainService;
private final IssuedTicketMapper issuedTicketMapper;
private final EventService eventService;

/**
* λ°œκΈ‰λœ ν‹°μΌ“ 리슀트 κ°€μ Έμ˜€κΈ° API 일단 μœ μ¦ˆμΌ€μ΄μŠ€μ— νŠΈλžœμž­μ…˜ κ±Έμ–΄μ„œ 처리 IssuedTicket에 κ±Έλ¦° event와 userλ₯Ό 연관관계 맀핑 없이 μ‘°νšŒν•˜λ €ν•  λ•Œ
* 둜직이 λ„ˆλ¬΄ λ³΅μž‘ν•΄μ§ => 일단 연관관계 맀핑 걸어두고 λ‚˜μ€‘μ— QueryDsl μ„€μ • λ“€μ–΄μ˜€λ©΄ λ°”κΏ”μ•Ό ν•  λ“―
* 둜직이 λ„ˆλ¬΄ λ³΅μž‘ν•΄μ§ => 일단 연관관계 맀핑 걸어두고 λ‚˜μ€‘μ— QueryDsl μ„€μ • λ“€μ–΄μ˜€λ©΄ λ°”κΏ”μ•Ό ν•  λ“― => QueryDsl μΆ”κ°€ μ™„λ£Œ
*/
@Transactional(readOnly = true)
public RetrieveIssuedTicketListResponse execute(
Long page, Long eventId, String userName, String phoneNumber) {
Long currentUserId = SecurityUtils.getCurrentUserId();
// 쑰회 μœ μ € κΆŒν•œ 인증
eventService.checkEventHost(currentUserId, eventId);
Page<IssuedTicket> issuedTickets =
issuedTicketDomainService.retrieveIssuedTickets(
page, eventId, userName, phoneNumber);
return new RetrieveIssuedTicketListResponse(
page,
(long) issuedTickets.getTotalPages(),
issuedTickets.stream()
.map(
issuedTicket ->
new RetrieveIssuedTicketDTO(
issuedTicket, issuedTicket.getUser()))
.toList());
return issuedTicketMapper.toIssuedTicketPageResponse(
page, new IssuedTicketCondition(eventId, userName, phoneNumber));
}
}
21 changes: 20 additions & 1 deletion DuDoong-Domain/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,23 @@ dependencies {
runtimeOnly 'com.h2database:h2'
implementation project(':DuDoong-Common')
implementation project(':DuDoong-Infrastructure')
}
//queryDsl μ„€μ • λΆ€λΆ„
api ("com.querydsl:querydsl-core") // querydsl
api ("com.querydsl:querydsl-jpa") // querydsl
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor μ‚¬μš© 지정
annotationProcessor("jakarta.persistence:jakarta.persistence-api")
annotationProcessor("jakarta.annotation:jakarta.annotation-api")
}
//https://jojoldu.tistory.com/372
def generated='src/main/generated'
sourceSets {
main.java.srcDirs += [ generated ]
}

tasks.withType(JavaCompile) {
options.annotationProcessorGeneratedSourcesDirectory = file(generated)
}

clean.doLast {
file(generated).deleteDir()
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,14 @@
import band.gosrock.domain.domains.event.domain.EventStatus;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;
import lombok.Builder;
import lombok.Getter;

/*
이벀트 정보 VO (곡용)
*/
@Getter
@Builder
public class EventInfoVo {

/*
Expand Down Expand Up @@ -41,11 +43,13 @@ public class EventInfoVo {
*/
private final EventStatus eventStatus;

public EventInfoVo(Event event) {
this.eventName = event.getName();
this.posterImage = event.getPosterImage();
this.startAt = event.getStartAt();
this.eventStatus = event.getStatus();
this.placeName = event.getPlaceName();
public static EventInfoVo from(Event event) {
return EventInfoVo.builder()
.eventName(event.getName())
.posterImage(event.getPosterImage())
.startAt(event.getStartAt())
.placeName(event.getPlaceName())
.eventStatus(event.getStatus())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package band.gosrock.domain.config;


import com.querydsl.jpa.impl.JPAQueryFactory;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QueryDslConfig {

@PersistenceContext private EntityManager entityManager;

@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}
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.EventInfoVo;
import band.gosrock.domain.common.vo.RefundInfoVo;
import java.time.LocalDateTime;
import javax.persistence.*;
Expand Down Expand Up @@ -97,4 +98,8 @@ public Event(
public RefundInfoVo getRefundInfoVo() {
return RefundInfoVo.from(startAt);
}

public EventInfoVo toEventInfoVo() {
return EventInfoVo.from(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,16 @@

import band.gosrock.common.annotation.Adaptor;
import band.gosrock.domain.domains.issuedTicket.domain.IssuedTicket;
import band.gosrock.domain.domains.issuedTicket.dto.condtion.IssuedTicketCondition;
import band.gosrock.domain.domains.issuedTicket.exception.IssuedTicketNotFoundException;
import band.gosrock.domain.domains.issuedTicket.exception.IssuedTicketUserNotMatchedException;
import band.gosrock.domain.domains.issuedTicket.repository.IssuedTicketRepository;
import java.util.List;
import java.util.Objects;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;

@Adaptor
@RequiredArgsConstructor
Expand All @@ -28,25 +32,20 @@ public List<IssuedTicket> findAllByOrderLineId(Long orderLineId) {
return issuedTicketRepository.findAllByOrderLineId(orderLineId);
}

public IssuedTicket find(Long issuedTicket) {
return issuedTicketRepository
.findById(issuedTicket)
.orElseThrow(() -> IssuedTicketNotFoundException.EXCEPTION);
public IssuedTicket find(Long currentUserId, Long issuedTicketId) {
IssuedTicket issuedTicket =
issuedTicketRepository
.find(issuedTicketId)
.orElseThrow(() -> IssuedTicketNotFoundException.EXCEPTION);
if (!Objects.equals(issuedTicket.getUser().getId(), currentUserId)) {
throw IssuedTicketUserNotMatchedException.EXCEPTION;
}
return issuedTicket;
}

public Page<IssuedTicket> findAllByEvent(PageRequest pageRequest, Long eventId) {
return issuedTicketRepository.findAllByEvent_IdOrderByIdDesc(eventId, pageRequest);
}

public Page<IssuedTicket> findAllByEventAndUserName(
PageRequest pageRequest, Long eventId, String userName) {
return issuedTicketRepository.findAllByEvent_IdAndUser_Profile_NameContaining(
eventId, userName, pageRequest);
}

public Page<IssuedTicket> findAllByEventAndUserPhoneNumber(
PageRequest pageRequest, Long eventId, String phoneNumber) {
return issuedTicketRepository.findAllByEvent_IdAndUser_Profile_PhoneNumberContaining(
eventId, phoneNumber, pageRequest);
public Page<IssuedTicket> searchIssuedTicket(Long page, IssuedTicketCondition condition) {
PageRequest pageRequest =
PageRequest.of(Math.toIntExact(page), 10, Sort.by("id").descending());
return issuedTicketRepository.searchToPage(condition, pageRequest);
}
}
Loading

0 comments on commit 3dab3b8

Please sign in to comment.