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

feat : 이벤트 조회 분리 #240

Merged
merged 4 commits into from
Jan 31, 2023
Merged
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
@@ -8,38 +8,37 @@
import band.gosrock.api.event.model.dto.response.EventProfileResponse;
import band.gosrock.api.event.model.dto.response.EventResponse;
import band.gosrock.api.event.service.CreateEventUseCase;
import band.gosrock.api.event.service.ReadEventProfileListUseCase;
import band.gosrock.api.event.service.ReadUserEventProfilesUseCase;
import band.gosrock.api.event.service.UpdateEventBasicUseCase;
import band.gosrock.api.event.service.UpdateEventDetailUseCase;
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.springdoc.api.annotations.ParameterObject;
import org.springframework.data.domain.Pageable;
import org.springframework.data.web.PageableDefault;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@SecurityRequirement(name = "access-token")
@Tag(name = "이벤트(공연) 관련 컨트롤러")
@RestController
@RequestMapping("/v1/events")
@RequiredArgsConstructor
public class EventController {

private final ReadEventProfileListUseCase readHostEventListUseCase;
private final ReadUserEventProfilesUseCase readUserHostEventListUseCase;
private final CreateEventUseCase createEventUseCase;
private final UpdateEventBasicUseCase updateEventBasicUseCase;
private final UpdateEventDetailUseCase updateEventDetailUseCase;

// todo :: querydsl + 검색 기능 작동하도록 만들기
@Operation(summary = "특정 호스트가 관리 중인 이벤트 리스트를 가져옵니다")
@Operation(summary = "자신이 관리 중인 이벤트 리스트를 가져옵니다.")
@GetMapping
public PageResponse<EventProfileResponse> getAllEventByHostId(
@RequestParam Long hostId,
public PageResponse<EventProfileResponse> getAllEventByUser(
@ParameterObject @PageableDefault(size = 10) Pageable pageable) {
return readHostEventListUseCase.execute(hostId, pageable);
return readUserHostEventListUseCase.execute(pageable);
}

@Operation(summary = "공연 기본 정보를 등록하여, 새로운 이벤트(공연)를 생성합니다")
Original file line number Diff line number Diff line change
@@ -3,6 +3,7 @@

import band.gosrock.domain.common.vo.EventProfileVo;
import band.gosrock.domain.domains.event.domain.Event;
import band.gosrock.domain.domains.host.domain.Host;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import lombok.Builder;
import lombok.Getter;
@@ -11,9 +12,17 @@
@Getter
@Builder
public class EventProfileResponse {
private Long hostId;

private String hostName;

@JsonUnwrapped private EventProfileVo eventProfileVo;

public static EventProfileResponse of(Event event) {
return EventProfileResponse.builder().eventProfileVo(event.toEventProfileVo()).build();
public static EventProfileResponse of(Host host, Event event) {
return EventProfileResponse.builder()
.hostId(host.getId())
.hostName(host.getProfile().getName())
.eventProfileVo(event.toEventProfileVo())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -22,7 +22,7 @@ public class EventResponse {
@JsonUnwrapped private EventDetailVo eventDetail;
@JsonUnwrapped private EventPlaceVo eventPlace;

/*************** 미확정된 정보 ******************/
/** todo : ************* 미확정된 정보 ***************** */
@DateFormat private LocalDateTime ticketingStartAt;

@DateFormat private LocalDateTime ticketingEndAt;
Original file line number Diff line number Diff line change
@@ -4,20 +4,27 @@
import band.gosrock.api.event.model.dto.request.CreateEventRequest;
import band.gosrock.api.event.model.dto.request.UpdateEventBasicRequest;
import band.gosrock.api.event.model.dto.request.UpdateEventDetailRequest;
import band.gosrock.api.event.model.dto.response.EventProfileResponse;
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.event.domain.EventBasic;
import band.gosrock.domain.domains.event.domain.EventDetail;
import band.gosrock.domain.domains.event.domain.EventPlace;
import band.gosrock.domain.domains.event.service.EventService;
import band.gosrock.domain.domains.host.adaptor.HostAdaptor;
import band.gosrock.domain.domains.host.domain.Host;
import java.util.List;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;

@Mapper
@RequiredArgsConstructor
public class EventMapper {

private final EventService eventService;
private final HostAdaptor hostAdaptor;
private final EventAdaptor eventAdaptor;

@Transactional(readOnly = true)
public Event toEntity(CreateEventRequest createEventRequest) {
@@ -54,5 +61,17 @@ public EventPlace toEventPlace(UpdateEventBasicRequest updateEventBasicRequest)
.build();
}

// todo :: 공연 장소
public Page<EventProfileResponse> toEventProfileResponsePage(Long userId, Pageable pageable) {
List<Host> hostList = hostAdaptor.findAllByHostUsers_UserId(userId);
List<Long> hostIds = hostList.stream().map(Host::getId).toList();
Page<Event> eventList = eventAdaptor.findAllByHostIdIn(hostIds, pageable);
return eventList.map(event -> this.toEventProfileResponse(hostList, event));
}

private EventProfileResponse toEventProfileResponse(List<Host> hostList, Event event) {
for (Host host : hostList) {
if (host.getId().equals(event.getHostId())) return EventProfileResponse.of(host, event);
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -12,11 +12,14 @@
@UseCase
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ReadEventProfileListUseCase {
public class ReadEventDetailUseCase {
private final EventAdaptor eventAdaptor;

@Deprecated
public PageResponse<EventProfileResponse> execute(Long hostId, Pageable pageable) {
return PageResponse.of(
eventAdaptor.findAllByHostId(hostId, pageable).map(EventProfileResponse::of));
return null;
// PageResponse.of(
// eventAdaptor.findAllByHostId(hostId,
// pageable).map(EventProfileResponse::of));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package band.gosrock.api.event.service;


import band.gosrock.api.common.UserUtils;
import band.gosrock.api.common.page.PageResponse;
import band.gosrock.api.event.model.dto.response.EventProfileResponse;
import band.gosrock.api.event.model.mapper.EventMapper;
import band.gosrock.common.annotation.UseCase;
import band.gosrock.domain.domains.user.domain.User;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;

@UseCase
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ReadUserEventProfilesUseCase {
private final UserUtils userUtils;
private final EventMapper eventMapper;

public PageResponse<EventProfileResponse> execute(Pageable pageable) {
final User user = userUtils.getCurrentUser();
final Long userId = user.getId();
return PageResponse.of(eventMapper.toEventProfileResponsePage(userId, pageable));
}
}
Original file line number Diff line number Diff line change
@@ -4,6 +4,7 @@
import band.gosrock.api.common.page.PageResponse;
import band.gosrock.api.host.model.dto.request.*;
import band.gosrock.api.host.model.dto.response.HostDetailResponse;
import band.gosrock.api.host.model.dto.response.HostEventProfileResponse;
import band.gosrock.api.host.model.dto.response.HostProfileResponse;
import band.gosrock.api.host.model.dto.response.HostResponse;
import band.gosrock.api.host.service.*;
@@ -28,8 +29,9 @@
@Validated
public class HostController {
private final ReadHostUseCase readHostUseCase;
private final ReadHostProfileListUseCase readHostListUseCase;
private final ReadInviteUserListUseCase readInviteUserListUseCase;
private final ReadHostProfilesUseCase readHostsUseCase;
private final ReadHostEventsUseCase readHostEventsUseCase;
private final ReadInviteUsersUseCase readInviteUsersUseCase;
private final CreateHostUseCase createHostUseCase;
private final UpdateHostProfileUseCase updateHostProfileUseCase;
private final UpdateHostSlackUrlUseCase updateHostSlackUrlUseCase;
@@ -41,7 +43,7 @@ public class HostController {
@GetMapping
public PageResponse<HostProfileResponse> getAllHosts(
@ParameterObject @PageableDefault(size = 10) Pageable pageable) {
return readHostListUseCase.execute(pageable);
return readHostsUseCase.execute(pageable);
}

@Operation(summary = "고유 아이디에 해당하는 호스트 정보를 가져옵니다.")
@@ -54,7 +56,15 @@ public HostDetailResponse getHostById(@PathVariable Long hostId) {
@GetMapping("/{hostId}/invite/users")
public UserProfileVo getInviteUserListByEmail(
@PathVariable Long hostId, @RequestParam(value = "email") @Email String email) {
return readInviteUserListUseCase.execute(hostId, email);
return readInviteUsersUseCase.execute(hostId, email);
}

@Operation(summary = "해당 호스트가 관리중인 이벤트 리스트를 가져옵니다.")
@GetMapping("/{hostId}/events")
public PageResponse<HostEventProfileResponse> getHostEventsById(
@PathVariable Long hostId,
@ParameterObject @PageableDefault(size = 10) Pageable pageable) {
return readHostEventsUseCase.execute(hostId, pageable);
}

@Operation(summary = "호스트 간편 생성. 호스트를 생성한 유저 자신은 마스터 호스트가 됩니다.")

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package band.gosrock.api.host.model.dto.response;


import band.gosrock.domain.common.vo.EventProfileVo;
import band.gosrock.domain.domains.event.domain.Event;
import band.gosrock.domain.domains.host.domain.Host;
import com.fasterxml.jackson.annotation.JsonUnwrapped;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class HostEventProfileResponse {
private Long hostId;

private String hostName;

@JsonUnwrapped private EventProfileVo eventProfileVo;

public static HostEventProfileResponse of(Host host, Event event) {
return HostEventProfileResponse.builder()
.hostId(host.getId())
.hostName(host.getProfile().getName())
.eventProfileVo(event.toEventProfileVo())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package band.gosrock.api.host.service;


import band.gosrock.api.common.page.PageResponse;
import band.gosrock.api.host.model.dto.response.HostEventProfileResponse;
import band.gosrock.common.annotation.UseCase;
import band.gosrock.domain.domains.event.adaptor.EventAdaptor;
import band.gosrock.domain.domains.host.adaptor.HostAdaptor;
import band.gosrock.domain.domains.host.domain.Host;
import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Pageable;
import org.springframework.transaction.annotation.Transactional;

@UseCase
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ReadHostEventsUseCase {
private final HostAdaptor hostAdaptor;
private final EventAdaptor eventAdaptor;

public PageResponse<HostEventProfileResponse> execute(Long hostId, Pageable pageable) {
Host host = hostAdaptor.findById(hostId);
return PageResponse.of(
eventAdaptor
.findAllByHostId(hostId, pageable)
.map(event -> HostEventProfileResponse.of(host, event)));
}
}
Original file line number Diff line number Diff line change
@@ -14,7 +14,7 @@
@UseCase
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ReadHostProfileListUseCase {
public class ReadHostProfilesUseCase {
private final UserUtils userUtils;
private final HostAdaptor hostAdaptor;

Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
@UseCase
@RequiredArgsConstructor
@Transactional(readOnly = true)
public class ReadInviteUserListUseCase {
public class ReadInviteUsersUseCase {
private final UserUtils userUtils;
private final HostMapper hostMapper;

Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package band.gosrock.domain.common.vo;


import band.gosrock.domain.domains.event.domain.*;
import band.gosrock.domain.domains.event.domain.Event;
import band.gosrock.domain.domains.event.domain.EventStatus;
import java.time.LocalDateTime;
import lombok.Builder;
import lombok.Getter;
Original file line number Diff line number Diff line change
@@ -26,6 +26,10 @@ public Page<Event> findAllByHostId(Long hostId, Pageable pageable) {
return eventRepository.findAllByHostId(hostId, pageable);
}

public Page<Event> findAllByHostIdIn(List<Long> hostId, Pageable pageable) {
return eventRepository.findAllByHostIdIn(hostId, pageable);
}

public List<Event> findAllByIds(List<Long> ids) {
return eventRepository.findAllByIdIn(ids);
}
Original file line number Diff line number Diff line change
@@ -13,4 +13,6 @@ public interface EventRepository extends CrudRepository<Event, Long> {
Page<Event> findAllByHostId(Long hostId, Pageable pageable);

List<Event> findAllByIdIn(List<Long> ids);

Page<Event> findAllByHostIdIn(List<Long> hostIds, Pageable pageable);
}
Original file line number Diff line number Diff line change
@@ -28,4 +28,8 @@ public List<Host> findAllByMasterUserId(Long userId) {
public Page<Host> findAllByHostUsers_UserId(Long userId, Pageable pageable) {
return hostRepository.findAllByHostUsers_UserId(userId, pageable);
}

public List<Host> findAllByHostUsers_UserId(Long userId) {
return hostRepository.findAllByHostUsers_UserId(userId);
}
}
Original file line number Diff line number Diff line change
@@ -10,5 +10,7 @@
public interface HostRepository extends CrudRepository<Host, Long> {
List<Host> findAllByMasterUserId(Long userId);

List<Host> findAllByHostUsers_UserId(Long userId);

Page<Host> findAllByHostUsers_UserId(Long userId, Pageable pageable);
}