From 7bda8f22fe4913b7e294751b1474e73b2a7e0a03 Mon Sep 17 00:00:00 2001 From: DongHoon Lee <125895298+hoonyworld@users.noreply.github.com> Date: Wed, 17 Jul 2024 21:00:16 +0900 Subject: [PATCH] [deploy] merge to main (#109) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [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 <125895298+hoonyworld@users.noreply.github.com> * [#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 * HOTFIX(workflow): 오타 수정 --------- Co-authored-by: hyerinhwang-sailin * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [#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 * HOTFIX(workflow): 오타 수정 --------- Co-authored-by: hyerinhwang-sailin * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 * [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 <125895298+hoonyworld@users.noreply.github.com> * [#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 * HOTFIX(workflow): 오타 수정 --------- Co-authored-by: hyerinhwang-sailin * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 --------- Co-authored-by: hyerinhwang-sailin * 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 <125895298+hoonyworld@users.noreply.github.com> * [#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 * HOTFIX(workflow): 오타 수정 --------- Co-authored-by: hyerinhwang-sailin * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [#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 * HOTFIX(workflow): 오타 수정 --------- Co-authored-by: hyerinhwang-sailin * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 * [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 <125895298+hoonyworld@users.noreply.github.com> * [#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 * HOTFIX(workflow): 오타 수정 --------- Co-authored-by: hyerinhwang-sailin * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 <125895298+hoonyworld@users.noreply.github.com> * [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 --------- Co-authored-by: hyerinhwang-sailin * 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 수정 --------- Co-authored-by: hyerinhwang-sailin * Update application-prod.yml --------- Co-authored-by: DongHoon Lee <125895298+hoonyworld@users.noreply.github.com> * [feat] #50 - 공연 생성 POST API 생성 (#108) * [#50] chore: 폴더 이동 * [#50] feat: request DTO 생성 * [#50] feat: response DTO 생성 * [#50] refactor(PerformanceSuccessCode): 공연 생성 성공 메시지 추가 * [#50] chore(PerformanceService): import문 변 * [#50] chore(HomeController): import문 변 * [#50] feat(PerformanceCreateService): 공연 생성 서비스 로직 생성 * [#50] feat(PerformanceController): 공연 생성 POST API 생성 --------- Co-authored-by: hyerinhwang-sailin --- .../performance/api/HomeController.java | 4 +- .../api/PerformanceController.java | 17 ++ .../application/PerformanceCreateService.java | 155 ++++++++++++++++++ .../application/PerformanceService.java | 4 + .../application/dto/create/CastRequest.java | 7 + .../application/dto/create/CastResponse.java | 22 +++ .../dto/create/PerformanceRequest.java | 27 +++ .../dto/create/PerformanceResponse.java | 75 +++++++++ .../dto/create/ScheduleRequest.java | 11 ++ .../dto/create/ScheduleResponse.java | 29 ++++ .../application/dto/create/StaffRequest.java | 7 + .../application/dto/create/StaffResponse.java | 22 +++ .../dto/{ => home}/HomePerformanceDetail.java | 2 +- .../dto/{ => home}/HomePromotionDetail.java | 2 +- .../dto/{ => home}/HomeRequest.java | 2 +- .../dto/{ => home}/HomeResponse.java | 2 +- .../exception/PerformanceSuccessCode.java | 1 + 17 files changed, 383 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/beat/domain/performance/application/PerformanceCreateService.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/CastRequest.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/CastResponse.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/PerformanceRequest.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/PerformanceResponse.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/ScheduleRequest.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/ScheduleResponse.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/StaffRequest.java create mode 100644 src/main/java/com/beat/domain/performance/application/dto/create/StaffResponse.java rename src/main/java/com/beat/domain/performance/application/dto/{ => home}/HomePerformanceDetail.java (91%) rename src/main/java/com/beat/domain/performance/application/dto/{ => home}/HomePromotionDetail.java (84%) rename src/main/java/com/beat/domain/performance/application/dto/{ => home}/HomeRequest.java (61%) rename src/main/java/com/beat/domain/performance/application/dto/{ => home}/HomeResponse.java (85%) diff --git a/src/main/java/com/beat/domain/performance/api/HomeController.java b/src/main/java/com/beat/domain/performance/api/HomeController.java index 9bb7abe2..7a7a7159 100644 --- a/src/main/java/com/beat/domain/performance/api/HomeController.java +++ b/src/main/java/com/beat/domain/performance/api/HomeController.java @@ -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; diff --git a/src/main/java/com/beat/domain/performance/api/PerformanceController.java b/src/main/java/com/beat/domain/performance/api/PerformanceController.java index 1e54ae85..72c685d9 100644 --- a/src/main/java/com/beat/domain/performance/api/PerformanceController.java +++ b/src/main/java/com/beat/domain/performance/api/PerformanceController.java @@ -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; @@ -21,6 +27,17 @@ public class PerformanceController { private final PerformanceService performanceService; + private final PerformanceCreateService performanceCreateService; + + @Operation(summary = "공연 생성 API", description = "공연을 생성하는 POST API입니다.") + @PostMapping + public ResponseEntity> 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}") diff --git a/src/main/java/com/beat/domain/performance/application/PerformanceCreateService.java b/src/main/java/com/beat/domain/performance/application/PerformanceCreateService.java new file mode 100644 index 00000000..82e06031 --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/PerformanceCreateService.java @@ -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 schedules = request.scheduleList().stream() + .map(scheduleRequest -> Schedule.create( + scheduleRequest.performanceDate(), + scheduleRequest.totalTicketCount(), + 0, + true, + scheduleRequest.scheduleNumber(), + performance + )) + .collect(Collectors.toList()); + scheduleRepository.saveAll(schedules); + + List casts = request.castList().stream() + .map(castRequest -> Cast.create( + castRequest.castName(), + castRequest.castRole(), + castRequest.castPhoto(), + performance + )) + .collect(Collectors.toList()); + castRepository.saveAll(casts); + + List 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 schedules, List casts, List staffs) { + List scheduleResponses = schedules.stream() + .map(schedule -> ScheduleResponse.of( + schedule.getId(), + schedule.getPerformanceDate(), + schedule.getTotalTicketCount(), + calculateDueDate(schedule.getPerformanceDate().toLocalDate()), + schedule.getScheduleNumber() + )) + .collect(Collectors.toList()); + + List castResponses = casts.stream() + .map(cast -> CastResponse.of( + cast.getId(), + cast.getCastName(), + cast.getCastRole(), + cast.getCastPhoto() + )) + .collect(Collectors.toList()); + + List 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); + } +} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/PerformanceService.java b/src/main/java/com/beat/domain/performance/application/PerformanceService.java index 62136665..ff96a175 100644 --- a/src/main/java/com/beat/domain/performance/application/PerformanceService.java +++ b/src/main/java/com/beat/domain/performance/application/PerformanceService.java @@ -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; diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/CastRequest.java b/src/main/java/com/beat/domain/performance/application/dto/create/CastRequest.java new file mode 100644 index 00000000..60cc9b47 --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/CastRequest.java @@ -0,0 +1,7 @@ +package com.beat.domain.performance.application.dto.create; + +public record CastRequest( + String castName, + String castRole, + String castPhoto +) {} diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/CastResponse.java b/src/main/java/com/beat/domain/performance/application/dto/create/CastResponse.java new file mode 100644 index 00000000..00f18e4c --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/CastResponse.java @@ -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 + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/PerformanceRequest.java b/src/main/java/com/beat/domain/performance/application/dto/create/PerformanceRequest.java new file mode 100644 index 00000000..1ae592f9 --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/PerformanceRequest.java @@ -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 scheduleList, + List castList, + List staffList +) {} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/PerformanceResponse.java b/src/main/java/com/beat/domain/performance/application/dto/create/PerformanceResponse.java new file mode 100644 index 00000000..9d34b8da --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/PerformanceResponse.java @@ -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 scheduleList, + List castList, + List 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 scheduleList, + List castList, + List staffList + ) { + return new PerformanceResponse( + userId, + performanceId, + performanceTitle, + genre, + runningTime, + performanceDescription, + performanceAttentionNote, + bankName, + accountNumber, + accountHolder, + posterImage, + performanceTeamName, + performanceVenue, + performanceContact, + performancePeriod, + ticketPrice, + totalScheduleCount, + scheduleList, + castList, + staffList + ); + } +} diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/ScheduleRequest.java b/src/main/java/com/beat/domain/performance/application/dto/create/ScheduleRequest.java new file mode 100644 index 00000000..526d0d6e --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/ScheduleRequest.java @@ -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 +) {} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/ScheduleResponse.java b/src/main/java/com/beat/domain/performance/application/dto/create/ScheduleResponse.java new file mode 100644 index 00000000..88a06f46 --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/ScheduleResponse.java @@ -0,0 +1,29 @@ +package com.beat.domain.performance.application.dto.create; + +import com.beat.domain.schedule.domain.ScheduleNumber; + +import java.time.LocalDateTime; + +public record ScheduleResponse( + Long scheduleId, + LocalDateTime performanceDate, + int totalTicketCount, + int dueDate, + ScheduleNumber scheduleNumber +) { + public static ScheduleResponse of( + Long scheduleId, + LocalDateTime performanceDate, + int totalTicketCount, + int dueDate, + ScheduleNumber scheduleNumber + ) { + return new ScheduleResponse( + scheduleId, + performanceDate, + totalTicketCount, + dueDate, + scheduleNumber + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/StaffRequest.java b/src/main/java/com/beat/domain/performance/application/dto/create/StaffRequest.java new file mode 100644 index 00000000..8b126d56 --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/StaffRequest.java @@ -0,0 +1,7 @@ +package com.beat.domain.performance.application.dto.create; + +public record StaffRequest( + String staffName, + String staffRole, + String staffPhoto +) {} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/dto/create/StaffResponse.java b/src/main/java/com/beat/domain/performance/application/dto/create/StaffResponse.java new file mode 100644 index 00000000..c08fc2f9 --- /dev/null +++ b/src/main/java/com/beat/domain/performance/application/dto/create/StaffResponse.java @@ -0,0 +1,22 @@ +package com.beat.domain.performance.application.dto.create; + +public record StaffResponse( + Long staffId, + String staffName, + String staffRole, + String staffPhoto +) { + public static StaffResponse of( + Long staffId, + String staffName, + String staffRole, + String staffPhoto + ) { + return new StaffResponse( + staffId, + staffName, + staffRole, + staffPhoto + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/beat/domain/performance/application/dto/HomePerformanceDetail.java b/src/main/java/com/beat/domain/performance/application/dto/home/HomePerformanceDetail.java similarity index 91% rename from src/main/java/com/beat/domain/performance/application/dto/HomePerformanceDetail.java rename to src/main/java/com/beat/domain/performance/application/dto/home/HomePerformanceDetail.java index 51537a79..1417cfb4 100644 --- a/src/main/java/com/beat/domain/performance/application/dto/HomePerformanceDetail.java +++ b/src/main/java/com/beat/domain/performance/application/dto/home/HomePerformanceDetail.java @@ -1,4 +1,4 @@ -package com.beat.domain.performance.application.dto; +package com.beat.domain.performance.application.dto.home; public record HomePerformanceDetail( Long performanceId, diff --git a/src/main/java/com/beat/domain/performance/application/dto/HomePromotionDetail.java b/src/main/java/com/beat/domain/performance/application/dto/home/HomePromotionDetail.java similarity index 84% rename from src/main/java/com/beat/domain/performance/application/dto/HomePromotionDetail.java rename to src/main/java/com/beat/domain/performance/application/dto/home/HomePromotionDetail.java index 02ead354..9bd9e35f 100644 --- a/src/main/java/com/beat/domain/performance/application/dto/HomePromotionDetail.java +++ b/src/main/java/com/beat/domain/performance/application/dto/home/HomePromotionDetail.java @@ -1,4 +1,4 @@ -package com.beat.domain.performance.application.dto; +package com.beat.domain.performance.application.dto.home; public record HomePromotionDetail( Long promotionId, diff --git a/src/main/java/com/beat/domain/performance/application/dto/HomeRequest.java b/src/main/java/com/beat/domain/performance/application/dto/home/HomeRequest.java similarity index 61% rename from src/main/java/com/beat/domain/performance/application/dto/HomeRequest.java rename to src/main/java/com/beat/domain/performance/application/dto/home/HomeRequest.java index 518eae89..841c8f08 100644 --- a/src/main/java/com/beat/domain/performance/application/dto/HomeRequest.java +++ b/src/main/java/com/beat/domain/performance/application/dto/home/HomeRequest.java @@ -1,4 +1,4 @@ -package com.beat.domain.performance.application.dto; +package com.beat.domain.performance.application.dto.home; import com.beat.domain.performance.domain.Genre; diff --git a/src/main/java/com/beat/domain/performance/application/dto/HomeResponse.java b/src/main/java/com/beat/domain/performance/application/dto/home/HomeResponse.java similarity index 85% rename from src/main/java/com/beat/domain/performance/application/dto/HomeResponse.java rename to src/main/java/com/beat/domain/performance/application/dto/home/HomeResponse.java index 7690d1c4..c3d963b4 100644 --- a/src/main/java/com/beat/domain/performance/application/dto/HomeResponse.java +++ b/src/main/java/com/beat/domain/performance/application/dto/home/HomeResponse.java @@ -1,4 +1,4 @@ -package com.beat.domain.performance.application.dto; +package com.beat.domain.performance.application.dto.home; import java.util.List; diff --git a/src/main/java/com/beat/domain/performance/exception/PerformanceSuccessCode.java b/src/main/java/com/beat/domain/performance/exception/PerformanceSuccessCode.java index 596b114f..83c51436 100644 --- a/src/main/java/com/beat/domain/performance/exception/PerformanceSuccessCode.java +++ b/src/main/java/com/beat/domain/performance/exception/PerformanceSuccessCode.java @@ -7,6 +7,7 @@ @Getter @RequiredArgsConstructor public enum PerformanceSuccessCode implements BaseSuccessCode { + PERFORMANCE_CREATE_SUCCESS(201, "공연이 성공정으로 생성되었습니다."), PERFORMANCE_RETRIEVE_SUCCESS(200, "공연 상세 정보 조회가 성공적으로 완료되었습니다."), BOOKING_PERFORMANCE_RETRIEVE_SUCCESS(200, "예매 관련 공연 정보 조회가 성공적으로 완료되었습니다."), HOME_PERFORMANCE_RETRIEVE_SUCCESS(200, "홈 화면 공연 목록 조회가 성공적으로 완료되었습니다."),