Skip to content

Commit

Permalink
Merge pull request #34 from MUIT-UMC/develop
Browse files Browse the repository at this point in the history
[merge] 250128 / 3rd deploy
  • Loading branch information
chaechaen authored Jan 27, 2025
2 parents 59687bb + 84f2646 commit 1e284cc
Show file tree
Hide file tree
Showing 27 changed files with 897 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ public enum ErrorStatus implements BaseErrorCode {

//JOIN ERROR
JOIN_FORMAT_ERROR(HttpStatus.BAD_REQUEST, "JOIN4000", "아이디와 비밀번호는 필수 입력 값입니다."),
USER_ALREADY_EXIST(HttpStatus.BAD_REQUEST, "JOIN4001", "이미 존재하는 아이디입니다");
USER_ALREADY_EXIST(HttpStatus.BAD_REQUEST, "JOIN4001", "이미 존재하는 아이디입니다"),

// AMATEURSHOW ERROR
AMATEURSHOW_NOT_FOUND(HttpStatus.NOT_FOUND, "AMATEURSHOW4000", "존재하지 않는 소극장 공연입니다.");

private final HttpStatus httpStatus;
private final String code;
Expand Down
19 changes: 19 additions & 0 deletions src/main/java/muit/backend/config/WebConfig.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package muit.backend.config;


import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:5173")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD", "PATCH")
.allowedHeaders("*")
.allowCredentials(true)
.maxAge(3600);
}
}
49 changes: 49 additions & 0 deletions src/main/java/muit/backend/controller/AmateurTicketController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package muit.backend.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import muit.backend.apiPayLoad.ApiResponse;
import muit.backend.converter.AmateurTicketConverter;
import muit.backend.dto.amateurTicketDTO.AmateurTicketRequestDTO;
import muit.backend.dto.amateurTicketDTO.AmateurTicketResponseDTO;
import muit.backend.service.AmateurTicketService;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

import java.util.Set;

@Tag(name = "어드민이 소극장 티켓 관리")
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/amateur-tickets")
public class AmateurTicketController {

private final AmateurTicketService amateurTicketService;

@Operation(summary = "전체 소극장 티켓 조회")
@GetMapping
public ApiResponse<Page<AmateurTicketResponseDTO.AmateurTicketResultListDTO>> getAllTickets(@ParameterObject Pageable pageable,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) Set<String> selectedFields) {
Page<AmateurTicketResponseDTO.AmateurTicketResultListDTO> tickets = amateurTicketService.getAllTickets(pageable, keyword, selectedFields);
return ApiResponse.onSuccess(tickets);
}

@Operation(summary = "특정 소극장 티켓 조회")
@GetMapping("/{amateurShowId}")
public ApiResponse<AmateurTicketResponseDTO.AmateurTicketResultDTO> getTicket(@PathVariable("amateurShowId") Long amateurShowId) {
AmateurTicketResponseDTO.AmateurTicketResultDTO ticket = amateurTicketService.getTicket(amateurShowId);
return ApiResponse.onSuccess(ticket);
}

@Operation(summary = "특정 소극장 티켓 정보 수정")
@PatchMapping("/{amateurShowId}/update")
public ApiResponse<AmateurTicketResponseDTO.AmateurTicketResultDTO> updateTicket(@PathVariable("amateurShowId") Long amateurShowId,
@RequestBody AmateurTicketRequestDTO.AmateurTicketUpdateDTO requestDTO) {
AmateurTicketResponseDTO.AmateurTicketResultDTO ticket = amateurTicketService.updateTicket(amateurShowId, requestDTO);
return ApiResponse.onSuccess(ticket);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package muit.backend.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import muit.backend.apiPayLoad.ApiResponse;
import muit.backend.domain.enums.AmateurStatus;
import muit.backend.dto.manageAmateurShowDTO.ManageAmateurShowRequestDTO;
import muit.backend.dto.manageAmateurShowDTO.ManageAmateurShowResponseDTO;
import muit.backend.service.ManageAmateurShowService;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;

import java.util.Set;

@Tag(name = "어드민이 소극장 공연 관리")
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/amateur-shows")
public class ManageAmateurShowController {

private final ManageAmateurShowService manageAmateurShowService;

@Operation(summary = "전체 소극장 공연 조회")
@GetMapping
public ApiResponse<Page<ManageAmateurShowResponseDTO.ManageAmateurShowResultListDTO>> getAllAmateurShows(@ParameterObject Pageable pageable,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) Set<String> selectedFields) {
Page<ManageAmateurShowResponseDTO.ManageAmateurShowResultListDTO> amateurShows = manageAmateurShowService.getAllAmateurShows(pageable, keyword, selectedFields);
return ApiResponse.onSuccess(amateurShows);
}

@Operation(summary = "특정 소극장 공연 상세 조회")
@GetMapping("/{amateurShowId}")
public ApiResponse<ManageAmateurShowResponseDTO.ManageAmateurShowResultDTO> getAmateurShow(@PathVariable("amateurShowId") Long amateurShowId) {
ManageAmateurShowResponseDTO.ManageAmateurShowResultDTO amateurShow = manageAmateurShowService.getAmateurShow(amateurShowId);
return ApiResponse.onSuccess(amateurShow);
}


@Operation(summary = "특정 소극장 공연 정보 수정")
@PatchMapping("/{amateurShowId}/update")
public ApiResponse<ManageAmateurShowResponseDTO.ManageAmateurShowResultDTO> updateAmateurShow(@PathVariable("amateurShowId") Long amateurShowId, @RequestBody ManageAmateurShowRequestDTO.ManageAmateurShowUpdateDTO requestDTO) {
ManageAmateurShowResponseDTO.ManageAmateurShowResultDTO amateurShow = manageAmateurShowService.updateAmateurShow(amateurShowId, requestDTO);
return ApiResponse.onSuccess(amateurShow);
}

@Operation(summary = "소극장 공연 최종 등록/반려")
@PatchMapping("/{amateurShowId}/decision")
public ApiResponse<ManageAmateurShowResponseDTO.ManageAmateurShowDecideDTO> decideAmateurShow(@PathVariable("amateurShowId") Long amateurShowId, @RequestParam AmateurStatus amateurStatus, @RequestBody ManageAmateurShowRequestDTO.ManageAmateurShowDecideDTO requestDTO) {
ManageAmateurShowResponseDTO.ManageAmateurShowDecideDTO amateurShow = manageAmateurShowService.decideAmateurShow(amateurShowId, amateurStatus, requestDTO);
return ApiResponse.onSuccess(amateurShow);
}

}

36 changes: 36 additions & 0 deletions src/main/java/muit/backend/controller/ManageReservController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package muit.backend.controller;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import muit.backend.apiPayLoad.ApiResponse;
import muit.backend.dto.manageReservDTO.ManageReservResponseDTO;
import muit.backend.service.ManageReservService;
import org.springdoc.core.annotations.ParameterObject;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Set;

@Tag(name = "어드민이 공연 예약 관리")
@RestController
@RequiredArgsConstructor
@RequestMapping("/admin/amateur-reservations")
public class ManageReservController {

private final ManageReservService manageReservService;

@Operation(summary = "전체 공연 예약 조회")
@GetMapping
public ApiResponse<Page<ManageReservResponseDTO.ManageReservResultListDTO>> getAllReservations(@ParameterObject Pageable pageable,
@RequestParam(required = false) String keyword,
@RequestParam(required = false) Set<String> selectedFields) {
Page<ManageReservResponseDTO.ManageReservResultListDTO> reservations = manageReservService.getAllReservations(pageable, keyword, selectedFields);
return ApiResponse.onSuccess(reservations);
}

}
42 changes: 42 additions & 0 deletions src/main/java/muit/backend/converter/AmateurTicketConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package muit.backend.converter;

import muit.backend.domain.entity.amateur.AmateurShow;
import muit.backend.dto.amateurTicketDTO.AmateurTicketResponseDTO;

import java.util.Set;

public class AmateurTicketConverter {

public static AmateurTicketResponseDTO.AmateurTicketResultListDTO toAmateurTicketResultListDTO(AmateurShow amateurShow, Set<String> selectedFields, boolean isKeywordSearch) {

// 키워드 검색이거나 전체 조회인 경우 모든 필드 포함
if (isKeywordSearch || selectedFields == null || selectedFields.isEmpty()) {
return AmateurTicketResponseDTO.AmateurTicketResultListDTO.builder()
.amateurShowId(amateurShow.getId())
.name(amateurShow.getName())
.schedule(amateurShow.getSchedule())
.soldTicket(amateurShow.getSoldTicket())
.totalTicket(amateurShow.getTotalTicket())
.build();
}

// selectedFields로 특정 필드만 선택한 경우
return AmateurTicketResponseDTO.AmateurTicketResultListDTO.builder()
.amateurShowId(amateurShow.getId()) // ID는 항상 포함
.name(selectedFields.contains("name") ? amateurShow.getName() : null)
.schedule(selectedFields.contains("schedule") ? amateurShow.getSchedule() : null)
.soldTicket(selectedFields.contains("reservationStatus") ? amateurShow.getSoldTicket() : null)
.totalTicket(selectedFields.contains("reservationStatus") ? amateurShow.getTotalTicket() : null)
.build();
}

public static AmateurTicketResponseDTO.AmateurTicketResultDTO toAmateurTicketResultDTO(AmateurShow amateurShow) {
return AmateurTicketResponseDTO.AmateurTicketResultDTO.builder()
.amateurShowId(amateurShow.getId())
.name(amateurShow.getName())
.schedule(amateurShow.getSchedule())
.soldTicket(amateurShow.getSoldTicket())
.totalTicket(amateurShow.getTotalTicket())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package muit.backend.converter;

import muit.backend.domain.entity.amateur.AmateurShow;
import muit.backend.domain.entity.member.Member;
import muit.backend.domain.enums.AmateurStatus;
import muit.backend.dto.manageAmateurShowDTO.ManageAmateurShowRequestDTO;
import muit.backend.dto.manageAmateurShowDTO.ManageAmateurShowResponseDTO;
import muit.backend.dto.manageMemberDTO.ManageMemberResponseDTO;

import java.util.Set;

public class ManageAmateurShowConverter {

public static ManageAmateurShowResponseDTO.ManageAmateurShowResultListDTO toManageAmateurShowResultListDTO(AmateurShow amateurShow, Set<String> selectedFields, boolean isKeywordSearch) {

// 키워드 검색이거나 전체 조회인 경우 모든 필드 포함
if (isKeywordSearch || selectedFields == null || selectedFields.isEmpty()) {
return ManageAmateurShowResponseDTO.ManageAmateurShowResultListDTO.builder()
.amateurShowId(amateurShow.getId())
.amateurShowName(amateurShow.getName())
.schedule(amateurShow.getSchedule())
.memberName(amateurShow.getMember().getName())
.amateurStatus(amateurShow.getAmateurStatus())
.build();
}

// selectedFields로 특정 필드만 선택한 경우
return ManageAmateurShowResponseDTO.ManageAmateurShowResultListDTO.builder()
.amateurShowId(amateurShow.getId()) // ID는 항상 포함
.amateurShowName(selectedFields.contains("amateurShowName") ? amateurShow.getName() : null)
.schedule(selectedFields.contains("schedule") ? amateurShow.getSchedule() : null)
.memberName(selectedFields.contains("memberName") ? amateurShow.getMember().getName() : null)
.build();
}

public static ManageAmateurShowResponseDTO.ManageAmateurShowResultDTO toManageAmateurShowResultDTO(AmateurShow amateurShow) {
return ManageAmateurShowResponseDTO.ManageAmateurShowResultDTO.builder()
.amateurShowId(amateurShow.getId())
.amateurShowName(amateurShow.getName())
.memberName(amateurShow.getMember().getName())
.username(amateurShow.getMember().getUsername())
.schedule(amateurShow.getSchedule())
.hashtag(amateurShow.getHashtag())
.content(amateurShow.getAmateurSummary().getContent())
.account(amateurShow.getAccount())
.contact(amateurShow.getContact())
.amateurStatus(amateurShow.getAmateurStatus())
.build();
}

public static ManageAmateurShowResponseDTO.ManageAmateurShowDecideDTO toManageAmateurShowDecideDTO(AmateurShow amateurShow) {
return ManageAmateurShowResponseDTO.ManageAmateurShowDecideDTO.builder()
.amateurShowId(amateurShow.getId())
.amateurShowName(amateurShow.getName())
.memberName(amateurShow.getMember().getName())
.username(amateurShow.getMember().getUsername())
.amateurStatus(amateurShow.getAmateurStatus())
.rejectReason(amateurShow.getRejectReason())
.build();
}
}
53 changes: 53 additions & 0 deletions src/main/java/muit/backend/converter/ManageReservConverter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package muit.backend.converter;

import muit.backend.domain.entity.amateur.AmateurShow;
import muit.backend.domain.entity.member.MemberTicket;
import muit.backend.domain.entity.member.Reservation;
import muit.backend.dto.manageReservDTO.ManageReservResponseDTO;

import java.util.Set;

public class ManageReservConverter {

// reservation에서 amateurshow 가져오기
private static AmateurShow getAmateurShowFromReservation(Reservation reservation) {
return reservation.getMemberTicketList().stream()
.findFirst() // 아무 티켓이나 봐도 같은 공연이니 첫 번째 것 사용
.map(memberTicket -> memberTicket.getAmateurTicket().getAmateurShow())
.orElse(null);
}

public static ManageReservResponseDTO.ManageReservResultListDTO toManageReservResultListDTO(Reservation reservation, Set<String> selectedFields, boolean isKeywordSearch) {

// 키워드 검색이거나 전체 조회인 경우 모든 필드 포함
if (isKeywordSearch || selectedFields == null || selectedFields.isEmpty()) {
AmateurShow amateurShow = getAmateurShowFromReservation(reservation);

return ManageReservResponseDTO.ManageReservResultListDTO.builder()
.reservationId(reservation.getId())
.memberName(reservation.getMember().getName())
.amateurShowName(amateurShow.getName())
.schedule(amateurShow.getSchedule())
.place(amateurShow.getPlace())
.quantity(reservation.getMemberTicketList().stream()
.findFirst()
.map(MemberTicket::getQuantity)
.orElse(null))
.reservationStatus(reservation.getStatus())
.build();
}

// selectedFields로 특정 필드만 선택한 경우
AmateurShow amateurShow = getAmateurShowFromReservation(reservation);
return ManageReservResponseDTO.ManageReservResultListDTO.builder()
.reservationId(reservation.getId()) // ID는 항상 포함
.amateurShowName(selectedFields.contains("amateurShowName") ?
(amateurShow != null ? amateurShow.getName() : null) : null)
.schedule(selectedFields.contains("schedule") ?
(amateurShow != null ? amateurShow.getSchedule() : null) : null)
.reservationStatus(selectedFields.contains("reservationStatus") ?
reservation.getStatus() : null)
.build();
}

}
Loading

0 comments on commit 1e284cc

Please sign in to comment.