Skip to content

Commit

Permalink
[deploy] merge to main (#109)
Browse files Browse the repository at this point in the history
* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

* [#2] chore(.gitignore): .gradle, .idea 파일 삭제 (#3)

* [refactor] #4 - 도메인형 디렉터리 구조 변경 및 local, dev, prod 운영 환경 분리 (#5)

* [#4] fix: 클래스 첫글자 대문자로 수정

* [#4] remove: enum 삭제

* [#4] feat(BaseSuccessCode): 성공 상태 관리를 위한 인터페이스 생성

* [#4] feat(BaseErrorCode): 에러 상태 관리를 위한 인터페이스 생성

* [#4] refactor: global 패키지로 이동

* [#4] refactor: 서버 운영 환경 분리

* [feat] #6 - dev, prod Dockerfile 분리 및 github Action CI workflow 구현 (#7)

* [#6] feat(Dockerfile): prod용 도커 파일 구현

* [#6] feat(Dockerfile-dev): dev용 도커 파일 구현

* [#6] feat(dev-CI.yml): dev용 CI workflow 구현

* [#6] feat(prod-CI.yml): prod용 CI workflow 구현

* [#6] chore(.gitignore): gradle-wrapper.jar 파일은 레포지토리에 포함되도록 설정

* [#6] fix(gradle-wrapper.jar): .gitignore로 누락된 파일 추가

* [#6] chore(build.grade): plain jar 생성 방지

* [#9] docs(README.md): 서비스 소개 README v1 작성 (#10)

* [#11] docs(README.md): 리드미 업데이트 (#12)

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [feat] #14 - 회원, 홍보, 등장인물, 스태프 엔티티 생성 (#16)

* [#14] feat(Member): 멤버 엔티티 생성

* [#14] feat(Promotion): 홍보 엔티티 생성

* [#14] feat(Cast): 등장인물 엔티티 생성

* [#14] feat(Staff): 스태프 엔티티 생성

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [#14} fix: 스태프, 등장인물, 홍보 엔티티 상속관계 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [#18] feat(Jenkinsfile): 젠킨스 파일 생성 (#19)

* [#20] refactor(Jenkinsfile): 젠킨스 파일 Webhook 테스트용 커밋 (#21)

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [feat] #63 - health check URL 화이트리스트에 등록 (#67)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [#63] feat(SecurityConfig): healthcheck url white_list에 등록

* [fix] #57 -  entity 연관관계 설정  SecurityConfig 수정 (#65)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [fix] #57 - security 관련 에러 대응 (#71)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [fix] #73 - security 수정 (#74)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경 (#77)

* [fix] #76 - 누락된 코드 추가 (#79)

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경

* [#76] chore(SecurityConfig): 누락된 import문 추가

* [#76] chore(JwtTokenProvider): 누락된 코드 추가

* [#81] fix(JwtTokenProvider): jwtsecret을 인코딩하고 디코딩을 하도록 수정 (#82)

* [#85] chore(application.yml): 환경변수 설정 (#86)

* [chore] #88 - 레디스 환경변수 추가 (#89)

* [#88] chore(dev-CI.yml): dev서버 레디스 환경변수 설정 추가

* [#88] chore(prod-CI.yml): prod 서버 레디스 환경변수 설정 추가

* [deploy] merge to main (#90)

* [deploy] merge to main (#83)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

* [#2] chore(.gitignore): .gradle, .idea 파일 삭제 (#3)

* [refactor] #4 - 도메인형 디렉터리 구조 변경 및 local, dev, prod 운영 환경 분리 (#5)

* [#4] fix: 클래스 첫글자 대문자로 수정

* [#4] remove: enum 삭제

* [#4] feat(BaseSuccessCode): 성공 상태 관리를 위한 인터페이스 생성

* [#4] feat(BaseErrorCode): 에러 상태 관리를 위한 인터페이스 생성

* [#4] refactor: global 패키지로 이동

* [#4] refactor: 서버 운영 환경 분리

* [feat] #6 - dev, prod Dockerfile 분리 및 github Action CI workflow 구현 (#7)

* [#6] feat(Dockerfile): prod용 도커 파일 구현

* [#6] feat(Dockerfile-dev): dev용 도커 파일 구현

* [#6] feat(dev-CI.yml): dev용 CI workflow 구현

* [#6] feat(prod-CI.yml): prod용 CI workflow 구현

* [#6] chore(.gitignore): gradle-wrapper.jar 파일은 레포지토리에 포함되도록 설정

* [#6] fix(gradle-wrapper.jar): .gitignore로 누락된 파일 추가

* [#6] chore(build.grade): plain jar 생성 방지

* [#9] docs(README.md): 서비스 소개 README v1 작성 (#10)

* [#11] docs(README.md): 리드미 업데이트 (#12)

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [feat] #14 - 회원, 홍보, 등장인물, 스태프 엔티티 생성 (#16)

* [#14] feat(Member): 멤버 엔티티 생성

* [#14] feat(Promotion): 홍보 엔티티 생성

* [#14] feat(Cast): 등장인물 엔티티 생성

* [#14] feat(Staff): 스태프 엔티티 생성

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [#14} fix: 스태프, 등장인물, 홍보 엔티티 상속관계 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [#18] feat(Jenkinsfile): 젠킨스 파일 생성 (#19)

* [#20] refactor(Jenkinsfile): 젠킨스 파일 Webhook 테스트용 커밋 (#21)

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [feat] #63 - health check URL 화이트리스트에 등록 (#67)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [#63] feat(SecurityConfig): healthcheck url white_list에 등록

* [fix] #57 -  entity 연관관계 설정  SecurityConfig 수정 (#65)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [fix] #57 - security 관련 에러 대응 (#71)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [fix] #73 - security 수정 (#74)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경 (#77)

* [fix] #76 - 누락된 코드 추가 (#79)

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경

* [#76] chore(SecurityConfig): 누락된 import문 추가

* [#76] chore(JwtTokenProvider): 누락된 코드 추가

* [#81] fix(JwtTokenProvider): jwtsecret을 인코딩하고 디코딩을 하도록 수정 (#82)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [deploy] merge to main (#87)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

* [#2] chore(.gitignore): .gradle, .idea 파일 삭제 (#3)

* [refactor] #4 - 도메인형 디렉터리 구조 변경 및 local, dev, prod 운영 환경 분리 (#5)

* [#4] fix: 클래스 첫글자 대문자로 수정

* [#4] remove: enum 삭제

* [#4] feat(BaseSuccessCode): 성공 상태 관리를 위한 인터페이스 생성

* [#4] feat(BaseErrorCode): 에러 상태 관리를 위한 인터페이스 생성

* [#4] refactor: global 패키지로 이동

* [#4] refactor: 서버 운영 환경 분리

* [feat] #6 - dev, prod Dockerfile 분리 및 github Action CI workflow 구현 (#7)

* [#6] feat(Dockerfile): prod용 도커 파일 구현

* [#6] feat(Dockerfile-dev): dev용 도커 파일 구현

* [#6] feat(dev-CI.yml): dev용 CI workflow 구현

* [#6] feat(prod-CI.yml): prod용 CI workflow 구현

* [#6] chore(.gitignore): gradle-wrapper.jar 파일은 레포지토리에 포함되도록 설정

* [#6] fix(gradle-wrapper.jar): .gitignore로 누락된 파일 추가

* [#6] chore(build.grade): plain jar 생성 방지

* [#9] docs(README.md): 서비스 소개 README v1 작성 (#10)

* [#11] docs(README.md): 리드미 업데이트 (#12)

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [feat] #14 - 회원, 홍보, 등장인물, 스태프 엔티티 생성 (#16)

* [#14] feat(Member): 멤버 엔티티 생성

* [#14] feat(Promotion): 홍보 엔티티 생성

* [#14] feat(Cast): 등장인물 엔티티 생성

* [#14] feat(Staff): 스태프 엔티티 생성

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [#14} fix: 스태프, 등장인물, 홍보 엔티티 상속관계 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [#18] feat(Jenkinsfile): 젠킨스 파일 생성 (#19)

* [#20] refactor(Jenkinsfile): 젠킨스 파일 Webhook 테스트용 커밋 (#21)

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [feat] #63 - health check URL 화이트리스트에 등록 (#67)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [#63] feat(SecurityConfig): healthcheck url white_list에 등록

* [fix] #57 -  entity 연관관계 설정  SecurityConfig 수정 (#65)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [fix] #57 - security 관련 에러 대응 (#71)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [fix] #73 - security 수정 (#74)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경 (#77)

* [fix] #76 - 누락된 코드 추가 (#79)

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경

* [#76] chore(SecurityConfig): 누락된 import문 추가

* [#76] chore(JwtTokenProvider): 누락된 코드 추가

* [#81] fix(JwtTokenProvider): jwtsecret을 인코딩하고 디코딩을 하도록 수정 (#82)

* [#85] chore(application.yml): 환경변수 설정 (#86)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* Revert "[deploy] merge to main (#90)" (#91)

This reverts commit f519b0c82a2f01d4374eb045b9e90c6303381e50.

* [fix] #93 - 누락된 어노테이션 및 누락된 경로명 추가 (#94)

* [#93] fix(HealthCheckController): 누락된 어노테이션 추가

* [#93] refactor(SecurityConfig): 누락된 경로명 추가

* [bug] #84 - actuator/health 의존성 및 설정 추가 (#96)

* [#84] chore(build.gradle): 의존성 추가

* [#84] chore: health/actuator yml 설정 추가

* [#84] chore: redis yml 설정 추가

* [#84] chore: yml 수정 (#99)

* [bug] #101 - yml, s3 수정 (#102)

* [#101] chore: yml 수정

* [#101] feat: s3 추가

* HOTIFX: prod ci-yml 수정

* Main redis host yml 수정 (#105)

* [deploy] merge to main (#104)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

* [#2] chore(.gitignore): .gradle, .idea 파일 삭제 (#3)

* [refactor] #4 - 도메인형 디렉터리 구조 변경 및 local, dev, prod 운영 환경 분리 (#5)

* [#4] fix: 클래스 첫글자 대문자로 수정

* [#4] remove: enum 삭제

* [#4] feat(BaseSuccessCode): 성공 상태 관리를 위한 인터페이스 생성

* [#4] feat(BaseErrorCode): 에러 상태 관리를 위한 인터페이스 생성

* [#4] refactor: global 패키지로 이동

* [#4] refactor: 서버 운영 환경 분리

* [feat] #6 - dev, prod Dockerfile 분리 및 github Action CI workflow 구현 (#7)

* [#6] feat(Dockerfile): prod용 도커 파일 구현

* [#6] feat(Dockerfile-dev): dev용 도커 파일 구현

* [#6] feat(dev-CI.yml): dev용 CI workflow 구현

* [#6] feat(prod-CI.yml): prod용 CI workflow 구현

* [#6] chore(.gitignore): gradle-wrapper.jar 파일은 레포지토리에 포함되도록 설정

* [#6] fix(gradle-wrapper.jar): .gitignore로 누락된 파일 추가

* [#6] chore(build.grade): plain jar 생성 방지

* [#9] docs(README.md): 서비스 소개 README v1 작성 (#10)

* [#11] docs(README.md): 리드미 업데이트 (#12)

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [feat] #14 - 회원, 홍보, 등장인물, 스태프 엔티티 생성 (#16)

* [#14] feat(Member): 멤버 엔티티 생성

* [#14] feat(Promotion): 홍보 엔티티 생성

* [#14] feat(Cast): 등장인물 엔티티 생성

* [#14] feat(Staff): 스태프 엔티티 생성

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [#14} fix: 스태프, 등장인물, 홍보 엔티티 상속관계 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [#18] feat(Jenkinsfile): 젠킨스 파일 생성 (#19)

* [#20] refactor(Jenkinsfile): 젠킨스 파일 Webhook 테스트용 커밋 (#21)

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [feat] #63 - health check URL 화이트리스트에 등록 (#67)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [#63] feat(SecurityConfig): healthcheck url white_list에 등록

* [fix] #57 -  entity 연관관계 설정  SecurityConfig 수정 (#65)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [fix] #57 - security 관련 에러 대응 (#71)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [fix] #73 - security 수정 (#74)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경 (#77)

* [fix] #76 - 누락된 코드 추가 (#79)

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경

* [#76] chore(SecurityConfig): 누락된 import문 추가

* [#76] chore(JwtTokenProvider): 누락된 코드 추가

* [#81] fix(JwtTokenProvider): jwtsecret을 인코딩하고 디코딩을 하도록 수정 (#82)

* [#85] chore(application.yml): 환경변수 설정 (#86)

* [chore] #88 - 레디스 환경변수 추가 (#89)

* [#88] chore(dev-CI.yml): dev서버 레디스 환경변수 설정 추가

* [#88] chore(prod-CI.yml): prod 서버 레디스 환경변수 설정 추가

* [deploy] merge to main (#90)

* [deploy] merge to main (#83)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

* [#2] chore(.gitignore): .gradle, .idea 파일 삭제 (#3)

* [refactor] #4 - 도메인형 디렉터리 구조 변경 및 local, dev, prod 운영 환경 분리 (#5)

* [#4] fix: 클래스 첫글자 대문자로 수정

* [#4] remove: enum 삭제

* [#4] feat(BaseSuccessCode): 성공 상태 관리를 위한 인터페이스 생성

* [#4] feat(BaseErrorCode): 에러 상태 관리를 위한 인터페이스 생성

* [#4] refactor: global 패키지로 이동

* [#4] refactor: 서버 운영 환경 분리

* [feat] #6 - dev, prod Dockerfile 분리 및 github Action CI workflow 구현 (#7)

* [#6] feat(Dockerfile): prod용 도커 파일 구현

* [#6] feat(Dockerfile-dev): dev용 도커 파일 구현

* [#6] feat(dev-CI.yml): dev용 CI workflow 구현

* [#6] feat(prod-CI.yml): prod용 CI workflow 구현

* [#6] chore(.gitignore): gradle-wrapper.jar 파일은 레포지토리에 포함되도록 설정

* [#6] fix(gradle-wrapper.jar): .gitignore로 누락된 파일 추가

* [#6] chore(build.grade): plain jar 생성 방지

* [#9] docs(README.md): 서비스 소개 README v1 작성 (#10)

* [#11] docs(README.md): 리드미 업데이트 (#12)

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [feat] #14 - 회원, 홍보, 등장인물, 스태프 엔티티 생성 (#16)

* [#14] feat(Member): 멤버 엔티티 생성

* [#14] feat(Promotion): 홍보 엔티티 생성

* [#14] feat(Cast): 등장인물 엔티티 생성

* [#14] feat(Staff): 스태프 엔티티 생성

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [#14} fix: 스태프, 등장인물, 홍보 엔티티 상속관계 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [#18] feat(Jenkinsfile): 젠킨스 파일 생성 (#19)

* [#20] refactor(Jenkinsfile): 젠킨스 파일 Webhook 테스트용 커밋 (#21)

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(Users…
  • Loading branch information
hoonyworld and hyerinhwang-sailin authored Jul 17, 2024
1 parent dca4ced commit 7bda8f2
Show file tree
Hide file tree
Showing 17 changed files with 383 additions and 6 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.beat.domain.performance.api;

import com.beat.domain.performance.application.PerformanceService;
import com.beat.domain.performance.application.dto.HomeRequest;
import com.beat.domain.performance.application.dto.HomeResponse;
import com.beat.domain.performance.application.dto.home.HomeRequest;
import com.beat.domain.performance.application.dto.home.HomeResponse;
import com.beat.domain.performance.domain.Genre;
import com.beat.domain.performance.exception.PerformanceSuccessCode;
import com.beat.global.common.dto.SuccessResponse;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,23 @@
package com.beat.domain.performance.api;

import com.beat.domain.performance.application.PerformanceCreateService;
import com.beat.domain.performance.application.dto.BookingPerformanceDetailResponse;
import com.beat.domain.performance.application.dto.MakerPerformanceResponse;
import com.beat.domain.performance.application.dto.PerformanceDetailResponse;
import com.beat.domain.performance.application.dto.create.PerformanceRequest;
import com.beat.domain.performance.application.dto.create.PerformanceResponse;
import com.beat.domain.performance.exception.PerformanceSuccessCode;
import com.beat.domain.performance.application.PerformanceService;
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.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 @@ -21,6 +27,17 @@
public class PerformanceController {

private final PerformanceService performanceService;
private final PerformanceCreateService performanceCreateService;

@Operation(summary = "공연 생성 API", description = "공연을 생성하는 POST API입니다.")
@PostMapping
public ResponseEntity<SuccessResponse<PerformanceResponse>> createPerformance(
@CurrentMember Long userId,
@RequestBody PerformanceRequest performanceRequest) {
PerformanceResponse response = performanceCreateService.createPerformance(userId, performanceRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_CREATE_SUCCESS, response));
}

@Operation(summary = "공연 상세정보 조회 API", description = "공연 상세페이지의 공연 상세정보를 조회하는 GET API입니다.")
@GetMapping("/detail/{performanceId}")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
package com.beat.domain.performance.application;

import com.beat.domain.cast.dao.CastRepository;
import com.beat.domain.cast.domain.Cast;
import com.beat.domain.performance.application.dto.create.CastResponse;
import com.beat.domain.performance.application.dto.create.PerformanceRequest;
import com.beat.domain.performance.application.dto.create.PerformanceResponse;
import com.beat.domain.performance.application.dto.create.ScheduleResponse;
import com.beat.domain.performance.application.dto.create.StaffResponse;
import com.beat.domain.performance.dao.PerformanceRepository;
import com.beat.domain.performance.domain.Performance;
import com.beat.domain.schedule.dao.ScheduleRepository;
import com.beat.domain.schedule.domain.Schedule;
import com.beat.domain.staff.dao.StaffRepository;
import com.beat.domain.staff.domain.Staff;
import com.beat.domain.user.dao.UserRepository;
import com.beat.domain.user.domain.Users;
import com.beat.domain.user.exception.UserErrorCode;
import com.beat.global.common.exception.NotFoundException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
public class PerformanceCreateService {

private final PerformanceRepository performanceRepository;
private final ScheduleRepository scheduleRepository;
private final UserRepository userRepository;
private final CastRepository castRepository;
private final StaffRepository staffRepository;

@Transactional
public PerformanceResponse createPerformance(Long userId, PerformanceRequest request) {
Users user = userRepository.findById(userId)
.orElseThrow(() -> new NotFoundException(UserErrorCode.USER_NOT_FOUND));

Performance performance = Performance.create(
request.performanceTitle(),
request.genre(),
request.runningTime(),
request.performanceDescription(),
request.performanceAttentionNote(),
request.bankName(),
request.accountNumber(),
request.accountHolder(),
request.posterImage(),
request.performanceTeamName(),
request.performanceVenue(),
request.performanceContact(),
request.performancePeriod(),
request.ticketPrice(),
request.totalScheduleCount(),
user
);
performanceRepository.save(performance);

List<Schedule> schedules = request.scheduleList().stream()
.map(scheduleRequest -> Schedule.create(
scheduleRequest.performanceDate(),
scheduleRequest.totalTicketCount(),
0,
true,
scheduleRequest.scheduleNumber(),
performance
))
.collect(Collectors.toList());
scheduleRepository.saveAll(schedules);

List<Cast> casts = request.castList().stream()
.map(castRequest -> Cast.create(
castRequest.castName(),
castRequest.castRole(),
castRequest.castPhoto(),
performance
))
.collect(Collectors.toList());
castRepository.saveAll(casts);

List<Staff> staffs = request.staffList().stream()
.map(staffRequest -> Staff.create(
staffRequest.staffName(),
staffRequest.staffRole(),
staffRequest.staffPhoto(),
performance
))
.collect(Collectors.toList());
staffRepository.saveAll(staffs);

return mapToPerformanceResponse(performance, schedules, casts, staffs);
}

private PerformanceResponse mapToPerformanceResponse(Performance performance, List<Schedule> schedules, List<Cast> casts, List<Staff> staffs) {
List<ScheduleResponse> scheduleResponses = schedules.stream()
.map(schedule -> ScheduleResponse.of(
schedule.getId(),
schedule.getPerformanceDate(),
schedule.getTotalTicketCount(),
calculateDueDate(schedule.getPerformanceDate().toLocalDate()),
schedule.getScheduleNumber()
))
.collect(Collectors.toList());

List<CastResponse> castResponses = casts.stream()
.map(cast -> CastResponse.of(
cast.getId(),
cast.getCastName(),
cast.getCastRole(),
cast.getCastPhoto()
))
.collect(Collectors.toList());

List<StaffResponse> staffResponses = staffs.stream()
.map(staff -> StaffResponse.of(
staff.getId(),
staff.getStaffName(),
staff.getStaffRole(),
staff.getStaffPhoto()
))
.collect(Collectors.toList());

return PerformanceResponse.of(
performance.getUsers().getId(),
performance.getId(),
performance.getPerformanceTitle(),
performance.getGenre(),
performance.getRunningTime(),
performance.getPerformanceDescription(),
performance.getPerformanceAttentionNote(),
performance.getBankName(),
performance.getAccountNumber(),
performance.getAccountHolder(),
performance.getPosterImage(),
performance.getPerformanceTeamName(),
performance.getPerformanceVenue(),
performance.getPerformanceContact(),
performance.getPerformancePeriod(),
performance.getTicketPrice(),
performance.getTotalScheduleCount(),
scheduleResponses,
castResponses,
staffResponses
);
}

private int calculateDueDate(LocalDate performanceDate) {
return (int) ChronoUnit.DAYS.between(LocalDate.now(), performanceDate);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
import com.beat.domain.member.domain.Member;
import com.beat.domain.member.exception.MemberErrorCode;
import com.beat.domain.performance.application.dto.*;
import com.beat.domain.performance.application.dto.home.HomePerformanceDetail;
import com.beat.domain.performance.application.dto.home.HomePromotionDetail;
import com.beat.domain.performance.application.dto.home.HomeRequest;
import com.beat.domain.performance.application.dto.home.HomeResponse;
import com.beat.domain.performance.dao.PerformanceRepository;
import com.beat.domain.performance.domain.Performance;
import com.beat.domain.performance.exception.PerformanceErrorCode;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.beat.domain.performance.application.dto.create;

public record CastRequest(
String castName,
String castRole,
String castPhoto
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.beat.domain.performance.application.dto.create;

public record CastResponse(
Long castId,
String castName,
String castRole,
String castPhoto
) {
public static CastResponse of(
Long castId,
String castName,
String castRole,
String castPhoto
) {
return new CastResponse(
castId,
castName,
castRole,
castPhoto
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.beat.domain.performance.application.dto.create;

import com.beat.domain.performance.domain.BankName;
import com.beat.domain.performance.domain.Genre;

import java.util.List;

public record PerformanceRequest(
String performanceTitle,
Genre genre,
int runningTime,
String performanceDescription,
String performanceAttentionNote,
BankName bankName,
String accountNumber,
String accountHolder,
String posterImage,
String performanceTeamName,
String performanceVenue,
String performanceContact,
String performancePeriod,
int ticketPrice,
int totalScheduleCount,
List<ScheduleRequest> scheduleList,
List<CastRequest> castList,
List<StaffRequest> staffList
) {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package com.beat.domain.performance.application.dto.create;

import com.beat.domain.performance.domain.BankName;
import com.beat.domain.performance.domain.Genre;

import java.util.List;

public record PerformanceResponse(
Long userId,
Long performanceId,
String performanceTitle,
Genre genre,
int runningTime,
String performanceDescription,
String performanceAttentionNote,
BankName bankName,
String accountNumber,
String accountHolder,
String posterImage,
String performanceTeamName,
String performanceVenue,
String performanceContact,
String performancePeriod,
int ticketPrice,
int totalScheduleCount,
List<ScheduleResponse> scheduleList,
List<CastResponse> castList,
List<StaffResponse> staffList
) {
public static PerformanceResponse of(
Long userId,
Long performanceId,
String performanceTitle,
Genre genre,
int runningTime,
String performanceDescription,
String performanceAttentionNote,
BankName bankName,
String accountNumber,
String accountHolder,
String posterImage,
String performanceTeamName,
String performanceVenue,
String performanceContact,
String performancePeriod,
int ticketPrice,
int totalScheduleCount,
List<ScheduleResponse> scheduleList,
List<CastResponse> castList,
List<StaffResponse> staffList
) {
return new PerformanceResponse(
userId,
performanceId,
performanceTitle,
genre,
runningTime,
performanceDescription,
performanceAttentionNote,
bankName,
accountNumber,
accountHolder,
posterImage,
performanceTeamName,
performanceVenue,
performanceContact,
performancePeriod,
ticketPrice,
totalScheduleCount,
scheduleList,
castList,
staffList
);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.beat.domain.performance.application.dto.create;

import com.beat.domain.schedule.domain.ScheduleNumber;

import java.time.LocalDateTime;

public record ScheduleRequest(
LocalDateTime performanceDate,
int totalTicketCount,
ScheduleNumber scheduleNumber
) {}
Loading

0 comments on commit 7bda8f2

Please sign in to comment.