Skip to content

Commit

Permalink
admin to develop (#105)
Browse files Browse the repository at this point in the history
* feat: admin cicd 구축

* feat: cicd 환경변수 수정

* feat: ec2 username 수정

* feat: docker-compose url 수정

* feat aws login 추가

* feat: docker image name 수정

* feat: docker registry 수정

* feat: 환경변수 변경

* feat: Jar파일 재생성

* feat: jar 파일 수정

* feat: gradle clean build 설정

* feat: test 제외

* feat: local docker 확인 완료

* feat: registry login 구현

* feat: env 추가

* [SVR-46] 관리자 티켓 예매 내역 조회 (#59)

* feat: update Ticket transaction 내용 추가

* feat: 전체 티켓 페이지별 조회 구현

* feat: 티켓 상태별로 조회 구현

* feat: 사용자 이름별로 티켓 조회 API 구현

* feat: 전화번호로 검색 API 구현 완료

* feat:공연 날짜 필터로 검색 API 구현 완료

* feat: 유저 타입별로 검색 API 구현 완료

* feat: 생성일자로 티켓 조회 API 구현 완료

* feat: 수정일자로 검색 필터 API 구현 완료

* feat: 티켓 검색 필터 구현

* hotfix: Pagination 구현 내용 수정 (#60)

* feat: 매개변수 @ModelAttribute로 수정

* feat: 연,월,일만 입력받을 수 있도록 변경

* feat: showDate 입력 형식 변경

* feat: page 중복 속성 삭제

* [SVR-49] refactor: 티켓 타입별 조회 로직 리팩토링 (#61)

* [SVR-49] 티켓조회 기능 리팩토링

* [SVR-49] 예외 수정

* [SVR-48] 실시간 입장 내역 확인 api 추가 (#62)

* [SVR-48] 실시간 입장조회 기능 추

* [SVR-48] api 트래픽 제어 구현

* [SVR-48] aop로 수정

* [SVR-48] 횟수 증가

* [SVR-50] 트랜젝션 처리 추 (#63)

* feat: Service 코드 lazy loading error fix (#66)

* Revert "feat: Service 코드 lazy loading error fix (#66)" (#67)

This reverts commit 46ed1a2.

* [SVR-51] 티켓 전화번호 수정 및 마스킹 처리 (#68)

* feat: 티켓 검색 전화번호 뒷자리 4자리 수정 구현

* feat: showDate 다음날까지 조회되는 내용 수정 구현

* feat: Masking 구현

* feat: ticketResponse 마스킹 구현

* feat: 유저 탈퇴시에 예매 reservedCount 감소 구현 (#88)

* [SVR-66] 티켓 조회에 지인 응답 추가 (#85)

* Update README.md

* Update README.md

* �admin to develop (#64)

* feat: admin cicd 구축

* feat: cicd 환경변수 수정

* feat: ec2 username 수정

* feat: docker-compose url 수정

* feat aws login 추가

* feat: docker image name 수정

* feat: docker registry 수정

* feat: 환경변수 변경

* feat: Jar파일 재생성

* feat: jar 파일 수정

* feat: gradle clean build 설정

* feat: test 제외

* feat: local docker 확인 완료

* feat: registry login 구현

* feat: env 추가

* [SVR-46] 관리자 티켓 예매 내역 조회 (#59)

* feat: update Ticket transaction 내용 추가

* feat: 전체 티켓 페이지별 조회 구현

* feat: 티켓 상태별로 조회 구현

* feat: 사용자 이름별로 티켓 조회 API 구현

* feat: 전화번호로 검색 API 구현 완료

* feat:공연 날짜 필터로 검색 API 구현 완료

* feat: 유저 타입별로 검색 API 구현 완료

* feat: 생성일자로 티켓 조회 API 구현 완료

* feat: 수정일자로 검색 필터 API 구현 완료

* feat: 티켓 검색 필터 구현

* hotfix: Pagination 구현 내용 수정 (#60)

* feat: 매개변수 @ModelAttribute로 수정

* feat: 연,월,일만 입력받을 수 있도록 변경

* feat: showDate 입력 형식 변경

* feat: page 중복 속성 삭제

* [SVR-49] refactor: 티켓 타입별 조회 로직 리팩토링 (#61)

* [SVR-49] 티켓조회 기능 리팩토링

* [SVR-49] 예외 수정

* [SVR-48] 실시간 입장 내역 확인 api 추가 (#62)

* [SVR-48] 실시간 입장조회 기능 추

* [SVR-48] api 트래픽 제어 구현

* [SVR-48] aop로 수정

* [SVR-48] 횟수 증가

* [SVR-50] 트랜젝션 처리 추 (#63)

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* Revert "�admin to develop (#64)" (#65)

This reverts commit 044e66d.

* [SVR-52] 입금 링크 제공 re-merge (#70)

* feat : Events 엔티티에 depositUrl 필드 추가

* feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가

* feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)

* Revert "feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)"

This reverts commit b1444d7.

* Revert "feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가"

This reverts commit cb087b8.

* feat : TicketApi에 입금 링크 조회 api 명세 추가

* feat : TicketInfoService에서 ticketId를 가지고 depositUrl을 구하는 로직 작성

* feat : TicketController에서 getDepositUrl 메서드 구현

* test : 티켓에 대한 입금 계좌 링크를 찾는 테스트 케이스 추가

* feat : 티켓의 입금 계좌 링크를 구하는 로직 위치 변경 ticketInfoService(application) -> ticketService(domain)

* test : 로직 위치 변경에 따른 test 코드 수정

* feat : ticket 엔티티에 getDepositUrl 추가

디미터 법칙을 준수하여
다른 위치에서 티켓에 대한 입금 계좌 링크를 얻고자 할 때
event에 대한 의존을 없앨 수 있음

* feat : 입금 링크 정보 제공 중 티켓에 대한 유효성 검증 추가

입금 대기 중 상태가 아니면, 입금 링크를 제공하지 않음.

* feat : 입금 링크 정보 제공 중 티켓/유저에 대한 유효성 검증 추가

유저가 소유한 티켓이 맞는 지 확인함.

* test : 로직 이동으로 인한 TicketInfoServiceTest에서 티켓에_대한_입금_계좌_링크를_찾는다 테스트 케이스 삭제

* feat : Ticket의 getDepositUrl 메서드 제거

변경 가능성이 낮은 부분에 대한 캡슐화 제거

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* [SVR-53] 질의응답 도메인 작성 (#71)

* feat : 질의응답 도메인 모듈 생성(form-domain)

* feat : FormDto, SurveyDto 추가

* feat : FormDto, SurveyDto 추가

* feat : Survey 정보 제공 기능 추가

* feat : 응답 검증 및 저장 기능 추가

* feat : FormException이 BaseException을 상속하도록 변경

* feat : Form에서 answer 삭제

* feat : submitResponse 협력 과정 수정

String response의 map 형태가 아닌 Answer List를 받도록 함
Survey는 해당 answer를 적절한 form에게 전달
form은 해당 answer를 validatation 함

* feat : DropdownForm, DropdownAnswer 추가

* feat : Form, Answer -> TextForm, TextAnswer로 변경

* feat : Answer, Form 인터페이스 추가

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : validateAnswer에 타입 체크 추가

* feat : FormDto -> TextFormDto로 이름 변경

* feat : SurveyDto 추가, FormDtoMapper 이용

* feat : SurveyDtoTest 추가

* feat : repository 타입 교정

* feat : FormType 추가

* feat : FormType 추가

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* feat : 정보 제공 (SurveyDto를 통한) 기능 추가

* feat : 유저 응답에 대한 Answer 생성 및 검증, 저장 기능 추가

* style : Survey의 handleUserReponse -> createAnswers로 이름 변경

* feat : Answer를 JPA 엔티티로 등록, Id를 generated value로 설정 후 생성자에서 제거

* style : 불필요 import 문 삭제

* feat : Answer에 userId 추가

* feat : Answer 엔티티의 userId, formId 필드 -> Users user, Form form으로 변경(JPA)

* feat : Form을 JPA 엔티티로 변경

* feat : Survey를 JPA 엔티티로 변경 + form과의 관계 추가

* feat : repository들을 JPA repository로 변경

* feat : survey에서 event로 many to one 관계 추가

* feat : form 도메인에 user/event에 대한 의존성 추가

* feat : Survey와 Events 간의 관계를 1대1로 수정. Event를 주인으로 설정

* fix : Answer form에 대한 joinColumn이 잘못된 문제 수정

* file : Answer, Form 구현 클래스 삭제

* file : UserResponseDto -> FormResponseDto 이름 변경

* feat : answer 생성 책임 survey, form -> service

* feat : Option 엔티티 추가

* feat : Option 엔티티와 Form 엔티티를 N대1로 연결

* feat : Answer에서 타입에 따른 검증 로직 추가

* feat : submitResponse에 @transactional 추가

* file : FormDto 상속 관계 파일 삭제

* feat : OptionDto 추가 및 FormDto, SurveyDto 수정

* feat : Option 불필요 메서드 제거

* feat : Answer가 form이 가진 정보에 대해선 묻는 방식으로 validation 하도록 변경

* style : 불필요 import문 제거

* test : Dropdown 응답에 대한 테스트, Text 응답에 대한 테스트 추가

* test : FormService에 대한 테스트 추가

* fix : Event와 Survey 매핑 구문에 문제가 있던 점 수정

* chore : event-domain이 form-domain에 의존하도록 수정

* fix : mappedBy 구문 오류 수정

* fix : Option이 MySQL 예약어인 관계로 Options로 수정

* feat : FormException을 위한 ErroCode 추가 및 적용

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* feat: event에 해당하는 survey 조회 API 구현

* feat: survey 답변 작성 API 구현

* feat: test 코드 수정

* feat: swagger 예외 추가

* feat: Lazy loading 오류 fix

* feat: 불필요 event repository 로직 삭제

* feat: Survey 조회 swagger 예외 추가

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: 0703kyj <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* feat : searchAllTickets에서 answer 정보까지 불러오도록 수정

* feat : TicketSearchService로 로직 이동

* feat : @transactional 추가

* feat : TicketingResponse 추가 및 searchTickets 수정

* feat : ApplyMasking에 TicketingResponse의 마스킹 방식 등록

* feat : ApplyMasking의 typeValue에 TicketingResponse 등록

* feat : 티켓별 질의응답 결과를 FormAnswerDto를 통해 전달하도록 수정

* test : TicketSearchServiceTest 추가

* style : 주석 todo로 변경

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: sam971114 <[email protected]>
Co-authored-by: 0703kyj <[email protected]>

* fix : [SVR-72] answer를 찾을 수 없는 경우에 대한 예외처리 (#90)

* Update README.md

* Update README.md

* �admin to develop (#64)

* feat: admin cicd 구축

* feat: cicd 환경변수 수정

* feat: ec2 username 수정

* feat: docker-compose url 수정

* feat aws login 추가

* feat: docker image name 수정

* feat: docker registry 수정

* feat: 환경변수 변경

* feat: Jar파일 재생성

* feat: jar 파일 수정

* feat: gradle clean build 설정

* feat: test 제외

* feat: local docker 확인 완료

* feat: registry login 구현

* feat: env 추가

* [SVR-46] 관리자 티켓 예매 내역 조회 (#59)

* feat: update Ticket transaction 내용 추가

* feat: 전체 티켓 페이지별 조회 구현

* feat: 티켓 상태별로 조회 구현

* feat: 사용자 이름별로 티켓 조회 API 구현

* feat: 전화번호로 검색 API 구현 완료

* feat:공연 날짜 필터로 검색 API 구현 완료

* feat: 유저 타입별로 검색 API 구현 완료

* feat: 생성일자로 티켓 조회 API 구현 완료

* feat: 수정일자로 검색 필터 API 구현 완료

* feat: 티켓 검색 필터 구현

* hotfix: Pagination 구현 내용 수정 (#60)

* feat: 매개변수 @ModelAttribute로 수정

* feat: 연,월,일만 입력받을 수 있도록 변경

* feat: showDate 입력 형식 변경

* feat: page 중복 속성 삭제

* [SVR-49] refactor: 티켓 타입별 조회 로직 리팩토링 (#61)

* [SVR-49] 티켓조회 기능 리팩토링

* [SVR-49] 예외 수정

* [SVR-48] 실시간 입장 내역 확인 api 추가 (#62)

* [SVR-48] 실시간 입장조회 기능 추

* [SVR-48] api 트래픽 제어 구현

* [SVR-48] aop로 수정

* [SVR-48] 횟수 증가

* [SVR-50] 트랜젝션 처리 추 (#63)

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* Revert "�admin to develop (#64)" (#65)

This reverts commit 044e66d.

* [SVR-52] 입금 링크 제공 re-merge (#70)

* feat : Events 엔티티에 depositUrl 필드 추가

* feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가

* feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)

* Revert "feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)"

This reverts commit b1444d7.

* Revert "feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가"

This reverts commit cb087b8.

* feat : TicketApi에 입금 링크 조회 api 명세 추가

* feat : TicketInfoService에서 ticketId를 가지고 depositUrl을 구하는 로직 작성

* feat : TicketController에서 getDepositUrl 메서드 구현

* test : 티켓에 대한 입금 계좌 링크를 찾는 테스트 케이스 추가

* feat : 티켓의 입금 계좌 링크를 구하는 로직 위치 변경 ticketInfoService(application) -> ticketService(domain)

* test : 로직 위치 변경에 따른 test 코드 수정

* feat : ticket 엔티티에 getDepositUrl 추가

디미터 법칙을 준수하여
다른 위치에서 티켓에 대한 입금 계좌 링크를 얻고자 할 때
event에 대한 의존을 없앨 수 있음

* feat : 입금 링크 정보 제공 중 티켓에 대한 유효성 검증 추가

입금 대기 중 상태가 아니면, 입금 링크를 제공하지 않음.

* feat : 입금 링크 정보 제공 중 티켓/유저에 대한 유효성 검증 추가

유저가 소유한 티켓이 맞는 지 확인함.

* test : 로직 이동으로 인한 TicketInfoServiceTest에서 티켓에_대한_입금_계좌_링크를_찾는다 테스트 케이스 삭제

* feat : Ticket의 getDepositUrl 메서드 제거

변경 가능성이 낮은 부분에 대한 캡슐화 제거

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* [SVR-53] 질의응답 도메인 작성 (#71)

* feat : 질의응답 도메인 모듈 생성(form-domain)

* feat : FormDto, SurveyDto 추가

* feat : FormDto, SurveyDto 추가

* feat : Survey 정보 제공 기능 추가

* feat : 응답 검증 및 저장 기능 추가

* feat : FormException이 BaseException을 상속하도록 변경

* feat : Form에서 answer 삭제

* feat : submitResponse 협력 과정 수정

String response의 map 형태가 아닌 Answer List를 받도록 함
Survey는 해당 answer를 적절한 form에게 전달
form은 해당 answer를 validatation 함

* feat : DropdownForm, DropdownAnswer 추가

* feat : Form, Answer -> TextForm, TextAnswer로 변경

* feat : Answer, Form 인터페이스 추가

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : validateAnswer에 타입 체크 추가

* feat : FormDto -> TextFormDto로 이름 변경

* feat : SurveyDto 추가, FormDtoMapper 이용

* feat : SurveyDtoTest 추가

* feat : repository 타입 교정

* feat : FormType 추가

* feat : FormType 추가

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* feat : 정보 제공 (SurveyDto를 통한) 기능 추가

* feat : 유저 응답에 대한 Answer 생성 및 검증, 저장 기능 추가

* style : Survey의 handleUserReponse -> createAnswers로 이름 변경

* feat : Answer를 JPA 엔티티로 등록, Id를 generated value로 설정 후 생성자에서 제거

* style : 불필요 import 문 삭제

* feat : Answer에 userId 추가

* feat : Answer 엔티티의 userId, formId 필드 -> Users user, Form form으로 변경(JPA)

* feat : Form을 JPA 엔티티로 변경

* feat : Survey를 JPA 엔티티로 변경 + form과의 관계 추가

* feat : repository들을 JPA repository로 변경

* feat : survey에서 event로 many to one 관계 추가

* feat : form 도메인에 user/event에 대한 의존성 추가

* feat : Survey와 Events 간의 관계를 1대1로 수정. Event를 주인으로 설정

* fix : Answer form에 대한 joinColumn이 잘못된 문제 수정

* file : Answer, Form 구현 클래스 삭제

* file : UserResponseDto -> FormResponseDto 이름 변경

* feat : answer 생성 책임 survey, form -> service

* feat : Option 엔티티 추가

* feat : Option 엔티티와 Form 엔티티를 N대1로 연결

* feat : Answer에서 타입에 따른 검증 로직 추가

* feat : submitResponse에 @transactional 추가

* file : FormDto 상속 관계 파일 삭제

* feat : OptionDto 추가 및 FormDto, SurveyDto 수정

* feat : Option 불필요 메서드 제거

* feat : Answer가 form이 가진 정보에 대해선 묻는 방식으로 validation 하도록 변경

* style : 불필요 import문 제거

* test : Dropdown 응답에 대한 테스트, Text 응답에 대한 테스트 추가

* test : FormService에 대한 테스트 추가

* fix : Event와 Survey 매핑 구문에 문제가 있던 점 수정

* chore : event-domain이 form-domain에 의존하도록 수정

* fix : mappedBy 구문 오류 수정

* fix : Option이 MySQL 예약어인 관계로 Options로 수정

* feat : FormException을 위한 ErroCode 추가 및 적용

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* feat: event에 해당하는 survey 조회 API 구현

* feat: survey 답변 작성 API 구현

* feat: test 코드 수정

* feat: swagger 예외 추가

* feat: Lazy loading 오류 fix

* feat: 불필요 event repository 로직 삭제

* feat: Survey 조회 swagger 예외 추가

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: 0703kyj <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* [SVR-62]  유저 탈퇴시 예매 가능 티켓 수 증가 (#80)

* feat: 유저 탈퇴시 기존 티켓의 예매 가능 수 증가

* feat: reservation id 받도록 수정

* feat: ticket 조회시 reservation까지 한번에 가지고오도록 수정

* feat: surveyResponse에서 중복된 응답 항목 제거 (#84)

* [SVR-64] 티켓 기간 만료 및 입장 완료 예외 처리 (#81)

* feat: 티켓 취소시 취소,기간 만료 티켓 예외처리

* feat: user ticket 조회 시 만료된 티켓 예외처리

* feat: ticket cancel validation시에 입장 완료된 ticket 예외 처리

* feat: Ticket 조회 로직 변경에 따른 test 코드 로직 변경

* feat: repository query 수정

* [SVR-65] 약관 조회 API 추가 (#82)

* [SVR-65] 약관 도메인 세팅

* [SVR-65] 약관 조회 API 추가

* [SVR-65] BaseEntity 추가

* [SVR-65] 코드오너 추가

* [SVR-65] User 의존성 제거

* [SVR-65] 약관 동의 API 추가 (#83)

* [SVR-65] 약관 동의 API 추기

* [SVR-65] API Operation 수정

* [SVR-58] 공연 목록 조회 시 시작, 종료 일자 반환하도록 수정 (#76)

* [SVR-58] 공연 목록 조회 시 시작, 종료 일자 반환하도록 수정

* [SVR-58] 테스트 수정

* [SVR-58] 시작시간 반환하도록 수정

* [SVR-58] 시작시간 찾는 부분 메서드 분리

* [SVR-58] 테스트 수정

* [SVR-68] 약관 동의 API 에러 응답 문서화 (#86)

* hotfix: user 탈퇴시 유저 answer 삭제 (#87)

* hotfix: 카카오 로그인 시, 닉네임 활용하도록 수정

* hotfix: 약관 API 회원가입 예외 처리

* feat: form이 필수적인지 아닌지 boolean 변수를 추가했습니다. (#89)

* feat : findAnswerByFormIdAndUserId가 null을 반환했을 때 예외처리 추가

* feat : merge conflict 해결

* feat : findAnswerByFormIdAndUserId에서 Answer에 대한 예외 처리(Answer 존재여부, 필수 응답 질문)

* test : 테스트 반영

* test : 필수 응답에 대한 예외처리 추가

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: sam971114 <[email protected]>
Co-authored-by: 0703kyj <[email protected]>

* fix : [SVR-74] 예매 목록 조회 시 예외처리 수정 (#94)

* fix : Answer에 대한 예외처리를 예외 throw -> 빈 Answer 반환으로 수정

* feat : noAnswerDto의 response 값을 "" -> "미응답"으로 변경

* fix : AnswerDto에 response 값을 전달하지 않던 문제 수정

* [SVR-76] 티켓 입장 오류 수정 (#93)

- 상태 변하지 않던 오류
- 적절하지 않은 메세지

* [SVR-77] 티켓 상태 입장 완료로 변경 시 입장 시간 기록 추가 구현 (#95)

* feat: 유저 탈퇴시에 예매 reservedCount 감소 구현 (#88)

* [SVR-66] 티켓 조회에 지인 응답 추가 (#85)

* Update README.md

* Update README.md

* �admin to develop (#64)

* feat: admin cicd 구축

* feat: cicd 환경변수 수정

* feat: ec2 username 수정

* feat: docker-compose url 수정

* feat aws login 추가

* feat: docker image name 수정

* feat: docker registry 수정

* feat: 환경변수 변경

* feat: Jar파일 재생성

* feat: jar 파일 수정

* feat: gradle clean build 설정

* feat: test 제외

* feat: local docker 확인 완료

* feat: registry login 구현

* feat: env 추가

* [SVR-46] 관리자 티켓 예매 내역 조회 (#59)

* feat: update Ticket transaction 내용 추가

* feat: 전체 티켓 페이지별 조회 구현

* feat: 티켓 상태별로 조회 구현

* feat: 사용자 이름별로 티켓 조회 API 구현

* feat: 전화번호로 검색 API 구현 완료

* feat:공연 날짜 필터로 검색 API 구현 완료

* feat: 유저 타입별로 검색 API 구현 완료

* feat: 생성일자로 티켓 조회 API 구현 완료

* feat: 수정일자로 검색 필터 API 구현 완료

* feat: 티켓 검색 필터 구현

* hotfix: Pagination 구현 내용 수정 (#60)

* feat: 매개변수 @ModelAttribute로 수정

* feat: 연,월,일만 입력받을 수 있도록 변경

* feat: showDate 입력 형식 변경

* feat: page 중복 속성 삭제

* [SVR-49] refactor: 티켓 타입별 조회 로직 리팩토링 (#61)

* [SVR-49] 티켓조회 기능 리팩토링

* [SVR-49] 예외 수정

* [SVR-48] 실시간 입장 내역 확인 api 추가 (#62)

* [SVR-48] 실시간 입장조회 기능 추

* [SVR-48] api 트래픽 제어 구현

* [SVR-48] aop로 수정

* [SVR-48] 횟수 증가

* [SVR-50] 트랜젝션 처리 추 (#63)

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* Revert "�admin to develop (#64)" (#65)

This reverts commit 044e66d.

* [SVR-52] 입금 링크 제공 re-merge (#70)

* feat : Events 엔티티에 depositUrl 필드 추가

* feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가

* feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)

* Revert "feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)"

This reverts commit b1444d7.

* Revert "feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가"

This reverts commit cb087b8.

* feat : TicketApi에 입금 링크 조회 api 명세 추가

* feat : TicketInfoService에서 ticketId를 가지고 depositUrl을 구하는 로직 작성

* feat : TicketController에서 getDepositUrl 메서드 구현

* test : 티켓에 대한 입금 계좌 링크를 찾는 테스트 케이스 추가

* feat : 티켓의 입금 계좌 링크를 구하는 로직 위치 변경 ticketInfoService(application) -> ticketService(domain)

* test : 로직 위치 변경에 따른 test 코드 수정

* feat : ticket 엔티티에 getDepositUrl 추가

디미터 법칙을 준수하여
다른 위치에서 티켓에 대한 입금 계좌 링크를 얻고자 할 때
event에 대한 의존을 없앨 수 있음

* feat : 입금 링크 정보 제공 중 티켓에 대한 유효성 검증 추가

입금 대기 중 상태가 아니면, 입금 링크를 제공하지 않음.

* feat : 입금 링크 정보 제공 중 티켓/유저에 대한 유효성 검증 추가

유저가 소유한 티켓이 맞는 지 확인함.

* test : 로직 이동으로 인한 TicketInfoServiceTest에서 티켓에_대한_입금_계좌_링크를_찾는다 테스트 케이스 삭제

* feat : Ticket의 getDepositUrl 메서드 제거

변경 가능성이 낮은 부분에 대한 캡슐화 제거

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* [SVR-53] 질의응답 도메인 작성 (#71)

* feat : 질의응답 도메인 모듈 생성(form-domain)

* feat : FormDto, SurveyDto 추가

* feat : FormDto, SurveyDto 추가

* feat : Survey 정보 제공 기능 추가

* feat : 응답 검증 및 저장 기능 추가

* feat : FormException이 BaseException을 상속하도록 변경

* feat : Form에서 answer 삭제

* feat : submitResponse 협력 과정 수정

String response의 map 형태가 아닌 Answer List를 받도록 함
Survey는 해당 answer를 적절한 form에게 전달
form은 해당 answer를 validatation 함

* feat : DropdownForm, DropdownAnswer 추가

* feat : Form, Answer -> TextForm, TextAnswer로 변경

* feat : Answer, Form 인터페이스 추가

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : validateAnswer에 타입 체크 추가

* feat : FormDto -> TextFormDto로 이름 변경

* feat : SurveyDto 추가, FormDtoMapper 이용

* feat : SurveyDtoTest 추가

* feat : repository 타입 교정

* feat : FormType 추가

* feat : FormType 추가

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* feat : 정보 제공 (SurveyDto를 통한) 기능 추가

* feat : 유저 응답에 대한 Answer 생성 및 검증, 저장 기능 추가

* style : Survey의 handleUserReponse -> createAnswers로 이름 변경

* feat : Answer를 JPA 엔티티로 등록, Id를 generated value로 설정 후 생성자에서 제거

* style : 불필요 import 문 삭제

* feat : Answer에 userId 추가

* feat : Answer 엔티티의 userId, formId 필드 -> Users user, Form form으로 변경(JPA)

* feat : Form을 JPA 엔티티로 변경

* feat : Survey를 JPA 엔티티로 변경 + form과의 관계 추가

* feat : repository들을 JPA repository로 변경

* feat : survey에서 event로 many to one 관계 추가

* feat : form 도메인에 user/event에 대한 의존성 추가

* feat : Survey와 Events 간의 관계를 1대1로 수정. Event를 주인으로 설정

* fix : Answer form에 대한 joinColumn이 잘못된 문제 수정

* file : Answer, Form 구현 클래스 삭제

* file : UserResponseDto -> FormResponseDto 이름 변경

* feat : answer 생성 책임 survey, form -> service

* feat : Option 엔티티 추가

* feat : Option 엔티티와 Form 엔티티를 N대1로 연결

* feat : Answer에서 타입에 따른 검증 로직 추가

* feat : submitResponse에 @transactional 추가

* file : FormDto 상속 관계 파일 삭제

* feat : OptionDto 추가 및 FormDto, SurveyDto 수정

* feat : Option 불필요 메서드 제거

* feat : Answer가 form이 가진 정보에 대해선 묻는 방식으로 validation 하도록 변경

* style : 불필요 import문 제거

* test : Dropdown 응답에 대한 테스트, Text 응답에 대한 테스트 추가

* test : FormService에 대한 테스트 추가

* fix : Event와 Survey 매핑 구문에 문제가 있던 점 수정

* chore : event-domain이 form-domain에 의존하도록 수정

* fix : mappedBy 구문 오류 수정

* fix : Option이 MySQL 예약어인 관계로 Options로 수정

* feat : FormException을 위한 ErroCode 추가 및 적용

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* feat: event에 해당하는 survey 조회 API 구현

* feat: survey 답변 작성 API 구현

* feat: test 코드 수정

* feat: swagger 예외 추가

* feat: Lazy loading 오류 fix

* feat: 불필요 event repository 로직 삭제

* feat: Survey 조회 swagger 예외 추가

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: 0703kyj <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* feat : searchAllTickets에서 answer 정보까지 불러오도록 수정

* feat : TicketSearchService로 로직 이동

* feat : @transactional 추가

* feat : TicketingResponse 추가 및 searchTickets 수정

* feat : ApplyMasking에 TicketingResponse의 마스킹 방식 등록

* feat : ApplyMasking의 typeValue에 TicketingResponse 등록

* feat : 티켓별 질의응답 결과를 FormAnswerDto를 통해 전달하도록 수정

* test : TicketSearchServiceTest 추가

* style : 주석 todo로 변경

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: sam971114 <[email protected]>
Co-authored-by: 0703kyj <[email protected]>

* feat: 티켓 상태 변경 시에 입장 완료 변경할 경우 시간 기록

---------

Co-authored-by: nonaninona <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: 0703kyj <[email protected]>

* [SVR-79] 어드민 ZonedDateTime로 수정 (#97)

* feat: admin 재배포

* hotfix: 트랜젝션 추가

* [SVR-83] 관리자 티켓 조회시 중복 응답 예외처리 (#102)

* feat: 유저 탈퇴시에 예매 reservedCount 감소 구현 (#88)

* [SVR-66] 티켓 조회에 지인 응답 추가 (#85)

* Update README.md

* Update README.md

* �admin to develop (#64)

* feat: admin cicd 구축

* feat: cicd 환경변수 수정

* feat: ec2 username 수정

* feat: docker-compose url 수정

* feat aws login 추가

* feat: docker image name 수정

* feat: docker registry 수정

* feat: 환경변수 변경

* feat: Jar파일 재생성

* feat: jar 파일 수정

* feat: gradle clean build 설정

* feat: test 제외

* feat: local docker 확인 완료

* feat: registry login 구현

* feat: env 추가

* [SVR-46] 관리자 티켓 예매 내역 조회 (#59)

* feat: update Ticket transaction 내용 추가

* feat: 전체 티켓 페이지별 조회 구현

* feat: 티켓 상태별로 조회 구현

* feat: 사용자 이름별로 티켓 조회 API 구현

* feat: 전화번호로 검색 API 구현 완료

* feat:공연 날짜 필터로 검색 API 구현 완료

* feat: 유저 타입별로 검색 API 구현 완료

* feat: 생성일자로 티켓 조회 API 구현 완료

* feat: 수정일자로 검색 필터 API 구현 완료

* feat: 티켓 검색 필터 구현

* hotfix: Pagination 구현 내용 수정 (#60)

* feat: 매개변수 @ModelAttribute로 수정

* feat: 연,월,일만 입력받을 수 있도록 변경

* feat: showDate 입력 형식 변경

* feat: page 중복 속성 삭제

* [SVR-49] refactor: 티켓 타입별 조회 로직 리팩토링 (#61)

* [SVR-49] 티켓조회 기능 리팩토링

* [SVR-49] 예외 수정

* [SVR-48] 실시간 입장 내역 확인 api 추가 (#62)

* [SVR-48] 실시간 입장조회 기능 추

* [SVR-48] api 트래픽 제어 구현

* [SVR-48] aop로 수정

* [SVR-48] 횟수 증가

* [SVR-50] 트랜젝션 처리 추 (#63)

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* Revert "�admin to develop (#64)" (#65)

This reverts commit 044e66d.

* [SVR-52] 입금 링크 제공 re-merge (#70)

* feat : Events 엔티티에 depositUrl 필드 추가

* feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가

* feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)

* Revert "feat : TicketingResponse에 depositUrl 추가를 위해, TicketDto에 depositUrl 추가(builder set 구문에 추가)"

This reverts commit b1444d7.

* Revert "feat : CheckTicketDto에 depositUrl 추가, "from" static factory method에 depositUrl set 구문 추가"

This reverts commit cb087b8.

* feat : TicketApi에 입금 링크 조회 api 명세 추가

* feat : TicketInfoService에서 ticketId를 가지고 depositUrl을 구하는 로직 작성

* feat : TicketController에서 getDepositUrl 메서드 구현

* test : 티켓에 대한 입금 계좌 링크를 찾는 테스트 케이스 추가

* feat : 티켓의 입금 계좌 링크를 구하는 로직 위치 변경 ticketInfoService(application) -> ticketService(domain)

* test : 로직 위치 변경에 따른 test 코드 수정

* feat : ticket 엔티티에 getDepositUrl 추가

디미터 법칙을 준수하여
다른 위치에서 티켓에 대한 입금 계좌 링크를 얻고자 할 때
event에 대한 의존을 없앨 수 있음

* feat : 입금 링크 정보 제공 중 티켓에 대한 유효성 검증 추가

입금 대기 중 상태가 아니면, 입금 링크를 제공하지 않음.

* feat : 입금 링크 정보 제공 중 티켓/유저에 대한 유효성 검증 추가

유저가 소유한 티켓이 맞는 지 확인함.

* test : 로직 이동으로 인한 TicketInfoServiceTest에서 티켓에_대한_입금_계좌_링크를_찾는다 테스트 케이스 삭제

* feat : Ticket의 getDepositUrl 메서드 제거

변경 가능성이 낮은 부분에 대한 캡슐화 제거

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* [SVR-53] 질의응답 도메인 작성 (#71)

* feat : 질의응답 도메인 모듈 생성(form-domain)

* feat : FormDto, SurveyDto 추가

* feat : FormDto, SurveyDto 추가

* feat : Survey 정보 제공 기능 추가

* feat : 응답 검증 및 저장 기능 추가

* feat : FormException이 BaseException을 상속하도록 변경

* feat : Form에서 answer 삭제

* feat : submitResponse 협력 과정 수정

String response의 map 형태가 아닌 Answer List를 받도록 함
Survey는 해당 answer를 적절한 form에게 전달
form은 해당 answer를 validatation 함

* feat : DropdownForm, DropdownAnswer 추가

* feat : Form, Answer -> TextForm, TextAnswer로 변경

* feat : Answer, Form 인터페이스 추가

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : Survey를 Answer, Form 인터페이스에 맞춰 작성

* feat : validateAnswer에 타입 체크 추가

* feat : FormDto -> TextFormDto로 이름 변경

* feat : SurveyDto 추가, FormDtoMapper 이용

* feat : SurveyDtoTest 추가

* feat : repository 타입 교정

* feat : FormType 추가

* feat : FormType 추가

* hotfix: depositUrl lazy loading error fix (#72)

* feat: db url 수정

* feat: lazyLoading 관련 내용 수정

* feat : 정보 제공 (SurveyDto를 통한) 기능 추가

* feat : 유저 응답에 대한 Answer 생성 및 검증, 저장 기능 추가

* style : Survey의 handleUserReponse -> createAnswers로 이름 변경

* feat : Answer를 JPA 엔티티로 등록, Id를 generated value로 설정 후 생성자에서 제거

* style : 불필요 import 문 삭제

* feat : Answer에 userId 추가

* feat : Answer 엔티티의 userId, formId 필드 -> Users user, Form form으로 변경(JPA)

* feat : Form을 JPA 엔티티로 변경

* feat : Survey를 JPA 엔티티로 변경 + form과의 관계 추가

* feat : repository들을 JPA repository로 변경

* feat : survey에서 event로 many to one 관계 추가

* feat : form 도메인에 user/event에 대한 의존성 추가

* feat : Survey와 Events 간의 관계를 1대1로 수정. Event를 주인으로 설정

* fix : Answer form에 대한 joinColumn이 잘못된 문제 수정

* file : Answer, Form 구현 클래스 삭제

* file : UserResponseDto -> FormResponseDto 이름 변경

* feat : answer 생성 책임 survey, form -> service

* feat : Option 엔티티 추가

* feat : Option 엔티티와 Form 엔티티를 N대1로 연결

* feat : Answer에서 타입에 따른 검증 로직 추가

* feat : submitResponse에 @transactional 추가

* file : FormDto 상속 관계 파일 삭제

* feat : OptionDto 추가 및 FormDto, SurveyDto 수정

* feat : Option 불필요 메서드 제거

* feat : Answer가 form이 가진 정보에 대해선 묻는 방식으로 validation 하도록 변경

* style : 불필요 import문 제거

* test : Dropdown 응답에 대한 테스트, Text 응답에 대한 테스트 추가

* test : FormService에 대한 테스트 추가

* fix : Event와 Survey 매핑 구문에 문제가 있던 점 수정

* chore : event-domain이 form-domain에 의존하도록 수정

* fix : mappedBy 구문 오류 수정

* fix : Option이 MySQL 예약어인 관계로 Options로 수정

* feat : FormException을 위한 ErroCode 추가 및 적용

* [SVR-56] 입금 링크 제공 API 수정 - 명세 및 예외처리 추가 및 계좌 정보 제공 (#74)

* feat : DepositUrl이 존재하지 않는 경우 예외처리 추가

* feat : getDepositUrl에 대한 명세 수정

400 - TI0014
404 - TI0009, TI0015

에 대한 명세로 올바르게 수정

* feat : Events에 accountDetail 필드 추가

* feat : Events에 accountNumber, accountOwner 필드 추가

* feat : getDepositUrl -> getAccountInfo / String -> AccountInfoResponse

* feat : TicketService의 getDepositUrl -> getAccountInfo

* feat : TicketController의 getAccountInfo 구현

* feat : TicketController의 getAccountInfo 명세에서 TI0015 케이스 제거

* feat : getAccountInfo API 명세 @operation 내용 수정

* feat : Account 엔티티 추가

* feat : AccountRepository, AccountService 추가

* feat : account api 추가

* feat : 기존 구현 제거

* feat : @transactional read 추가

* feat : getAccount 명세 오류 케이스 수정

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* feat : 티켓팅 완료 시, 유저가 티켓 정보 조회 시, eventId를 함께 넘겨주도록 변경

* [SVR-57] 베너 RedirectUrl 추가 (#75)

* [SVR-61] 계좌정보 lazy loading 문제 수정 (#79)

* [SVR-61] 티켓금액 추가

* feat: 회원탈퇴 기능 구현 (#78)

* feat: event에 해당하는 survey 조회 API 구현

* feat: survey 답변 작성 API 구현

* feat: test 코드 수정

* feat: swagger 예외 추가

* feat: Lazy loading 오류 fix

* feat: 불필요 event repository 로직 삭제

* feat: Survey 조회 swagger 예외 추가

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: 0703kyj <[email protected]>
Co-authored-by: sam971114 <[email protected]>

* feat : searchAllTickets에서 answer 정보까지 불러오도록 수정

* feat : TicketSearchService로 로직 이동

* feat : @transactional 추가

* feat : TicketingResponse 추가 및 searchTickets 수정

* feat : ApplyMasking에 TicketingResponse의 마스킹 방식 등록

* feat : ApplyMasking의 typeValue에 TicketingResponse 등록

* feat : 티켓별 질의응답 결과를 FormAnswerDto를 통해 전달하도록 수정

* test : TicketSearchServiceTest 추가

* style : 주석 todo로 변경

---------

Co-authored-by: sam971114 <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: sam971114 <[email protected]>
Co-authored-by: 0703kyj <[email protected]>

* feat: 관리자 질의응답 answer 조회시 한가지만 반환

* feat: native query 활용해 결과 1개로 제한

---------

Co-authored-by: nonaninona <[email protected]>
Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: 0703kyj <[email protected]>

* [SVR-82] 예매 목록 관리 화면에서 결과를 주문 일시에 대해 내림차순으로 정렬 (#100)

* feat : 예매 목록 화면에서 PageRequest에 CreatedAt에 대해 내림차순(최신순) 정렬 요청을 추가

* feat : TicketSearcher에 내림차순 적용된 pageRequest를 넘기도록 수정

* hotfix: 입금자명 마스킹 제거

* hotfix: 어드민 이름 추가

* hotfix: 입금자명 마스킹 해제

* hotfix: 입금자명 수정

* hotfix: 입금자명으로 검색되도록 수정

* hotfix: 입금자명으로 검색되도록 수정

* hotfix: 입금자명으로 검색되도록 수정

* hotfix: test

* hotfix : admin 재배포

* feat: ticketResponse 인자 수정

* feat: duplicate-code delete

---------

Co-authored-by: Youngjun Kim <[email protected]>
Co-authored-by: nonaninona <[email protected]>
Co-authored-by: 0703kyj <[email protected]>
Co-authored-by: nonaninona <[email protected]>
  • Loading branch information
5 people authored Feb 16, 2025
1 parent ac073b5 commit ea8ce91
Show file tree
Hide file tree
Showing 58 changed files with 1,529 additions and 46 deletions.
2 changes: 2 additions & 0 deletions application/admin-app-api/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@ dependencies {
implementation project(":domain:ticket-domain")
implementation project(":domain:admin-auth-domain")
implementation project(":domain:user-domain")
implementation project(":domain:event-domain")
implementation project(":domain:form-domain")
}

tasks.named('test') {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

@SpringBootApplication
@ConfigurationPropertiesScan
@EnableAspectJAutoProxy
public class AdminApiApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.uket.app.admin.api.aop;

import com.uket.app.admin.api.dto.response.CustomPageResponse;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ApplyMasking {
Class<?> typeValue() default CustomPageResponse.class;
Class<?> genericTypeValue() default Void.class;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.uket.app.admin.api.aop;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LimitRequest {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.uket.app.admin.api.aop;

import com.uket.core.exception.BaseException;
import com.uket.core.exception.ErrorCode;
import io.github.bucket4j.Bandwidth;
import io.github.bucket4j.Bucket;
import java.time.Duration;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LimitRequestAspect {

private final Bucket bucket;

public LimitRequestAspect() {
Bandwidth limit = Bandwidth.simple(100, Duration.ofMinutes(1));
this.bucket = Bucket.builder()
.addLimit(limit)
.build();
}

@Before("@annotation(com.uket.app.admin.api.aop.LimitRequest)")
public void limitRequest() {
if(!bucket.tryConsume(1)){
throw new BaseException(ErrorCode.TOO_MANY_REQUEST);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.uket.app.admin.api.aop;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.uket.app.admin.api.enums.MaskingType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.ANNOTATION_TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Mask {
MaskingType type();

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package com.uket.app.admin.api.aop;

import com.uket.app.admin.api.dto.response.CustomPageResponse;
import com.uket.app.admin.api.dto.response.LiveEnterUserResponse;
import com.uket.app.admin.api.dto.response.TicketResponse;
import com.uket.app.admin.api.dto.response.TicketingResponse;
import com.uket.app.admin.api.exception.AdminException;
import com.uket.core.exception.ErrorCode;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;

import java.util.List;

@Aspect
@Component
public class MaskingAspect {

@Around("@annotation(applyMasking)")
public Object applyMaskingAspect(ProceedingJoinPoint joinPoint, ApplyMasking applyMasking) throws Throwable {
Object response = joinPoint.proceed();


if (response instanceof ResponseEntity<?> responseEntity) {
Object body = responseEntity.getBody();

if (body instanceof CustomPageResponse<?>) {
CustomPageResponse<?> maskedResponse = (CustomPageResponse<?>) applyMaskingUtil(applyMasking.typeValue(), body);
return ResponseEntity.status(responseEntity.getStatusCode()).headers(responseEntity.getHeaders()).body(maskedResponse);
}
}

throw new AdminException(ErrorCode.NOT_REGISTERED_TICKET_MASKING_TYPE);
}


private static <T> Object applyMaskingUtil(Class<T> clazz, Object response)
throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
if (response instanceof CustomPageResponse<?> customPageResponse) {
List<?> originalList = customPageResponse.content();
List<?> maskedList = applyMaskingUtilForList(clazz, originalList);

return new CustomPageResponse<>(
maskedList,
customPageResponse.pageNumber(),
customPageResponse.pageSize(),
customPageResponse.first(),
customPageResponse.last(),
customPageResponse.totalElements(),
customPageResponse.totalPages(),
customPageResponse.empty()
);
}
throw new AdminException(ErrorCode.NOT_REGISTERED_TICKET_MASKING_TYPE);
}

private static <T> List<T> applyMaskingUtilForList(Class<T> clazz, List<?> responseList)
throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
List<T> maskedList = new ArrayList<>();

for (Object item : responseList) {
if (clazz.isInstance(item)) {
T maskedItem = applyMaskingUtilForDto(clazz, item); // 각 객체에 대해 마스킹 적용
maskedList.add(maskedItem);
} else {
maskedList.add((T) item);
}
}

return maskedList;
}

private static <T> T applyMaskingUtilForDto(Class<T> clazz, Object response)
throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
if (response instanceof TicketResponse ticketResponse) {
return (T) ticketResponse.withMaskedValues();
} else if (response instanceof LiveEnterUserResponse liveEnterUserResponse) {
return (T) liveEnterUserResponse.withMaskedValues();
} else if (response instanceof TicketingResponse ticketingResponse) {
return (T) ticketingResponse.withMaskedValues();
}

throw new AdminException(ErrorCode.NOT_REGISTERED_TICKET_MASKING_TYPE);
}

}


Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.uket.app.admin.api.aop;

import com.uket.app.admin.api.enums.MaskingType;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MaskingUtil {
public static String MaskingOf(MaskingType maskType, String value){
return switch(maskType){
case NAME -> nameMaskOf(value);
case PHONE -> phoneNumberMaskOf(value);
};
}

private static String nameMaskOf(String value){
// 홍*동 마스킹
String regex = "(?<=.{1})(.*)(?=.$)";
String maskedValue = value.replaceFirst(regex, "*".repeat(value.length() - 2));
return maskedValue;
}

private static String phoneNumberMaskOf(String value){
// 010****1234 마스킹
String regex = "(\\d{3})(\\d{4})(\\d{4})";
Matcher matcher = Pattern.compile(regex).matcher(value.replaceAll("-", ""));
if (matcher.find()) {
return matcher.group(1) + "****" + matcher.group(3);
}
return value;
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
package com.uket.app.admin.api.controller;


import com.uket.app.admin.api.dto.CheckTicketingDto;
import com.uket.app.admin.api.dto.request.SearchRequest;
import com.uket.app.admin.api.dto.response.CustomPageResponse;
import com.uket.app.admin.api.dto.response.EnterShowResponse;
import com.uket.app.admin.api.dto.response.LiveEnterUserResponse;
import com.uket.app.admin.api.dto.response.TicketResponse;
import com.uket.app.admin.api.dto.response.TicketingResponse;
import com.uket.app.admin.api.dto.response.UpdateTicketStatusResponse;
import com.uket.app.admin.api.enums.TicketSearchType;
import com.uket.core.dto.response.ErrorResponse;
import com.uket.domain.ticket.enums.TicketStatus;
import io.swagger.v3.oas.annotations.Operation;
Expand All @@ -13,9 +21,12 @@
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@Tag(name = "어드민용 티켓 관리 API", description = "어드민용 티켓 관리 API")
Expand Down Expand Up @@ -68,7 +79,7 @@ public interface TicketApi {
"""
)
}, schema = @Schema(implementation = ErrorResponse.class)))
@GetMapping("/{token}/enter")
@PostMapping("/{token}/enter")
ResponseEntity<EnterShowResponse> enterShow(
@PathVariable("token") String ticketToken
);
Expand All @@ -79,4 +90,27 @@ ResponseEntity<UpdateTicketStatusResponse> updateTicketStatus(
@PathVariable("ticketId") Long ticketId,
@PathVariable("ticketStatus") TicketStatus ticketStatus
);

@Operation(summary = "전체 티켓 페이지별 조회 API", description = "전체 티켓을 페이지별로 조회합니다. 페이지는 1Page부터 시작합니다.")
@GetMapping("/search/all")
ResponseEntity<CustomPageResponse<TicketingResponse>> searchAllTickets(
@RequestParam(defaultValue = "1")int page,
@RequestParam(defaultValue = "10")int size
);

@Operation(summary = "티켓 검색 API", description = "다양한 기준으로 티켓을 페이지별로 조회합니다. 페이지는 1Page부터 시작합니다.")
@GetMapping("/search")
ResponseEntity<CustomPageResponse<TicketingResponse>> searchTickets(
@RequestParam TicketSearchType searchType,
@ModelAttribute SearchRequest searchRequest,
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size
);

@Operation(summary = "실시간 입장 내역 조회 API", description = "실시간 입장내역 조회를 합니다. 페이지는 1Page부터 시작합니다.")
@GetMapping("/live/enter-users")
ResponseEntity<CustomPageResponse<LiveEnterUserResponse>> searchLiveEnterUsers(
@RequestParam(defaultValue = "1") int page,
@RequestParam(defaultValue = "10") int size
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import java.io.StringWriter;
import java.nio.CharBuffer;
import java.security.InvalidParameterException;
import java.time.format.DateTimeParseException;
import java.util.Enumeration;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -52,6 +53,17 @@ ResponseEntity<ErrorResponse> handleAuthException(HttpServletRequest request,
.body(ErrorResponse.of(errorCode));
}

@ExceptionHandler(DateTimeParseException.class)
ResponseEntity<ErrorResponse> handleDateTimeParseException(HttpServletRequest request,
DateTimeParseException exception) {
ErrorCode errorCode = ErrorCode.INVALID_INPUT_DATE_VALUE;

log.warn("[DateTimeParseException] {}: {}", errorCode.getCode(), errorCode.getMessage(), exception);
return ResponseEntity
.status(HttpStatus.valueOf(errorCode.getStatus()))
.body(ErrorResponse.of(errorCode));
}

@ExceptionHandler(BaseException.class)
ResponseEntity<ErrorResponse> handleBaseException(HttpServletRequest request,
BaseException exception) {
Expand Down
Loading

0 comments on commit ea8ce91

Please sign in to comment.