Skip to content

Commit

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

* [deploy] merge to main (#26)

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

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

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

* [#4] remove: enum 삭제

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

---------

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

* HOTFIX(workflow): 오타 수정

---------

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

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

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

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

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

- security 일시적으로 비활성화

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* HOTFIX(Jenkinsfile): 포트 수정

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#40] feat: repository 추가

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#44] chore: import문 추가

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#49] chore: swagger annotation 추가

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

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

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

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

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

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

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

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

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

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

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

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

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

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

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

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

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

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

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

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

* [deploy] merge to main (#90)

* [deploy] merge to main (#83)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

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

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

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

* [#4] remove: enum 삭제

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

---------

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

* HOTFIX(workflow): 오타 수정

---------

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

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

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

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

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

- security 일시적으로 비활성화

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* HOTFIX(Jenkinsfile): 포트 수정

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#40] feat: repository 추가

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#44] chore: import문 추가

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#49] chore: swagger annotation 추가

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

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

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

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

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

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

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

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

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

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

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

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

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

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

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

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

---------

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

* [deploy] merge to main (#87)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

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

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

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

* [#4] remove: enum 삭제

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

---------

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

* HOTFIX(workflow): 오타 수정

---------

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

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

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

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

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

- security 일시적으로 비활성화

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* HOTFIX(Jenkinsfile): 포트 수정

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#40] feat: repository 추가

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#44] chore: import문 추가

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [#49] chore: swagger annotation 추가

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

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

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

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

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

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

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

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

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

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

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

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

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

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

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

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

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

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

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

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

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

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

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

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

---------

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

---------

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

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

This reverts commit f519b0c82a2f01d4374eb045b9e90c6303381e50.

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

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

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

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

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

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

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

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

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

* [#101] chore: yml 수정

* [#101] feat: s3 추가

* HOTIFX: prod ci-yml 수정

* Main redis host yml 수정 (#105)

* [deploy] merge to main (#104)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

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

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

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

* [#4] remove: enum 삭제

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

---------

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

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

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

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [feat] #63 - health check URL 화이트리스트에 등록 (#67)

* [#63] remove(UsersRepository): 중복 클래스 삭제

* [#63] feat(HealthCheckController): healthcheck 컨트롤러 생성

* [#63] feat(SecurityConfig): healthcheck url white_list에 등록

* [fix] #57 -  entity 연관관계 설정  SecurityConfig 수정 (#65)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [fix] #57 - security 관련 에러 대응 (#71)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [fix] #73 - security 수정 (#74)

* [#57] refactor: entity 연관관계 설정 및 수정

* [#57] fix(SecurityConfig): auth_whitelist update

* [#57] chore(UsersRepository): 중복된 파일 및 불필요한 패키지 제거

* [#57] refactor(SecurityConfig): auth_whitelist update

* [#57] refactor: 엔티티 정적팩토리 메소드 추가

* [#57] comment(SecurityConfig): 주석 제거

* [#57] fix(JwtAuthenticationFilter): 에러 로직 수정

* fix(SecurityConfig): webSecurityCustomizer 로직 추가

* [#57] fix:security 수정

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경 (#77)

* [fix] #76 - 누락된 코드 추가 (#79)

* [#76] fix(SecurityConfig): Base64 인코딩을 하도록 변경

* [#76] chore(SecurityConfig): 누락된 import문 추가

* [#76] chore(JwtTokenProvider): 누락된 코드 추가

* [#81] fix(JwtTokenProvider): jwtsecret을 인코딩하고 디코딩을 하도록 수정 (#82)

* [#85] chore(application.yml): 환경변수 설정 (#86)

* [chore] #88 - 레디스 환경변수 추가 (#89)

* [#88] chore(dev-CI.yml): dev서버 레디스 환경변수 설정 추가

* [#88] chore(prod-CI.yml): prod 서버 레디스 환경변수 설정 추가

* [deploy] merge to main (#90)

* [deploy] merge to main (#83)

* [deploy] merge to develop (#27)

* [deploy] merge to main (#26)

* [#2] chore(.gitignore): .gradle, .idea 파일 삭제 (#3)

* [refactor] #4 - 도메인형 디렉터리 구조 변경 및 local, dev, prod 운영 환경 분리 (#5)

* [#4] fix: 클래스 첫글자 대문자로 수정

* [#4] remove: enum 삭제

* [#4] feat(BaseSuccessCode): 성공 상태 관리를 위한 인터페이스 생성

* [#4] feat(BaseErrorCode): 에러 상태 관리를 위한 인터페이스 생성

* [#4] refactor: global 패키지로 이동

* [#4] refactor: 서버 운영 환경 분리

* [feat] #6 - dev, prod Dockerfile 분리 및 github Action CI workflow 구현 (#7)

* [#6] feat(Dockerfile): prod용 도커 파일 구현

* [#6] feat(Dockerfile-dev): dev용 도커 파일 구현

* [#6] feat(dev-CI.yml): dev용 CI workflow 구현

* [#6] feat(prod-CI.yml): prod용 CI workflow 구현

* [#6] chore(.gitignore): gradle-wrapper.jar 파일은 레포지토리에 포함되도록 설정

* [#6] fix(gradle-wrapper.jar): .gitignore로 누락된 파일 추가

* [#6] chore(build.grade): plain jar 생성 방지

* [#9] docs(README.md): 서비스 소개 README v1 작성 (#10)

* [#11] docs(README.md): 리드미 업데이트 (#12)

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [feat] #14 - 회원, 홍보, 등장인물, 스태프 엔티티 생성 (#16)

* [#14] feat(Member): 멤버 엔티티 생성

* [#14] feat(Promotion): 홍보 엔티티 생성

* [#14] feat(Cast): 등장인물 엔티티 생성

* [#14] feat(Staff): 스태프 엔티티 생성

* [feat] #13 - 유저, 예매, 공연, 회차 엔티티 생성 (#15)

* [#13] feat(Users): 사용자 엔티티 생성

* [#13] feat(Genre): 장르 열거형 생성

* [#13] feat(BankName): 은행명 열거형 생성

* [#13] refactor(BaseTimeEntity): 업데이트 시간 관리 필드 활성화

* [#13] feat(Performance): 공연 엔티티 생성

* [#13] feat(ScheduleNumber): 회차 번호 열거형 생성

* [#13] feat(Schedule): 회차 엔티티 생성

* [#13] feat(Booking): 예매 엔티티 생성

* [#13] refactor(ScheduleNumber): 네이밍 수정

* [#14} fix: 스태프, 등장인물, 홍보 엔티티 상속관계 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [#18] feat(Jenkinsfile): 젠킨스 파일 생성 (#19)

* [#20] refactor(Jenkinsfile): 젠킨스 파일 Webhook 테스트용 커밋 (#21)

* [#22] feat(Jenkinsfile): Jenkins multibranch 스크립트 작성 (#23)

* HOTFIX(Jenkinsfile): Jenkins multibranch 스크립트 수정

* HOTFIX(workflows): 빌드 후 젠킨스 배포가 진행되도록 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* HOTFIX(workflows): Jenkinsfile 스크립트 수정

* [#24] feat(Jenkinsfile): slack 연동 스크립트 작성 (#25)

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* HOTFIX(workflow): 오타 수정

---------

Co-authored-by: hyerinhwang-sailin <[email protected]>

* [feat] #28 - 비회원 예매 조회 POST API 구현 (#29)

* chore(application-dev.yml): dialect 추가

* chore(application-prod.yml): dialect 추가

* [#28] chore(build.gradle): security 의존성 비활성화

- security 일시적으로 비활성화

* [#28] refactor(Booking): 예매 엔티티에 빌더 및 정적팩토리 메서드 추가

* [#28] refactor(ErrorResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(Schedule): 회차 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(Performance): 공연 엔티티에 빌더 및 정적 팩토리 메서드 추가

* [#28] refactor(SuccessResponse): 정적 팩토리 메서드 네이밍 변환

* [#28] refactor(GlobalExceptionHandler): INTERNAL_SERVER_ERROR 핸들러 메서드 추가

* [#28] feat(BookingSuccessCode): 예매 성공 메시지를 관리하는 열거형 생성

* [#28] feat(BookingErrorCode): 예매 에러 메시지를 관리하는 열거형 생성

* [#28] feat(BookingRetrieveResponse): 예매 조회 응답 DTO 생성

* [#28] feat(BookingRetrieveRequest): 예매 조회 요청 DTO 생성

* [#28] feat(BookingRepository): 예매 레포지토리 생성 및 비회원 예매 조회 시 예매 내역 가져오는 메서드 구현

* [#28] feat(BookingService): 예매 서비스 레이어 생성 및 비회원 조회 메서드 구현

* [#28] feat(BookingController): 예매 컨트롤러 생성 및 비회원 예매조회 POST API 구현

* [feat] #30 - SwaggerConfig 및 WebConfig 구현 (#31)

* [#30] chore(build.gradle): springdoc 의존성 추가

* [#30] feat(SwaggerConfig): SwaggerConfig 추가

* [#30] feat(WebConfig): WebConfig 추가

* HOTFIX(workflows): push 이벤트 시 github action이 빌드 되지 않도록 수정

* HOTFIX(Jenkinsfile): 포트 수정

* [feat] #32 - 티켓 예매 가능 여부 GET API 구현 (#33)

* [#32] refactor(BookingController): 메서드명 수정

* [#32] feat(ConflictException): Conflict 409에러 클래스 생성

* [#32] feat(GlobalExceptionHandler): ConflictException 등록

* [#32] feat(TicketAvailabilityRequest): TicketAvailabilityRequest DTO 생성

* [#32] feat(TicketAvailabilityResponse): TicketAvailabilityResponse DTO 생성

* [#32] feat(ScheduleSuccessCode): ScheduleSuccessCode 열거형 생성

* [#32] feat(ScheduleErrorCode): ScheduleErrorCode 열거형 생성

* [#32] feat(ScheduleRepository): ScheduleRepository 생성

* [#32] feat(ScheduleService): ScheduleService 생성 및 회차별 티켓 구매 가능 여부 판단 메서드 구현

* [#32] feat(ScheduleController): 회차별 티켓 수량 조회 GET API 구현

* [feat] #17 - 카카오 소셜 로그인 API 구현 (#36)

* [#17] feat(build.gradle): jwt, security, open feign, Redis 의존성 추가

* [#17] feat(BeatApplication): OpenFeign 관련 어노테이션 추가

* [#17] feat(RedisConfig): redis 설정

* [#17] feat: redis 활용 jwt 토큰 생성 로직 구현

* [#17] feat(SecurityConfig): security 설정

* [#17] refactor: Member, Users 엔티티 수정 및 관련 enum 추가

* [#17] feat: Member, Users 도메인 관련 인증 로직 구현

* [#17] feat(MemberController): Member 관련 API 엔드포인트 구현

* [#17] feat: Security 관련 인증 객체 구현

* [#17] feat: 소셜로그인 로직 구현

* [#17] fix: 소셜로그인 오류 해결

* [#17] refactor: 코드리뷰 반영

* [#17] refactor: 코드리뷰 반영

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #34 - 비회원 예매 POST API 구현 (#35)

* [#34] feat(Users): 빌더 및 정적 팩토리 메서드 추가

* [#34] feat(Entity): 엔티티 id 필드 수정

* [#34] refactor(application.yml): dialect 추가

* [#34] refactor(ScheduleService): 네이밍 수정

* [#34] refactor(BookingSuccessCode): 비회원 예매 조회 성공 메시지 추가

* [#34] feat(GuestBookingRequest): 비회원 예매 요청 DTO 생성

* [#34] feat(GuestBookingResponse): 비회원 예매 응답 DTO 생성

* [#34] refactor(BookingRetrieveService): 네이밍 수정

* [#34] feat(PerformanceRepository): 공연 레포지토리 생성

* [#34] feat(UserRepository): 유저 레포지토리 생성

* [#34] refactor(BookingRepository): 비회원 예매 시 네가지 정보가 모두 일치 해야만 다른 유저로 판단하는 메서드 구현

* [#34] refactor(ScheduleRepository): 비관적 락 적용

* [#34] feat(GuestBookingService): 비관적 락을 이용해 비회원 예매 로직 구현

* [#34] feat(BookingController): 비회원 예매 POST API 구현

* [#34] test(GuestBookingServiceConcurrencyTest): 동시성 테스트 구현

* [Refactor] #37 - 카카오 로그인 API response 수정 (#39)

* [#37] rename: 빈 충돌 해결 위해 UserRepository를 UsersRepository로 rename

* [#37] refactor: login response에서 refreshToken을 cookie에 담아주도록 변경

* [#37] fix: dao, repository 충돌 해결

* [#37] refactor: 어노테이션 수정

* [feat] #40 - 소개 관련 공연 정보 조회 GET API 구현 (#41)

* [#40] feat: repository 추가

* [#40] feat: 공연 관련 성공, 실패 메세지 추가

* [#40] feat(PerformanceDetailResponse): 공연 상세페이지 조회 응답 dto

* [#40] feat(PerformanceService): 공연 상세페이지 조회 로직 구현

* [#40] feat(PerformanceController): 공연 상세페이지 엔드포인트 구현

* [#40] feat(SecurityConfig): auth whitelist update

* [#40] refactor: dto 분리 및 rename

* [feat] #42 - 예매 관련 공연 정보 GET API 구현 (#43)

* [#42] feat: 예매 관련 정보 조회 dto 생성

* [#42] feat: 예매 관련 정보 조회 성공 메세지 추가

* [#42] feat(ScheduleService): 잔여티켓계산, 예매가능여부확인, 예매가능여부 update 메소드 구현

* [#42] feat(PerformanceService): 예매관련공연정보의 response 생성하는 로직 구현

* [#42] feat(PerformanceController): 예매관련공연정보 조회 엔드포인트 구현

* [#42] feat(SecurityConfig): auth_whitelist update

* [#42] refactor(ScheduleService): findTicketAvailability에서 getAvailableTicketCount method 사용하도록 수정

* [feat] #38 - 회원 예매 POST API 구현 (#45)

* [#38] fix(Cast): Join 하는 부분 수정 및 빌더와 정적 팩토리 메서드 패턴 도입

* [#38] chore(application.yml): 계층 수정

* [#38] feat: 커스텀 어노테이션 생성

* [#38] fix(UserRepository): 중복된 클래스 삭제

* [#38] feat(UserErrorCode): 유저의 에러 메시지를 관리하는 열거형 생성

* [#38] refactor(MemberErrorCode): message 목적에 맞게 변경

* [#38] refactor(BookingSuccessCode): 회원 예매 성공 메시지 추가

* [#38] feat: 커스텀 어노테이션 생성 커밋에 누락된 클래스 추가

* [#38] refactor(GuestBookingService): schedule에서 바로 get 하도록 수정

* [#38] test(GuestBookingServiceConcurrencyTest): import문 경로명 변경

* [#38] refactor(MemberService): @Transactional 어노테이션이 필요한 메서드에 해당 옵션 추가

* [#38] feat(MemberBookingRequest): 회원 예매 요청 DTO 생성

* [#38] feat(MemberBookingResponse): 회원 예매 응답 DTO 생성

* [#38] refactor(MemberController): refreshToken을 쿠키에 넣어주도록 구현

* [#38] feat(MemberBookingService): 회원 예매 서비스 로직 구현

* [#38] feat(BookingController): 회원 예매 요청 POST API 구현

* [#38] fix: 빌드 안되는 부분 수정

* [#38] remove(MemberBookingService): 사용하지 않는 import문 삭제

* [#38] refactor: 커스텀 어노테이션 이름 수정

* [feat] #44 - 홈페이지 공연 및 홍보 조회 GET API 구현 (#47)

* [#44] refactor: 코드리뷰 반영

* [#44] fix(Promotion): 기본키 이름 수정, performanceId 연관관계 설정

* [#44] feat: Repository 및 관련 로직 추가

* [#44] feat: errorcode, successcode 추가

* [#44] feat: 홈페이지 request, response dto 생성

* [#44] feat(ScheduleService): dueDate 관련 로직 구현

* [#44] feat(PerformanceService): 홈페이지 정렬 및 response 생성 로직 구현

* [#44] chore: import문 추가

* [feat] #46 - 회원 예매 조회 GET API 구현 (#48)

* [#46] remove(BookingRetrieveRequest): 클래스 삭제

* [#46] refactor(BookingSuccessCode): 회원 예매 조회 성공 메시지 추가

* [#46] refactor(GuestBookingRetrieveResponse): 클래스 명 변경

* [#46] refactor(GuestBookingRetrieveRequest): 안쓰는 코드 주석처리

* [#46] refactor(GuestBookingRetrieveService): 클래스 명 수정으로 인한 리팩토링

* [#46] refactor(SecurityConfig): 토큰 사용하지 않는 api 경로 추가하기

* [#46] refactor(BookingRepository): userId로 예약 정보를 가져오는 JPA 메서드 구현

* [#46] feat(MemberBookingRetrieveResponse): 회원 조회 응답 DTO 생성

* [#46] feat(MemberBookingRetrieveService): 회원 예매 조회 로직을 담당하는 서비스 레이어 구현

* [#46] feat(BookingController): 회원 예매 조회 GET API 구현

* [feat] #49 - 예매자 관리 API 구현 (#51)

* [#49] feat: 티켓 관련 success, error code 추가

* [#49] feat(Booking): 입금여부 setter 메소드 추가

* [#49] feat(TicketRetrieveResponse): 예매자 확인 response dto 생성

* [#49] feat(Ticket): 예매자 확인용 티켓 정보 response dto 생성

* [#49] feat(TicketRepository): 예매자 필터링용 메소드 생성

* [#49] feat: 예매자 입금정보 수정 request dto 생성

* [#49] feat(TicketDeleteRequest): 예매자 삭제 request dto 생성

* [#49] feat(TicketService): 예매자 관리 관련 로직 구현

* [#49] feat(TicketController): 예매자 관리 엔드포인트 구현

* [#49] chore: swagger annotation 추가

* HOTFIX(SecurityConfig): WHITELIST 경로명 수정

* [fix] #52 - auth whitelist 수정 (#53)

* [#52]fix(SecurityConfig): auth_whitelist 수정

* [#52]fix(SecurityConfig): auth_whitelist 수정

---------

Co-authored-by: DongHoon Lee <[email protected]>

* [feat] #54 - 등록한 공연 목록 조회 GET API 구현 (#55)

* [#54] feat(PerformanceSuccessCode): success code 추가

* [#54] feat: 회원이 등록한 공연목록 조회 dto 생성

* [#54] feat(PerformanceService): 회원이 등록한 공연목록 조회 로직 구현

* [#54] feat(PerformanceRepository): 회원이 등록한 공연목록 조회 관련 메소드 추가

* [#54] feat(PerformanceController): 회원이 등록한 공연목록 조회 엔드포인트 생성

* [#54] fix(TicketService): exception error 수정

* [#54] chore(application.yml): yml 수정

* [fix] #58 - dev-ci.yml, prod-ci.yml 환경변수 추가  (#59)

* [#58] fix(dev-CI.yml): Dev 서버 CI 워크플로우 수정

* [#58] fix(prod-CI.yml): Prod 서버 CI 워크플로우 수정

* [refactor] #61 - Performance Entity field 추가 (#62)

* [#61] refactor(Performance): bankHolder 필드 추가

* [#61] chore(BookingController): swagger annotation 수정

* [feat] #63 - healthCheckController 생성 (#64)

* [#63] remove(User…
  • Loading branch information
hoonyworld and hyerinhwang-sailin committed Jul 17, 2024
1 parent 7bda8f2 commit 3e0c316
Show file tree
Hide file tree
Showing 28 changed files with 646 additions and 9 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,4 +120,5 @@

## 🛠️ Tech

## 🔨 Architecture
## 🔨 Architecture
<img width="918" alt="image" src="https://github.com/user-attachments/assets/14575f6d-4f3d-4b54-9c3c-6a302db2a5a4">
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ dependencies {
// aws
implementation 'io.awspring.cloud:spring-cloud-starter-aws:2.4.4'
implementation 'io.awspring.cloud:spring-cloud-starter-aws-secrets-manager-config:2.4.4'

//coolsms
implementation 'net.nurigo:sdk:4.3.0'
implementation 'net.nurigo:javaSDK:2.2'
}

jar {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ public ResponseEntity<SuccessResponse<TicketRetrieveResponse>> getTickets(
return ResponseEntity.ok(SuccessResponse.of(BookingSuccessCode.TICKET_RETRIEVE_SUCCESS, response));
}

@Operation(summary = "예매자 입금여부 수정 API", description = "메이커가 자신의 공연에 대한 예매자의 입금여부 정보를 수정하는 PUT API입니다.")
@Operation(summary = "예매자 입금여부 수정 및 웹발신 API", description = "메이커가 자신의 공연에 대한 예매자의 입금여부 정보를 수정한 뒤 예매확정 웹발신을 보내는 PUT API입니다.")
@PutMapping("/{performanceId}")
public ResponseEntity<SuccessResponse<Void>> updateTickets(
@CurrentMember Long memberId,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.beat.domain.booking.application;
import lombok.RequiredArgsConstructor;
import net.nurigo.java_sdk.api.Message;
import net.nurigo.java_sdk.exceptions.CoolsmsException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.HashMap;

@Service
@RequiredArgsConstructor
public class CoolSmsService {

@Value("${spring.coolsms.api.key}")
private String apiKey;

@Value("${spring.coolsms.api.secret}")
private String apiSecret;

@Value("${spring.coolsms.api.number}")
private String fromPhoneNumber;

public void sendSms(String to, String text) throws CoolsmsException {
String cleanedPhoneNumber = to.replace("-", ""); // 전화번호에서 '-' 제거
Message coolsms = new Message(apiKey, apiSecret);

HashMap<String, String> params = new HashMap<>();
params.put("to", cleanedPhoneNumber);
params.put("from", fromPhoneNumber);
params.put("type", "SMS");
params.put("text", text);

coolsms.send(params);
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.beat.domain.user.domain.Users;
import com.beat.domain.user.exception.UserErrorCode;
import lombok.RequiredArgsConstructor;
import net.nurigo.java_sdk.exceptions.CoolsmsException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

Expand All @@ -30,6 +31,7 @@ public class TicketService {
private final PerformanceRepository performanceRepository;
private final MemberRepository memberRepository;
private final UserRepository userRepository;
private final CoolSmsService coolSmsService;

public TicketRetrieveResponse getTickets(Long memberId, Long performanceId, ScheduleNumber scheduleNumber, Boolean isPaymentCompleted) {
Member member = memberRepository.findById(memberId).orElseThrow(
Expand Down Expand Up @@ -88,8 +90,19 @@ public void updateTickets(Long memberId, TicketUpdateRequest request) {
Booking booking = ticketRepository.findById(detail.bookingId())
.orElseThrow(() -> new NotFoundException(BookingErrorCode.NO_BOOKING_FOUND));

boolean wasPaymentCompleted = booking.isPaymentCompleted();
booking.setIsPaymentCompleted(detail.isPaymentCompleted());
ticketRepository.save(booking);

if (!wasPaymentCompleted && detail.isPaymentCompleted()) {
String message = String.format("%s님, BEAT에서의 %s의 예매가 확정되었습니다.", detail.bookerName(), request.performanceTitle());
try {
coolSmsService.sendSms(detail.bookerPhoneNumber(), message);
} catch (CoolsmsException e) {
// 문자 발송 실패 시 로깅 또는 다른 처리를 추가할 수 있습니다.
e.printStackTrace();
}
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,4 +22,6 @@ Optional<Booking> findFirstByBookerNameAndBookerPhoneNumberAndBirthDateAndPasswo
);

List<Booking> findByUsersId(Long userId);

boolean existsBySchedulePerformanceId(Long performanceId);
}
6 changes: 6 additions & 0 deletions src/main/java/com/beat/domain/cast/domain/Cast.java
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,10 @@ public static Cast create(String castName, String castRole, String castPhoto, Pe
.performance(performance)
.build();
}

public void update(String castName, String castRole, String castPhoto) {
this.castName = castName;
this.castRole = castRole;
this.castPhoto = castPhoto;
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/beat/domain/cast/exception/CastErrorCode.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.beat.domain.cast.exception;

import com.beat.global.common.exception.base.BaseErrorCode;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

@Getter
@RequiredArgsConstructor
public enum CastErrorCode implements BaseErrorCode {
CAST_NOT_FOUND(404, "등장인물이 존재하지 않습니다.")
;

private final int status;
private final String message;
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.beat.domain.performance.api;

import com.beat.domain.performance.application.PerformanceCreateService;
import com.beat.domain.performance.application.PerformanceManagementService;
import com.beat.domain.performance.application.PerformanceUpdateService;
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.application.dto.update.PerformanceUpdateRequest;
import com.beat.domain.performance.application.dto.update.PerformanceUpdateResponse;
import com.beat.domain.performance.exception.PerformanceSuccessCode;
import com.beat.domain.performance.application.PerformanceService;
import com.beat.global.auth.annotation.CurrentMember;
Expand All @@ -14,9 +17,11 @@
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
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.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
Expand All @@ -27,17 +32,28 @@
public class PerformanceController {

private final PerformanceService performanceService;
private final PerformanceCreateService performanceCreateService;
private final PerformanceManagementService performanceManagementService;
private final PerformanceUpdateService performanceUpdateService;


@Operation(summary = "공연 생성 API", description = "공연을 생성하는 POST API입니다.")
@PostMapping
public ResponseEntity<SuccessResponse<PerformanceResponse>> createPerformance(
@CurrentMember Long userId,
@CurrentMember Long memberId,
@RequestBody PerformanceRequest performanceRequest) {
PerformanceResponse response = performanceCreateService.createPerformance(userId, performanceRequest);
PerformanceResponse response = performanceManagementService.createPerformance(memberId, performanceRequest);
return ResponseEntity.status(HttpStatus.CREATED)
.body(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_CREATE_SUCCESS, response));
}
@Operation(summary = "공연 정보 수정 API", description = "공연 정보를 수정하는 PUT API입니다.")
@PutMapping
public ResponseEntity<SuccessResponse<PerformanceUpdateResponse>> updatePerformance(
@CurrentMember Long memberId,
@RequestBody PerformanceUpdateRequest performanceUpdateRequest) {
PerformanceUpdateResponse response = performanceUpdateService.updatePerformance(memberId, performanceUpdateRequest);
return ResponseEntity.status(HttpStatus.OK)
.body(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_UPDATE_SUCCESS, response));
}

@Operation(summary = "공연 상세정보 조회 API", description = "공연 상세페이지의 공연 상세정보를 조회하는 GET API입니다.")
@GetMapping("/detail/{performanceId}")
Expand All @@ -61,4 +77,13 @@ public ResponseEntity<SuccessResponse<MakerPerformanceResponse>> getUserPerforma
MakerPerformanceResponse response = performanceService.getMemberPerformances(memberId);
return ResponseEntity.ok(SuccessResponse.of(PerformanceSuccessCode.MAKER_PERFORMANCE_RETRIEVE_SUCCESS, response));
}
}

@Operation(summary = "공연 삭제 API", description = "공연을 삭제하는 DELETE API입니다.")
@DeleteMapping("/{performanceId}")
public ResponseEntity<SuccessResponse<Void>> deletePerformance(
@CurrentMember Long memberId,
@PathVariable Long performanceId) {
performanceManagementService.deletePerformance(memberId, performanceId);
return ResponseEntity.ok(SuccessResponse.of(PerformanceSuccessCode.PERFORMANCE_DELETE_SUCCESS, null));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
package com.beat.domain.performance.application;

import com.beat.domain.booking.dao.BookingRepository;
import com.beat.domain.cast.dao.CastRepository;
import com.beat.domain.cast.domain.Cast;
import com.beat.domain.member.dao.MemberRepository;
import com.beat.domain.member.domain.Member;
import com.beat.domain.member.exception.MemberErrorCode;
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.performance.exception.PerformanceErrorCode;
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.BadRequestException;
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 PerformanceManagementService {

private final PerformanceRepository performanceRepository;
private final ScheduleRepository scheduleRepository;
private final CastRepository castRepository;
private final StaffRepository staffRepository;
private final BookingRepository bookingRepository;
private final MemberRepository memberRepository;

@Transactional
public PerformanceResponse createPerformance(Long memberId, PerformanceRequest request) {
Member member = memberRepository.findById(memberId)
.orElseThrow(() -> new NotFoundException(MemberErrorCode.MEMBER_NOT_FOUND));

Users user = member.getUser();

Performance performance = Performance.create(
request.performanceTitle(),
request.genre(),
request.runningTime(),
request.performanceDescription(),
request.performanceAttentionNote(),
request.bankName(),
request.accountNumber(),
request.accountHolder(),
request.posterImage(),
request.performanceTeamName(),
request.performanceVenue(),
request.performanceContact(),
request.performancePeriod(),
request.ticketPrice(),
request.totalScheduleCount(),
user
);
performanceRepository.save(performance);

List<Schedule> schedules = request.scheduleList().stream()
.map(scheduleRequest -> Schedule.create(
scheduleRequest.performanceDate(),
scheduleRequest.totalTicketCount(),
0,
true,
scheduleRequest.scheduleNumber(),
performance
))
.collect(Collectors.toList());
scheduleRepository.saveAll(schedules);

List<Cast> casts = request.castList().stream()
.map(castRequest -> Cast.create(
castRequest.castName(),
castRequest.castRole(),
castRequest.castPhoto(),
performance
))
.collect(Collectors.toList());
castRepository.saveAll(casts);

List<Staff> staffs = request.staffList().stream()
.map(staffRequest -> Staff.create(
staffRequest.staffName(),
staffRequest.staffRole(),
staffRequest.staffPhoto(),
performance
))
.collect(Collectors.toList());
staffRepository.saveAll(staffs);

return mapToPerformanceResponse(performance, schedules, casts, staffs);
}

private PerformanceResponse mapToPerformanceResponse(Performance performance, List<Schedule> schedules, List<Cast> casts, List<Staff> staffs) {
List<ScheduleResponse> scheduleResponses = schedules.stream()
.map(schedule -> ScheduleResponse.of(
schedule.getId(),
schedule.getPerformanceDate(),
schedule.getTotalTicketCount(),
calculateDueDate(schedule.getPerformanceDate().toLocalDate()),
schedule.getScheduleNumber()
))
.collect(Collectors.toList());

List<CastResponse> castResponses = casts.stream()
.map(cast -> CastResponse.of(
cast.getId(),
cast.getCastName(),
cast.getCastRole(),
cast.getCastPhoto()
))
.collect(Collectors.toList());

List<StaffResponse> staffResponses = staffs.stream()
.map(staff -> StaffResponse.of(
staff.getId(),
staff.getStaffName(),
staff.getStaffRole(),
staff.getStaffPhoto()
))
.collect(Collectors.toList());

return PerformanceResponse.of(
performance.getUsers().getId(),
performance.getId(),
performance.getPerformanceTitle(),
performance.getGenre(),
performance.getRunningTime(),
performance.getPerformanceDescription(),
performance.getPerformanceAttentionNote(),
performance.getBankName(),
performance.getAccountNumber(),
performance.getAccountHolder(),
performance.getPosterImage(),
performance.getPerformanceTeamName(),
performance.getPerformanceVenue(),
performance.getPerformanceContact(),
performance.getPerformancePeriod(),
performance.getTicketPrice(),
performance.getTotalScheduleCount(),
scheduleResponses,
castResponses,
staffResponses
);
}

private int calculateDueDate(LocalDate performanceDate) {
return (int) ChronoUnit.DAYS.between(LocalDate.now(), performanceDate);
}

@Transactional
public void deletePerformance(Long memberId, Long performanceId) {
memberRepository.findById(memberId).orElseThrow(() -> new NotFoundException(UserErrorCode.USER_NOT_FOUND));

Performance performance = performanceRepository.findById(performanceId)
.orElseThrow(() -> new NotFoundException(PerformanceErrorCode.PERFORMANCE_NOT_FOUND));

boolean hasBookings = bookingRepository.existsBySchedulePerformanceId(performanceId);
if (hasBookings) {
throw new BadRequestException(PerformanceErrorCode.PERFORMANCE_DELETE_FAILED);
}

performanceRepository.delete(performance);
}
}
Loading

0 comments on commit 3e0c316

Please sign in to comment.