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] #241 - Swagger 문서화 작업 #242

Merged
merged 16 commits into from
Oct 10, 2024
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
Show all changes
16 commits
Select commit Hold shift + click to select a range
b8e0815
[#241] refactor(BookingApi): booking swagger 문서화
hyerinhwang-sailin Oct 8, 2024
f0a22fe
[#241] refactor(BookingController): booking swagger 문서화
hyerinhwang-sailin Oct 8, 2024
e112c5e
[#241] refactor(MemberApi): member swagger 문서화
hyerinhwang-sailin Oct 8, 2024
0654218
[#241] refactor(MemberController): member swagger 문서화
hyerinhwang-sailin Oct 8, 2024
236f782
[#241] refactor(PerformanceApi): performance swagger 문서화
hyerinhwang-sailin Oct 8, 2024
5b0b382
[#241] refactor(PerformanceController): performance swagger 문서화
hyerinhwang-sailin Oct 8, 2024
8beb1b0
[#241] refactor(ScheduleApi): schedule swagger 문서화
hyerinhwang-sailin Oct 8, 2024
c964c35
[#241] refactor(ScheduleController): schedule swagger 문서화
hyerinhwang-sailin Oct 8, 2024
238c5a0
[#241] refactor(TicketApi): ticket swagger 문서화
hyerinhwang-sailin Oct 8, 2024
c7b836a
[#241] refactor(TicketController): ticket swagger 문서화
hyerinhwang-sailin Oct 8, 2024
555c57d
[#241] refactor(BookingApi): booking swagger 문서화 수정
hyerinhwang-sailin Oct 10, 2024
ea6445d
[#241] refactor(MemberApi): member swagger 문서화 수정
hyerinhwang-sailin Oct 10, 2024
4d9143d
[#241] refactor(PerformanceApi): performance swagger 문서화 수정
hyerinhwang-sailin Oct 10, 2024
5ec452f
[#241] refactor(ScheduleApi): schedule swagger 문서화 수정
hyerinhwang-sailin Oct 10, 2024
1ae594d
[#241] refactor(TicketApi): ticket swagger 문서화 수정
hyerinhwang-sailin Oct 10, 2024
fbfdeff
[#241] chore(MemberController): 코드 컨벤션 반영
hyerinhwang-sailin Oct 10, 2024
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
60 changes: 60 additions & 0 deletions src/main/java/com/beat/domain/booking/api/BookingApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.beat.domain.booking.api;

import java.util.List;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestBody;

import com.beat.domain.booking.application.dto.GuestBookingRequest;
import com.beat.domain.booking.application.dto.GuestBookingResponse;
import com.beat.domain.booking.application.dto.GuestBookingRetrieveRequest;
import com.beat.domain.booking.application.dto.GuestBookingRetrieveResponse;
import com.beat.domain.booking.application.dto.MemberBookingRequest;
import com.beat.domain.booking.application.dto.MemberBookingResponse;
import com.beat.domain.booking.application.dto.MemberBookingRetrieveResponse;
import com.beat.global.auth.annotation.CurrentMember;
import com.beat.global.common.dto.SuccessResponse;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Booking", description = "예매 관련 API")
public interface BookingApi {

@Operation(summary = "회원 예매 API", description = "회원이 예매를 요청하는 POST API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "201", description = "회원 예매가 성공적으로 완료되었습니다.",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<MemberBookingResponse>> createMemberBooking(
@CurrentMember Long memberId,
@RequestBody MemberBookingRequest memberBookingRequest);

@Operation(summary = "회원 예매 조회 API", description = "회원이 예매를 조회하는 GET API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "회원 예매 조회가 성공적으로 완료되었습니다.",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<List<MemberBookingRetrieveResponse>>> getMemberBookings(
@CurrentMember Long memberId);

@Operation(summary = "비회원 예매 API", description = "비회원이 예매를 요청하는 POST API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "201", description = "비회원 예매가 성공적으로 완료되었습니다.",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<GuestBookingResponse>> createGuestBookings(
@RequestBody GuestBookingRequest guestBookingRequest);

@Operation(summary = "비회원 예매 조회 API", description = "비회원이 예매를 조회하는 POST API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "비회원 예매 조회가 성공적으로 완료되었습니다.",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<List<GuestBookingRetrieveResponse>>> getGuestBookings(
@RequestBody GuestBookingRetrieveRequest guestBookingRetrieveRequest);
}
102 changes: 52 additions & 50 deletions src/main/java/com/beat/domain/booking/api/BookingController.java
Original file line number Diff line number Diff line change
@@ -1,74 +1,76 @@
package com.beat.domain.booking.api;

import java.util.List;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
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;

import com.beat.domain.booking.application.GuestBookingRetrieveService;
import com.beat.domain.booking.application.GuestBookingService;
import com.beat.domain.booking.application.MemberBookingRetrieveService;
import com.beat.domain.booking.application.MemberBookingService;
import com.beat.domain.booking.application.dto.GuestBookingRetrieveRequest;
import com.beat.domain.booking.application.dto.GuestBookingRetrieveResponse;
import com.beat.domain.booking.application.dto.GuestBookingRequest;
import com.beat.domain.booking.application.dto.GuestBookingResponse;
import com.beat.domain.booking.application.dto.GuestBookingRetrieveRequest;
import com.beat.domain.booking.application.dto.GuestBookingRetrieveResponse;
import com.beat.domain.booking.application.dto.MemberBookingRequest;
import com.beat.domain.booking.application.dto.MemberBookingResponse;
import com.beat.domain.booking.application.dto.MemberBookingRetrieveResponse;
import com.beat.domain.booking.exception.BookingSuccessCode;
import com.beat.global.auth.annotation.CurrentMember;
import com.beat.global.common.dto.SuccessResponse;
import io.swagger.v3.oas.annotations.Operation;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
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;

import java.util.List;
import lombok.RequiredArgsConstructor;

@RestController
@RequestMapping("/api/bookings")
@RequiredArgsConstructor
public class BookingController {
private final MemberBookingService memberBookingService;
private final MemberBookingRetrieveService memberBookingRetrieveService;
private final GuestBookingService guestBookingService;
private final GuestBookingRetrieveService guestBookingRetrieveService;
public class BookingController implements BookingApi {
private final MemberBookingService memberBookingService;
private final MemberBookingRetrieveService memberBookingRetrieveService;
private final GuestBookingService guestBookingService;
private final GuestBookingRetrieveService guestBookingRetrieveService;

@Operation(summary = "회원 예매 API", description = "회원이 예매를 요청하는 POST API입니다.")
@PostMapping("/member")
public ResponseEntity<SuccessResponse<MemberBookingResponse>> createMemberBooking(
@CurrentMember Long memberId,
@RequestBody MemberBookingRequest memberBookingRequest) {
MemberBookingResponse response = memberBookingService.createMemberBooking(memberId, memberBookingRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(BookingSuccessCode.MEMBER_BOOKING_SUCCESS, response));
}
@Override
@PostMapping("/member")
public ResponseEntity<SuccessResponse<MemberBookingResponse>> createMemberBooking(
@CurrentMember Long memberId,
@RequestBody MemberBookingRequest memberBookingRequest) {
MemberBookingResponse response = memberBookingService.createMemberBooking(memberId, memberBookingRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(BookingSuccessCode.MEMBER_BOOKING_SUCCESS, response));
}

@Operation(summary = "회원 예매 조회 API", description = "회원이 예매를 조회하는 GET API입니다.")
@GetMapping("/member/retrieve")
public ResponseEntity<SuccessResponse<List<MemberBookingRetrieveResponse>>> getMemberBookings(
@CurrentMember Long memberId) {
List<MemberBookingRetrieveResponse> response = memberBookingRetrieveService.findMemberBookings(memberId);
return ResponseEntity.status(HttpStatus.OK)
.body(SuccessResponse.of(BookingSuccessCode.MEMBER_BOOKING_RETRIEVE_SUCCESS, response));
}
@Override
@GetMapping("/member/retrieve")
public ResponseEntity<SuccessResponse<List<MemberBookingRetrieveResponse>>> getMemberBookings(
@CurrentMember Long memberId) {
List<MemberBookingRetrieveResponse> response = memberBookingRetrieveService.findMemberBookings(memberId);
return ResponseEntity.status(HttpStatus.OK)
.body(SuccessResponse.of(BookingSuccessCode.MEMBER_BOOKING_RETRIEVE_SUCCESS, response));
}

@Operation(summary = "비회원 예매 API", description = "비회원이 예매를 요청하는 POST API입니다.")
@PostMapping("/guest")
public ResponseEntity<SuccessResponse<GuestBookingResponse>> createGuestBookings(
@RequestBody GuestBookingRequest guestBookingRequest) {
GuestBookingResponse response = guestBookingService.createGuestBooking(guestBookingRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(BookingSuccessCode.GUEST_BOOKING_SUCCESS, response));
}
@Override
@PostMapping("/guest")
public ResponseEntity<SuccessResponse<GuestBookingResponse>> createGuestBookings(
@RequestBody GuestBookingRequest guestBookingRequest) {
GuestBookingResponse response = guestBookingService.createGuestBooking(guestBookingRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(BookingSuccessCode.GUEST_BOOKING_SUCCESS, response));
}

@Operation(summary = "비회원 예매 조회 API", description = "비회원이 예매를 조회하는 POST API입니다.")
@PostMapping("/guest/retrieve")
public ResponseEntity<SuccessResponse<List<GuestBookingRetrieveResponse>>> getGuestBookings(
@RequestBody GuestBookingRetrieveRequest guestBookingRetrieveRequest) {
List<GuestBookingRetrieveResponse> response = guestBookingRetrieveService.findGuestBookings(guestBookingRetrieveRequest);
return ResponseEntity.status(HttpStatus.OK)
.body(SuccessResponse.of(BookingSuccessCode.GUEST_BOOKING_RETRIEVE_SUCCESS, response));
}
@Override
@PostMapping("/guest/retrieve")
public ResponseEntity<SuccessResponse<List<GuestBookingRetrieveResponse>>> getGuestBookings(
@RequestBody GuestBookingRetrieveRequest guestBookingRetrieveRequest) {
List<GuestBookingRetrieveResponse> response = guestBookingRetrieveService.findGuestBookings(
guestBookingRetrieveRequest);
return ResponseEntity.status(HttpStatus.OK)
.body(SuccessResponse.of(BookingSuccessCode.GUEST_BOOKING_RETRIEVE_SUCCESS, response));
}
}
54 changes: 54 additions & 0 deletions src/main/java/com/beat/domain/booking/api/TicketApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.beat.domain.booking.api;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import com.beat.domain.booking.application.dto.TicketCancelRequest;
import com.beat.domain.booking.application.dto.TicketRetrieveResponse;
import com.beat.domain.booking.application.dto.TicketUpdateRequest;
import com.beat.domain.booking.domain.BookingStatus;
import com.beat.domain.schedule.domain.ScheduleNumber;
import com.beat.global.auth.annotation.CurrentMember;
import com.beat.global.common.dto.SuccessResponse;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;

@Tag(name = "Ticket", description = "티켓 관련 API")
public interface TicketApi {

@Operation(summary = "예매자 목록 조회 API", description = "메이커가 자신의 공연에 대한 예매자 목록을 조회하는 GET API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "예매자 목록 조회 성공",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<TicketRetrieveResponse>> getTickets(
@CurrentMember Long memberId,
@PathVariable Long performanceId,
@RequestParam(required = false) ScheduleNumber scheduleNumber,
@RequestParam(required = false) BookingStatus bookingStatus);

@Operation(summary = "예매자 입금여부 수정 및 웹발신 API", description = "메이커가 자신의 공연에 대한 예매자의 입금여부 정보를 수정한 뒤 예매확정 웹발신을 보내는 PUT API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "예매자 입금여부 수정 성공",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<Void>> updateTickets(
@CurrentMember Long memberId,
@RequestBody TicketUpdateRequest request);

@Operation(summary = "예매자 취소 API", description = "메이커가 자신의 공연에 대한 1명 이상의 예매자의 정보를 취소 상태로 변경하는 PATCH API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "예매자 취소 성공",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<Void>> cancelTickets(
@CurrentMember Long memberId,
@RequestBody TicketCancelRequest ticketCancelRequest);
}
81 changes: 45 additions & 36 deletions src/main/java/com/beat/domain/booking/api/TicketController.java
Original file line number Diff line number Diff line change
@@ -1,52 +1,61 @@
package com.beat.domain.booking.api;

import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.beat.domain.booking.application.TicketService;
import com.beat.domain.booking.application.dto.TicketCancelRequest;
import com.beat.domain.booking.application.dto.TicketRetrieveResponse;
import com.beat.domain.booking.application.dto.TicketUpdateRequest;
import com.beat.domain.booking.domain.BookingStatus;
import com.beat.domain.booking.exception.BookingSuccessCode;
import com.beat.domain.schedule.domain.ScheduleNumber;
import com.beat.global.auth.annotation.CurrentMember;
import com.beat.global.common.dto.SuccessResponse;
import com.beat.domain.schedule.domain.ScheduleNumber;
import io.swagger.v3.oas.annotations.Operation;

import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/api/tickets")
@RequiredArgsConstructor
public class TicketController {

private final TicketService ticketService;

@Operation(summary = "예매자 목록 조회 API", description = "메이커가 자신의 공연에 대한 예매자 목록을 조회하는 GET API입니다.")
@GetMapping("/{performanceId}")
public ResponseEntity<SuccessResponse<TicketRetrieveResponse>> getTickets(
@CurrentMember Long memberId,
@PathVariable Long performanceId,
@RequestParam(required = false) ScheduleNumber scheduleNumber,
@RequestParam(required = false) BookingStatus bookingStatus) {
TicketRetrieveResponse response = ticketService.getTickets(memberId, performanceId, scheduleNumber, bookingStatus);
return ResponseEntity.ok(SuccessResponse.of(BookingSuccessCode.TICKET_RETRIEVE_SUCCESS, response));
}

@Operation(summary = "예매자 입금여부 수정 및 웹발신 API", description = "메이커가 자신의 공연에 대한 예매자의 입금여부 정보를 수정한 뒤 예매확정 웹발신을 보내는 PUT API입니다.")
@PutMapping
public ResponseEntity<SuccessResponse<Void>> updateTickets(
@CurrentMember Long memberId,
@RequestBody TicketUpdateRequest request) {
ticketService.updateTickets(memberId, request);
return ResponseEntity.ok(SuccessResponse.from(BookingSuccessCode.TICKET_UPDATE_SUCCESS));
}

@Operation(summary = "예매자 취소 API", description = "메이커가 자신의 공연에 대한 1명 이상의 예매자의 정보를 취소 상태로 변경하는 PATCH API입니다.")
@PatchMapping
public ResponseEntity<SuccessResponse<Void>> cancelTickets(
@CurrentMember Long memberId,
@RequestBody TicketCancelRequest ticketCancelRequest) {
ticketService.cancelTickets(memberId, ticketCancelRequest);
return ResponseEntity.ok(SuccessResponse.from(BookingSuccessCode.TICKET_CANCEL_SUCCESS));
}
public class TicketController implements TicketApi {

private final TicketService ticketService;

@Override
@GetMapping("/{performanceId}")
public ResponseEntity<SuccessResponse<TicketRetrieveResponse>> getTickets(
@CurrentMember Long memberId,
@PathVariable Long performanceId,
@RequestParam(required = false) ScheduleNumber scheduleNumber,
@RequestParam(required = false) BookingStatus bookingStatus) {
TicketRetrieveResponse response = ticketService.getTickets(memberId, performanceId, scheduleNumber,
bookingStatus);
return ResponseEntity.ok(SuccessResponse.of(BookingSuccessCode.TICKET_RETRIEVE_SUCCESS, response));
}

@Override
@PutMapping
public ResponseEntity<SuccessResponse<Void>> updateTickets(
@CurrentMember Long memberId,
@RequestBody TicketUpdateRequest request) {
ticketService.updateTickets(memberId, request);
return ResponseEntity.ok(SuccessResponse.from(BookingSuccessCode.TICKET_UPDATE_SUCCESS));
}

@Override
@PatchMapping
public ResponseEntity<SuccessResponse<Void>> cancelTickets(
@CurrentMember Long memberId,
@RequestBody TicketCancelRequest ticketCancelRequest) {
ticketService.cancelTickets(memberId, ticketCancelRequest);
return ResponseEntity.ok(SuccessResponse.from(BookingSuccessCode.TICKET_CANCEL_SUCCESS));
}
}
47 changes: 47 additions & 0 deletions src/main/java/com/beat/domain/member/api/MemberApi.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.beat.domain.member.api;

import java.security.Principal;

import org.springframework.http.ResponseEntity;

import com.beat.domain.member.dto.AccessTokenGetSuccess;
import com.beat.domain.member.dto.LoginSuccessResponse;
import com.beat.global.auth.client.dto.MemberLoginRequest;
import com.beat.global.common.dto.SuccessResponse;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;

@Tag(name = "Member", description = "회원 관련 API")
public interface MemberApi {

@Operation(summary = "로그인/회원가입 API", description = "로그인/회원가입하는 POST API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "로그인 또는 회원가입 성공",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<LoginSuccessResponse>> signUp(
String authorizationCode,
MemberLoginRequest loginRequest,
HttpServletResponse response);

@Operation(summary = "access token 재발급 API", description = "refresh token으로 access token을 재발급하는 GET API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "access token 재발급 성공",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<AccessTokenGetSuccess>> refreshToken(
String refreshToken);

@Operation(summary = "로그아웃 API", description = "로그아웃하는 POST API입니다.")
@ApiResponses({
@ApiResponse(responseCode = "200", description = "로그아웃 성공",
content = @Content(schema = @Schema(implementation = SuccessResponse.class)))
})
ResponseEntity<SuccessResponse<Void>> signOut(Principal principal);
}
Loading
Loading