Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: 가입시 인증 로직 테스트 코드 작성 #142

Merged
merged 1 commit into from
Sep 29, 2022

Conversation

mrlee7
Copy link
Contributor

@mrlee7 mrlee7 commented Sep 28, 2022

작업 내용

  • 문자 인증을 받는 부분의 인증 기능 테스트 작성 추가하였습니다.
    • 인증키를 받고, 해당 키로 인증 성공하는 것까지의 시나리오만을 인수테스트 진행하였습니다.
    • 단위 테스트 > 통합 테스트 > 인수 테스트 순으로 테스트 개수를 가지도록 하였습니다.
      • 마틴 파울러의 피라미드 를 따랐는데요, 인수테스트나 통합테스트가 무거워질수록 빌드타임에 영향을 끼칠듯 하여 서비스 레이어 테스트를 풍부하게 가는 기조로 작성했습니다.

AS-IS

스크린샷 2022-09-29 오전 12 33 47

TO-BE

스크린샷 2022-09-29 오전 12 33 33

주의 사항

  1. private 메소드를 테스트 하는 것에 대한 고민
    private method를 테스트 하는 것을 고민해보았습니다.
@DisplayName("인증키 생성시마다 랜덤한 문자열이 생성된다.")
@Test
void generateCertificationKey()
        throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {

    // given & when
    Method method = AuthService.class.getDeclaredMethod("generateCertificationKey");
    method.setAccessible(true);

    String actual1 = (String) method.invoke(authService);
    String actual2 = (String) method.invoke(authService);

    // then
    assertThat(actual1).isNotEqualTo(actual2);
}

private 메소드를 사용하는 public 메소드에서 충분한 검증이 이뤄져야 한다는 생각으로 귀결되어 private method 테스트는 진행하지 않았는데요, public이 아닌 메소드들의 테스트에 대해 어떤식으로 테스트를 할지 의견 부탁드리겠습니다 :)

  1. 라인 커버리지 100%?
    토스의 테스트 커버리지 영상을 보면, 100% 로 커버리지 목표를 잡은 이유가 상당히 reasonable해보입니다.
    다만, 라인 커버리지에서 벗어나 엣지 케이스를 어떤식으로 정립하고 테스트 코드를 작성할 것인가에 대해서는 아직 고민이 많습니다.. 이 부분도 정책으로 세울 수 있다면 같이 이야기해보아도 좋을 것 같아요 :) ( 아직도 테스트 코드 작성에 어려움이 많네요.. ㅎㅎ )

  2. 인증부랑 결합이 되어있는 SMS 테스트 고민
    이번에 인증쪽을 테스트 하면서 SMS도 Event(Pub-Sub) 구조로 결합도를 떨어뜨리면서 같이 테스트를 진행하려 하였습니다.
    -> 이슈
    Auth 도메인이랑 Order 도메인에 SMS가 결합되어있는데, Topic별로 관리하는 것에 어려움이 있어 삽질을 좀 깊게 하고 있습니다.
    도메인 별로 Pub-Sub Topic을 관리하는 방법에 대한 고민이 필요하여, 후순위로 미뤄두겠습니다. ( 좋은 의견이 있다면 부탁드립니다 🙏 )

  3. 테스트 공통 부분
    ControllerTest나 AcceptanceTest 작성시 공통으로 사용되는 부분이 많아보여요 !
    추상 클래스로 빼는 등의 리팩토링을 추후 같이해보면 어떨까요 ! ;)

Reference

PR 체크리스트

  • 테스트는 모두 통과했나요?
  • 빌드는 성공했나요?
  • 코드 포맷팅을 진행했나요?

@mrlee7 mrlee7 requested a review from joelonsw September 28, 2022 15:48
@mrlee7 mrlee7 self-assigned this Sep 28, 2022
@sonarqubecloud
Copy link

Kudos, SonarCloud Quality Gate passed!    Quality Gate passed

Bug A 0 Bugs
Vulnerability A 0 Vulnerabilities
Security Hotspot A 0 Security Hotspots
Code Smell A 0 Code Smells

No Coverage information No Coverage information
0.0% 0.0% Duplication

Copy link
Contributor

@joelonsw joelonsw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테스트 잘 써주셔서 딱히 건드릴게 없네요! 좋습니다! 💪 질문해주신거 같이 얘기해보죠

  1. private 메서드는 테스트 할 필요 없다고 생각합니다. 아래 레퍼런스로 남겨주신 스택오버플로우에서 처럼 private 메서드를 테스트 할라고 억지로 지지고 볶는건 캡슐화를 깨뜨리는 행위로 볼 수 있어요. 물론 참고로 써주신 리플렉션을 활용하여 코드를 실행할 수는 있겠지만, 안하는게 좋을 것 같아요. 감춘것은 감췄을 때 의미를 가지니까요.

    • 만~약에 'private 메서드를 테스트 해봐야할 것 같은데?' 라는 생각이 든다면 프로덕션 코드를 쪼꼼 수정해야하는 신호가 아닌가 생각해볼 것 같긴하네요. 해당 메서드를 다른 클래스로 따로 빼서 public 접근자를 갖도록 리팩터링 해보는 방향도 생각해볼 것 같아요.
    • 예시로 주신 AuthService의 generateCertificationKey()를 볼까요?
    private String generateCertificationKey() {
        return RandomStringUtils.randomNumeric(6);
    }
    • 아 이거 테스트하고 싶어! 해서 리플렉션을 써서 테스트를 해볼 수도 있어요.
    • 하지만 그전에 이걸 왜 private으로 해뒀는지 생각해봅시다.
    • 인증에 쓰일 길이 6짜리 문자열을 만드는 기능을 굳이 public으로 해둘 필요가 없어서겠죠?
    • 우리 한 번 객체지향적으로 생각해봅시다. AuthService의 책임은 무엇일까요? Connectable 서비스의 인증 절차를 똑바로 잘 수행하는게 AuthService의 책임일거에요.
    • 그렇다면, 랜덤하게 길이가 6짜리 String을 만드는게 과연 AuthService의 책임이라고 할 수 있을까요? 전 아니라고 보긴합니다. AuthService의 책임은 인증을 위한 문자열을 이를 레디스에 저장하여 나중에 인증을 할 때 체크하는 책임/역할을 가지긴 하지만, 랜덤한 문자열을 만드는 역할은 가지고 있을 필요가 없어요.
    • 제가 저번에 connectable.global.common.util 패키지에 랜덤 스트링을 생성하는 RandomStringUtil 클래스를 활용해보는걸 살짝 제안드렸는데요. 그때도 아마 문자열 생성의 책임은 Service단에 있을 필요가 없다고 판단해서 였을 겁니다. 또한 해당 클래스를 사용하면 문자열 생성되는건 public으로 열어둘테니 테스트하기도 용이하겠죠.
    • 물론! 책임이라는 단어는 굉장히 주관적이기 때문에 얘기하는 사람마다 다를수 있어요. 인증에 쓰일 문자열 만드는 것도 온전히 AuthService의 책임이다~ 라고 하면 할말은 없는거죠. 하지만 Private 메서드 테스트에 대한 애기가 나와서 제 생각 한 번 공유드립니다.
  2. 라인 커버리지 100%

    • 이런 장점을 얘기하신 것 같네요.
      • 자신있게 누를수 있는 배포버튼
      • 거침없는 리팩터링
      • 불필요한 프로덕션 코드 사라짐
      • 프로덕션 코드에 대한 이해도 상승
      • 점점 쉬워지는 테스트 작성
    • 전 개인적으로 해당 이점은 커버리지 80%만 되어도 충분하다고 보긴합니다.
    • DTO 이런거 다 테스트 해야 100프로가 될텐데,, 전 조꼼 소모적이지 않나 생각해보긴합니다.
    • 물론 고고익선인건 동의합니다!
  3. Event Pub-Sub 빡세죠. 나중에 필요하면 같이 페어 프로그래밍 해보죠!

  4. 좋습니다. 추후에 공통으로 빼시죠!

classes = {SecurityConfiguration.class, JwtAuthenticationFilter.class})
})
@MockBean(JpaMetamodelMappingContext.class)
class AuthControllerTest {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

컨트롤러 테스트 좋네요...! 응답을 간결하게 확인하기 좋아보입니다 굿

@mrlee7 mrlee7 merged commit 1c5c4fb into Team-UACC:develop Sep 29, 2022
joelonsw added a commit that referenced this pull request Oct 11, 2022
* feat: 유저 정보 조회 (#1)

* feat: 유저 엔티티 생성

* feat: 유저 조회 요청 구현

* feat: Spring Security 설정

* test: UserController에 대한 테스트 작성

* feat: queryDsl 적용 (#2)

* feat: QueryDsl 초기 설정

* style: import 정리

* feat: pr 템플릿 구성 (#3)

* feat: jwt 토큰 생성 및 클레임 추출 (#4)

* feat: 유저 토큰 발행기능

* feat: 유저 토큰 검증

* feat: 토큰 데이터 속성 추출

* feat: 유저 탈퇴 기능 추가 (#5)

* feat: klip 로그인 구현 (#6)

* feat: klip 로그인 초기 설정 구현

* feat: klip 로그인 구현

* test: klip 로그인에 대한 UserService 테스트 작성

* feat: Cors 이슈 수정 (#7)

* feat: 크로스도메인 이슈 해결

* feat: 크로스도메인 이슈 수정

* feat: AWS ParameterStore 기능 추가 (#8)

* feat: AWS ParameterStore 기능 추가

* feat: Jwt 설정 추가

* fix: aws parameter-store 의존성 버전 수정 (#9)

* fix: aws parameterStore 의존성 버전 수정

* fix: 활성환경 dev->local 수정

* fix: Klip 로그인만 수행한 유저에 대해 isActive 값 상이하게 지정 (#10)

* fix: WebConfigure 경로 수정 (#11)

* feat: spring security 초기 설정 (#12)

* feat: CustomUserDetailsService 구현

* feat: JwtAuthenticationFilter 구현

* feat: spring security 구현

* refactor: ConnectableUserDetail로 user 가져오도록 수정

* feat: 유저 수정 기능 추가 (#13)

* feat: 유저 수정 기능 추가

* feat: 사용하지 않는 Transactional 패키지 제거

* fix: user 도메인 npe 수정 (#14)

* fix: cors methods 추가 (#15)

* fix: 스프링 시큐리티 Options 설정 (#16)

* fix: write connection 트랜잭셔널 어노테이션 추가 (#18)

* feat: 이벤트 목록 조회 (#17)

* feat: 이벤트 목록 조회

* feat: LocalDateTime->TimeStamp 변환을 Dto 내에서 하도록 수정

* feat: ticket 엔티티 구현 및 dataLoader 도입 (#19)

* fix: transactional ReadOnly 속성 삭제 (#20)

* feat: exception global 처리 추가 (#21)

* fix: 유저 상세 조회시 status 추가 (#22)

* fix: modify user transactional 선언 (#23)

* feat: 유저 수정 기능 queryDsl로 변경 (#24)

* feat: events detail (#25)

* feat: 이벤트 상세 조회 기능 추가

* feat: Artist 도메인 추가 및 Event연관관계 매핑

* refactor: DB Trans 오브젝트 경로 변경

* feat: 이벤트 조회 api (#26)

* feat: 이벤트에 속한 티켓 리스트 조회

* feat: 이벤트에 속한 티켓 상세 정보 조회

* test: 이벤트 티켓 리스트 & 티켓 상세 조회 통합 테스트 코드

* feat: 유저 소유 티켓 목록 조회 기능 추가 (#27)

* fix: 프론트 요구 명세에 따라 status 필드 추가 (#28)

* fix: QA 수정사항(타임스탬프 변환, artistImage필드 추가, 더미데이터 추가) (#29)

* fix: 티켓 메타데이터 null로 내려오는 이슈 수정 (#30)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: 유저 소지한 티켓데이터 내 티켓메타데이터 필드 null 현상 수정 (#31)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: /users/tickets 엔드포인트 티켓 메타데이터 수정

* feat: KasService 구현 (#32)

* build: KAS 설정을 위한 세팅

* feat: KasService 사용을 위한 Dto 생성

* feat: KasException 생성

* feat: KasService 생성

* build: yml 설정값 부여

* feat: DataLoader 정보 추가

* refactor: builder 어노테이션 생성자에 붙이도록 수정

* refactor: 티켓 도메인 쿼리 인덴트 수정 및 QueryProjection 적용, User metadata fix (#33)

* fix: 티켓 메타데이터 dto 도입 (#34)

* fix: tokenId로 KAS 접근하도록 수정 (#35)

* feat: 유저 수정 request dto 검증 기능 (#37)

* feat: 유저 수정 request dto 검증 기능

* fix: 닉네임 검증로직 및 문구 수정

* refactor: KAS API 수정 (#36)

* refactor: dto 패키지 구조 변경

* build: kas 관련 yml 설정 변경

* fix: dataloader 설정값 변경

* fix: 유저 아티스트명 필드 누락 수정 (#38)

* feat: nickname validation 도입 (#39)

* refactor: onSale 필드를 TicketSalesStatus로 변경 (#41)

* refactor: SalesOption을 EventSalesOption으로 수정

* refactor: onSale 필드를 TicketSalesStatus로 변경

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링 (#40)

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링

* fix: HttpStatus INTENAL_SERVER_ERROR -> BAD_REQUEST 변경

* refactor: service 레이어 Mapper 사용하여 DTO 변환 및 컨트롤러 ResponseEntity 변경 (#42)

* feat: api 문서화 (#43)

* feat: api 문서화

* refactor: global/config 패키지로 이동

* fix: ticketSalesStatus null 로 내려오는 현상 수정 (#45)

* feat: 주문 등록 기능 API 추가 (#44)

* feat: 티켓 예매 폼 제출 api

* refactor: 이력관리를 위한 Baseentity 추가 및 Order 테이블 예약어 이슈

* test: OrderService 테스트코드

* refactor: ManyToOne 에서 연관관계 OneToMany로 변경

* fix: 주문 상태 등록시 상태 메시지 변경 (#46)

* refactor: order와 orderDetail를 양방향으로 수정 (#47)

* refactor: order와 orderDetail를 양방향으로 수정

* fix: 깨지는 테스트 수정

* refactor: TicketMetadata hashcode/equals 정의 (#48)

* fix: dataloader 로직 오류 수정 (#49)

* fix: dataloader 로직 오류 수정

* refactor: TicketSalesStatus Expired 상태 추가

* fix: KLIP 주소를 소문자로 통일 (#51)

* refactor: contractAddress 추가 (#52)

* feat: �어드민을 통한 OrderDetail 상태 변경 기능 구현 (#50)

* feat: OrderDetail 도메인 로직 추가

- orderStatus 상태변경 enum으로 관리
- 연관관계를 가진 엔티티의 필드 getter를 OrderDetail 자체의 getter로 추상화

* feat: Admin 엔드포인트 작성

* feat: Admin 서비스 구현

* refactor: 엔드포인트 patch 요청으로 변경

* feat: admin 토큰 검증 로직 구현 (#53)

* feat(JwtProvider): 어드민 토큰 검증 기능 구현

* feat: 어드민 토큰 Filter 적용

* fix: 티켓 전송 엔티티 반영 로직 추가 (#54)

* feat: TicketSalesStatus 정보 동기화 (#55)

* feat: 티켓 주문시 Pending으로 상태 변경

* feat: OrderStatus에 따른 TicketSalesStatus 정보 업데이트

* refactor: KAS를 통해 사용자 티켓 정보 조회 (#57)

* feat(EventRepository): contract 주소 추출 기능 구현

* refactor: KAS를 통해 사용자의 티켓을 가져오도록 수정

* fix: KasService 비동기 예외처리

* feat: ID 기반으로 엔티티 equals/hashcode 재정의

* feat: Cron job으로 판매 종료된 이벤트의 티켓들 EXPIRED 처리 (#56)

* feat: 만료일자 지난 티켓에 대하여 판매 중지처리

* refactor: 사용하지 않는 패키지 제외

* fix: 스케줄러 패키지 경로 변경

* fix: scheduledTask Component 등록

* fix: dataloader 설정 재정의 (#58)

* fix: dataloader 설정 재정의

* fix: TicketRepository implements 재정의

* build: yml ddl-auto 값 파라미터 스토어로 이전

* feat: 거래 내역 조회 api (#59)

* feat: 거래 내역 조회 api

* refactor: 불필요한 개행 제거

* fix: 쿼리 수정 및 ticketMetadata 필드 추가

* feat: dataloader에서 새로운 nft 발행기능 구현 (#60)

* feat(KasService): alias로 컨트랙트 정보 가져오는 기능 구현

* feat(S3Service): tokenUri로 부터 metadata를 가져오는 기능 구현

* feat(TicketMetadataResponse): Dto에서 TicketMetadata로 변환해주는 메서드 구현

* refactor: 새로운 nft 민팅 기능 구현

* fix(S3ServiceTest): 깨지는 테스트 수정 (#61)

* fix: totalTicketCount 잘못 내려오는 현상 수정 (#62)

* fix: timestamp 필드 변환 수정 (#64)

* fix: 주문자명 정규식 검증 제거 (#65)

* feat: path, token 로깅 (#66)

* feat: 티켓 및 이벤트 정렬 (#67)

* fix: 티켓 정렬 순서 변경 (#68)

* feat: 주문 신청시 request 로그 슬랙알림 (#69)

* fix: get user 로직 수정 (#70)

* refactor: 예외 처리 전략 수립 (#71)

* feat: 예외 처리 전략 수립

* test: 깨지는 테스트 수정

* feat: 전역 Exception 핸들러 추가

* feat: 주문 상세 내역 필드 추가 (#72)

* feat: Opensea Collection Url 추가 (#73)

* refactor: 트랜잭션 어노테이션 정책에 따라 변경 및 단건 더티체킹 (#74)

* refactor: 유저 변경 트랜잭션 전파 설정 변경 (#75)

* fix: 유저 수정 queryDsl 로 변경 (#76)

* feat: 로깅 전략 수립 (#77)

* refactor: user details 수정 (#78)

* feat(ConnectableUserDetails): UserDetails가 klaytnAddress를 가지고 있도록 수정

* refactor(UserService): 서비스 내에서 user를 조회하도록 수정

* refactor(OrderService): 서비스 내에서 user를 조회하도록 수정

* test: 깨지는 테스트 수정

* build: local profile console logging 추가

* feat: ConnectableSecurityException 정의

* refactor(JwtProvider): try-catch를 통한 검증로직 추가

* style(SecurityConfiguration): configure 로직별 개행 추가

* feat(JwtAuthenticationFilter): try-catch 추가

* feat: 유저 인수테스트 추가 (#79)

* feat: 유저 인수테스트 추가

* fix: success 필드 직렬화되는 현상 수정

* refactor: 정책에 따라 fetchType 명시 제거 (#80)

* refactor: swagger 설정 변경 (#81)

* feat: swagger 설정

* refactor: ApiImplicitParam 어노테이션 제거

* feat: 전역 헤더 요청 값 추가

* fix: swagger uri 설정 (#82)

* feat: prod 환경 yaml 설정 (#83)

* feat: 인프라 관련 file 추가 (#84)

* fix: bash 쉘 오류 확인 여부 (#85)

* feat: plainjar 삭제 (#86)

* fix: region 명시 (#87)

* fix: region 변경 (#88)

* fix: task 강제 업데이트 되도록 수정 (#89)

* fix: Jenkinsfile 브랜치별 분기 (#90)

* fix: Jenkinsfile 문법 수정 (#91)

* fix: jenkinsfile 문법 수정 (#92)

* fix: Jenkinsfile 문법 수정 (#93)

* refactor: dockerfile profile 적용 (#94)

* fix: prod환경 log path 수정 (#96)

* feat: flyway 도입 (#99)

* feat: flyway 적용

* feat(Ticket): isUsed 필드 추가

* feat: ticket user 연관관계 제거

* style: 안쓰는 import 제거

* feat: fk 네이밍 컨벤션 확립

* refactor: TicketResponse isUsed 필드 추가 (#100)

* refactor: TicketResponse isUsed 필드 추가

* fix: EventMapper가 isUsed 필드 가져오도록 수정

* refactor: DB에서 ContractName을 가지도록 수정 (#101)

* refactor(Event): ContractName DB에 저장하도록 수정

* refactor(EventMapper): ticketToResponse ownedBy 필드 무시하도록 수정

* feat: 입장 처리를 위한 입장 정보 생성 (#103)

* feat: 입장 처리를 위한 입장 정보 생성 로직 구현

* refactor: RedisHash 값 부여

* feat: 회원가입 문자 인증 기능 (#104)

* feat: 회원가입 문자 인증 기능

* fix: ResponseEntity로 응답처리 및 apiDomain static final

* fix: RedisConfig 충돌해결 (#105)

* feat: 티켓 입장 기능 구현 (#106)

* feat: 티켓 입장 API 구현

* refactor(Ticket): useToEnter 네이밍 변경

* test: 티켓 입장 관련 테스트 작성

* fix: 티켓 사용 여부 로직에 Transactional 추가 (#107)

* fix: 티켓 사용 여부 로직에 Transactional 추가

* test(UserServiceTest): 티켓 업데이트 테스트 수정

* chore: 인증 메시지 문구 수정 (#108)

* feat: 컨트랙트 발행 및 토큰 민팅 기능 구현 (#110)

* �fix: nurigo exception추가 및 insert쿼리 작성 (#111)

* fix: exception error 로그 삽입 및 insert query 추가

* fix: 안쓰는 패키지 정리

* fix: event insert query 삭제

* fix: 컨트랙트 배포 로직 수정 (#112)

* fix: eventSalesOption -> salesOption (#114)

* fix: event 테이블 필드명 변경 (#116)

* feat: 무작위 티켓 구매 로직 구현 (#118)

* fix: 유저 토큰 조회시 id와 uri 검증하도록 수정 (#120)

* feature: 이벤트입장 로그 기록 (#122)

* feat: spotless 적용하여 코드 포맷팅 (#123)

* feat: new artist for letslock (#124)

* fix: 아티스트명, 이미지 변경 (#125)

* fix: 이벤트 노출 순서 변경 (#127)

* fix: artistname 변경 (#129)

* fix: artistname 변경

* fix: 아티스트 이미지 변경

* fix: 이미지 url 변경

* fix: 이미지 url 변경_Retry

* fix: HandlerMethodArgumentResolverComposite이슈 수정 (#131)

* feat: 이벤트 목록 조회 순서 변경 (#132)

* feat: 이벤트 목록 조회 순서 변경

* fix: event조회 함수명 추가 및 repository 테스트 코드 추가

* refactor: KasService 제네릭 적용 및 리팩터링 (#133)

* feat: KasContractService, KasTokenService 분리

* refactor(KasWebClient): Http 요청에 따른 제네릭 Mono 반환하도록 수정

* feat(KasUrlGenerator): Kas에 사용되는 URL 관리하는 유틸 클래스 생성

* test: KasService 테스트 작성 (#134)

* refactor: url 생성을 인터페이스로 분리

* refactor: 유저 토큰 전체 조회 메서드 네임 변경

* build: MockServer 도입

* refactor(KasService): getMyContractByAlias로 메서드 네이밍 변경

* refactor: KasException 구성 변경

* test: KasService Mocking 서버 도입

* style: 코드 포맷팅

* fix(KasTokenService): HashMap 동시성 이슈로 ConcurrentHashMap으로 대체

* build: mockServerVersion buildscript에 명시

* refactor: KasMockConfig 도입

* refactor(KasServiceTestWithTestnet): 자동화 테스트 Disabled 설정

* feat: 티켓 구매시 문자 발송 (#135)

* feat: 티켓 구매시 문자 발송

* refactor: smsService 메시지 부분 리팩토링 및 local 민감 정보 aws parameter store 이용

* fix: 오타 수정 및 초기화 수정

* refactor: sms 메시지 설정부 분리

* update: issue templates (#137)

* refactor: 로컬 KAS 파라미터 스토어 도입 (#138)

* refactor: 로컬 KAS 정보 파라미터 스토어 도입

* refactor: 콘솔 로깅 쓰레드 정보 기입

* fix: tokenId 랜덤값 증가

* test: Klaytn 관련 테스트 작성 (#141)

* test: Klip 테스트 작성

* test: Kas 테스트 보충

* test(KlipServiceTest): 안 쓰는 변수 삭제

* test: 가입시 인증 로직 테스트 코드 작성 (#142)

* test: artist 패키지 테스트 작성 (#143)

* fix: Http Keep-Alive 설정 부여 (#140)

* test: Security 패키지 테스트 작성 (#144)

* refactor: 시큐리티 패키지 구조 세분화

* refactor: CustomUserDetails 추상 클래스 도입

* test: Security 테스트 작성

* test: Security 테스트 작성

* test: Global 패키지 테스트 작성 (#145)

* test: Global 패키지 테스트 작성

* refactor(DateTimeUtil): 생성자 막음

* feat: Awaitility를 도입한 테스트 작성

* refactor: redisDao로 네이밍 변경

* OrderConteollerTest 추가 (#147)

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

* test: EventService 테스트 (#146)

* test: EventService 테스트

* test: 종속된 티켓이 없는 경우 이벤트 상세조회 케이스 추가

* fix: 티켓없는 이벤트 상세 조회 가능하도록 쿼리 수정

* test: KasService Mocking 후 티켓 테스트 케이스 추가

* chore: ToDo 제거

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

* refactor: AdminService 테스트 및 구조 개선 (#148)

* refactor: AdminOrderService 도입

* test: 도메인 픽스쳐 도입

* test: EventIssueRequest 제약 조건 테스트 작성

* test(AdminServiceTest): 이벤트 발행 테스트 작성

* feat: WaitUtil 도입

* feat: 어드민 서비스 테스트 작성

* fix: valid 어노테이션 추가

* refactor: common/util -> util 패키지 네임 변경

* refactor: restTemplate 공통 구현

* fix: SecureRandom 도입

* build: jacoco 도입 (#149)

* test: user controller 테스트 (#151)

* test: user-controller test 코드 추가

* refactor: 미사용 엔드포인트 제거(service, repository 이력관리를 위해 남겨둠)

* test: Bad Request test 추가 및 ticket 도메인 테스트

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

* test: 어드민 인수테스트 작성 (#152)

* docs(Readme): 문서 초안 작성 (#153)

* docs(Readme): 문서 초안 작성

* fix(Readme): 아키텍처 부분 삭제 및 API 문서화 추가

* docs(Readme): requirements 삭제

* docs(Readme): IDE에서 발췌한 ERD로 변경

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

Co-authored-by: mrlee7 <[email protected]>
Co-authored-by: jungpil98 <[email protected]>
mrlee7 added a commit that referenced this pull request Oct 12, 2022
* feat: 유저 정보 조회 (#1)

* feat: 유저 엔티티 생성

* feat: 유저 조회 요청 구현

* feat: Spring Security 설정

* test: UserController에 대한 테스트 작성

* feat: queryDsl 적용 (#2)

* feat: QueryDsl 초기 설정

* style: import 정리

* feat: pr 템플릿 구성 (#3)

* feat: jwt 토큰 생성 및 클레임 추출 (#4)

* feat: 유저 토큰 발행기능

* feat: 유저 토큰 검증

* feat: 토큰 데이터 속성 추출

* feat: 유저 탈퇴 기능 추가 (#5)

* feat: klip 로그인 구현 (#6)

* feat: klip 로그인 초기 설정 구현

* feat: klip 로그인 구현

* test: klip 로그인에 대한 UserService 테스트 작성

* feat: Cors 이슈 수정 (#7)

* feat: 크로스도메인 이슈 해결

* feat: 크로스도메인 이슈 수정

* feat: AWS ParameterStore 기능 추가 (#8)

* feat: AWS ParameterStore 기능 추가

* feat: Jwt 설정 추가

* fix: aws parameter-store 의존성 버전 수정 (#9)

* fix: aws parameterStore 의존성 버전 수정

* fix: 활성환경 dev->local 수정

* fix: Klip 로그인만 수행한 유저에 대해 isActive 값 상이하게 지정 (#10)

* fix: WebConfigure 경로 수정 (#11)

* feat: spring security 초기 설정 (#12)

* feat: CustomUserDetailsService 구현

* feat: JwtAuthenticationFilter 구현

* feat: spring security 구현

* refactor: ConnectableUserDetail로 user 가져오도록 수정

* feat: 유저 수정 기능 추가 (#13)

* feat: 유저 수정 기능 추가

* feat: 사용하지 않는 Transactional 패키지 제거

* fix: user 도메인 npe 수정 (#14)

* fix: cors methods 추가 (#15)

* fix: 스프링 시큐리티 Options 설정 (#16)

* fix: write connection 트랜잭셔널 어노테이션 추가 (#18)

* feat: 이벤트 목록 조회 (#17)

* feat: 이벤트 목록 조회

* feat: LocalDateTime->TimeStamp 변환을 Dto 내에서 하도록 수정

* feat: ticket 엔티티 구현 및 dataLoader 도입 (#19)

* fix: transactional ReadOnly 속성 삭제 (#20)

* feat: exception global 처리 추가 (#21)

* fix: 유저 상세 조회시 status 추가 (#22)

* fix: modify user transactional 선언 (#23)

* feat: 유저 수정 기능 queryDsl로 변경 (#24)

* feat: events detail (#25)

* feat: 이벤트 상세 조회 기능 추가

* feat: Artist 도메인 추가 및 Event연관관계 매핑

* refactor: DB Trans 오브젝트 경로 변경

* feat: 이벤트 조회 api (#26)

* feat: 이벤트에 속한 티켓 리스트 조회

* feat: 이벤트에 속한 티켓 상세 정보 조회

* test: 이벤트 티켓 리스트 & 티켓 상세 조회 통합 테스트 코드

* feat: 유저 소유 티켓 목록 조회 기능 추가 (#27)

* fix: 프론트 요구 명세에 따라 status 필드 추가 (#28)

* fix: QA 수정사항(타임스탬프 변환, artistImage필드 추가, 더미데이터 추가) (#29)

* fix: 티켓 메타데이터 null로 내려오는 이슈 수정 (#30)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: 유저 소지한 티켓데이터 내 티켓메타데이터 필드 null 현상 수정 (#31)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: /users/tickets 엔드포인트 티켓 메타데이터 수정

* feat: KasService 구현 (#32)

* build: KAS 설정을 위한 세팅

* feat: KasService 사용을 위한 Dto 생성

* feat: KasException 생성

* feat: KasService 생성

* build: yml 설정값 부여

* feat: DataLoader 정보 추가

* refactor: builder 어노테이션 생성자에 붙이도록 수정

* refactor: 티켓 도메인 쿼리 인덴트 수정 및 QueryProjection 적용, User metadata fix (#33)

* fix: 티켓 메타데이터 dto 도입 (#34)

* fix: tokenId로 KAS 접근하도록 수정 (#35)

* feat: 유저 수정 request dto 검증 기능 (#37)

* feat: 유저 수정 request dto 검증 기능

* fix: 닉네임 검증로직 및 문구 수정

* refactor: KAS API 수정 (#36)

* refactor: dto 패키지 구조 변경

* build: kas 관련 yml 설정 변경

* fix: dataloader 설정값 변경

* fix: 유저 아티스트명 필드 누락 수정 (#38)

* feat: nickname validation 도입 (#39)

* refactor: onSale 필드를 TicketSalesStatus로 변경 (#41)

* refactor: SalesOption을 EventSalesOption으로 수정

* refactor: onSale 필드를 TicketSalesStatus로 변경

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링 (#40)

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링

* fix: HttpStatus INTENAL_SERVER_ERROR -> BAD_REQUEST 변경

* refactor: service 레이어 Mapper 사용하여 DTO 변환 및 컨트롤러 ResponseEntity 변경 (#42)

* feat: api 문서화 (#43)

* feat: api 문서화

* refactor: global/config 패키지로 이동

* fix: ticketSalesStatus null 로 내려오는 현상 수정 (#45)

* feat: 주문 등록 기능 API 추가 (#44)

* feat: 티켓 예매 폼 제출 api

* refactor: 이력관리를 위한 Baseentity 추가 및 Order 테이블 예약어 이슈

* test: OrderService 테스트코드

* refactor: ManyToOne 에서 연관관계 OneToMany로 변경

* fix: 주문 상태 등록시 상태 메시지 변경 (#46)

* refactor: order와 orderDetail를 양방향으로 수정 (#47)

* refactor: order와 orderDetail를 양방향으로 수정

* fix: 깨지는 테스트 수정

* refactor: TicketMetadata hashcode/equals 정의 (#48)

* fix: dataloader 로직 오류 수정 (#49)

* fix: dataloader 로직 오류 수정

* refactor: TicketSalesStatus Expired 상태 추가

* fix: KLIP 주소를 소문자로 통일 (#51)

* refactor: contractAddress 추가 (#52)

* feat: �어드민을 통한 OrderDetail 상태 변경 기능 구현 (#50)

* feat: OrderDetail 도메인 로직 추가

- orderStatus 상태변경 enum으로 관리
- 연관관계를 가진 엔티티의 필드 getter를 OrderDetail 자체의 getter로 추상화

* feat: Admin 엔드포인트 작성

* feat: Admin 서비스 구현

* refactor: 엔드포인트 patch 요청으로 변경

* feat: admin 토큰 검증 로직 구현 (#53)

* feat(JwtProvider): 어드민 토큰 검증 기능 구현

* feat: 어드민 토큰 Filter 적용

* fix: 티켓 전송 엔티티 반영 로직 추가 (#54)

* feat: TicketSalesStatus 정보 동기화 (#55)

* feat: 티켓 주문시 Pending으로 상태 변경

* feat: OrderStatus에 따른 TicketSalesStatus 정보 업데이트

* refactor: KAS를 통해 사용자 티켓 정보 조회 (#57)

* feat(EventRepository): contract 주소 추출 기능 구현

* refactor: KAS를 통해 사용자의 티켓을 가져오도록 수정

* fix: KasService 비동기 예외처리

* feat: ID 기반으로 엔티티 equals/hashcode 재정의

* feat: Cron job으로 판매 종료된 이벤트의 티켓들 EXPIRED 처리 (#56)

* feat: 만료일자 지난 티켓에 대하여 판매 중지처리

* refactor: 사용하지 않는 패키지 제외

* fix: 스케줄러 패키지 경로 변경

* fix: scheduledTask Component 등록

* fix: dataloader 설정 재정의 (#58)

* fix: dataloader 설정 재정의

* fix: TicketRepository implements 재정의

* build: yml ddl-auto 값 파라미터 스토어로 이전

* feat: 거래 내역 조회 api (#59)

* feat: 거래 내역 조회 api

* refactor: 불필요한 개행 제거

* fix: 쿼리 수정 및 ticketMetadata 필드 추가

* feat: dataloader에서 새로운 nft 발행기능 구현 (#60)

* feat(KasService): alias로 컨트랙트 정보 가져오는 기능 구현

* feat(S3Service): tokenUri로 부터 metadata를 가져오는 기능 구현

* feat(TicketMetadataResponse): Dto에서 TicketMetadata로 변환해주는 메서드 구현

* refactor: 새로운 nft 민팅 기능 구현

* fix(S3ServiceTest): 깨지는 테스트 수정 (#61)

* fix: totalTicketCount 잘못 내려오는 현상 수정 (#62)

* fix: timestamp 필드 변환 수정 (#64)

* fix: 주문자명 정규식 검증 제거 (#65)

* feat: path, token 로깅 (#66)

* feat: 티켓 및 이벤트 정렬 (#67)

* fix: 티켓 정렬 순서 변경 (#68)

* feat: 주문 신청시 request 로그 슬랙알림 (#69)

* fix: get user 로직 수정 (#70)

* refactor: 예외 처리 전략 수립 (#71)

* feat: 예외 처리 전략 수립

* test: 깨지는 테스트 수정

* feat: 전역 Exception 핸들러 추가

* feat: 주문 상세 내역 필드 추가 (#72)

* feat: Opensea Collection Url 추가 (#73)

* refactor: 트랜잭션 어노테이션 정책에 따라 변경 및 단건 더티체킹 (#74)

* refactor: 유저 변경 트랜잭션 전파 설정 변경 (#75)

* fix: 유저 수정 queryDsl 로 변경 (#76)

* feat: 로깅 전략 수립 (#77)

* refactor: user details 수정 (#78)

* feat(ConnectableUserDetails): UserDetails가 klaytnAddress를 가지고 있도록 수정

* refactor(UserService): 서비스 내에서 user를 조회하도록 수정

* refactor(OrderService): 서비스 내에서 user를 조회하도록 수정

* test: 깨지는 테스트 수정

* build: local profile console logging 추가

* feat: ConnectableSecurityException 정의

* refactor(JwtProvider): try-catch를 통한 검증로직 추가

* style(SecurityConfiguration): configure 로직별 개행 추가

* feat(JwtAuthenticationFilter): try-catch 추가

* feat: 유저 인수테스트 추가 (#79)

* feat: 유저 인수테스트 추가

* fix: success 필드 직렬화되는 현상 수정

* refactor: 정책에 따라 fetchType 명시 제거 (#80)

* refactor: swagger 설정 변경 (#81)

* feat: swagger 설정

* refactor: ApiImplicitParam 어노테이션 제거

* feat: 전역 헤더 요청 값 추가

* fix: swagger uri 설정 (#82)

* feat: prod 환경 yaml 설정 (#83)

* feat: 인프라 관련 file 추가 (#84)

* fix: bash 쉘 오류 확인 여부 (#85)

* feat: plainjar 삭제 (#86)

* fix: region 명시 (#87)

* fix: region 변경 (#88)

* fix: task 강제 업데이트 되도록 수정 (#89)

* fix: Jenkinsfile 브랜치별 분기 (#90)

* fix: Jenkinsfile 문법 수정 (#91)

* fix: jenkinsfile 문법 수정 (#92)

* fix: Jenkinsfile 문법 수정 (#93)

* refactor: dockerfile profile 적용 (#94)

* fix: prod환경 log path 수정 (#96)

* feat: flyway 도입 (#99)

* feat: flyway 적용

* feat(Ticket): isUsed 필드 추가

* feat: ticket user 연관관계 제거

* style: 안쓰는 import 제거

* feat: fk 네이밍 컨벤션 확립

* refactor: TicketResponse isUsed 필드 추가 (#100)

* refactor: TicketResponse isUsed 필드 추가

* fix: EventMapper가 isUsed 필드 가져오도록 수정

* refactor: DB에서 ContractName을 가지도록 수정 (#101)

* refactor(Event): ContractName DB에 저장하도록 수정

* refactor(EventMapper): ticketToResponse ownedBy 필드 무시하도록 수정

* feat: 입장 처리를 위한 입장 정보 생성 (#103)

* feat: 입장 처리를 위한 입장 정보 생성 로직 구현

* refactor: RedisHash 값 부여

* feat: 회원가입 문자 인증 기능 (#104)

* feat: 회원가입 문자 인증 기능

* fix: ResponseEntity로 응답처리 및 apiDomain static final

* fix: RedisConfig 충돌해결 (#105)

* feat: 티켓 입장 기능 구현 (#106)

* feat: 티켓 입장 API 구현

* refactor(Ticket): useToEnter 네이밍 변경

* test: 티켓 입장 관련 테스트 작성

* fix: 티켓 사용 여부 로직에 Transactional 추가 (#107)

* fix: 티켓 사용 여부 로직에 Transactional 추가

* test(UserServiceTest): 티켓 업데이트 테스트 수정

* chore: 인증 메시지 문구 수정 (#108)

* feat: 컨트랙트 발행 및 토큰 민팅 기능 구현 (#110)

* �fix: nurigo exception추가 및 insert쿼리 작성 (#111)

* fix: exception error 로그 삽입 및 insert query 추가

* fix: 안쓰는 패키지 정리

* fix: event insert query 삭제

* fix: 컨트랙트 배포 로직 수정 (#112)

* fix: eventSalesOption -> salesOption (#114)

* fix: event 테이블 필드명 변경 (#116)

* feat: 무작위 티켓 구매 로직 구현 (#118)

* fix: 유저 토큰 조회시 id와 uri 검증하도록 수정 (#120)

* feature: 이벤트입장 로그 기록 (#122)

* feat: spotless 적용하여 코드 포맷팅 (#123)

* feat: new artist for letslock (#124)

* fix: 아티스트명, 이미지 변경 (#125)

* fix: 이벤트 노출 순서 변경 (#127)

* fix: artistname 변경 (#129)

* fix: artistname 변경

* fix: 아티스트 이미지 변경

* fix: 이미지 url 변경

* fix: 이미지 url 변경_Retry

* fix: HandlerMethodArgumentResolverComposite이슈 수정 (#131)

* feat: 이벤트 목록 조회 순서 변경 (#132)

* feat: 이벤트 목록 조회 순서 변경

* fix: event조회 함수명 추가 및 repository 테스트 코드 추가

* refactor: KasService 제네릭 적용 및 리팩터링 (#133)

* feat: KasContractService, KasTokenService 분리

* refactor(KasWebClient): Http 요청에 따른 제네릭 Mono 반환하도록 수정

* feat(KasUrlGenerator): Kas에 사용되는 URL 관리하는 유틸 클래스 생성

* test: KasService 테스트 작성 (#134)

* refactor: url 생성을 인터페이스로 분리

* refactor: 유저 토큰 전체 조회 메서드 네임 변경

* build: MockServer 도입

* refactor(KasService): getMyContractByAlias로 메서드 네이밍 변경

* refactor: KasException 구성 변경

* test: KasService Mocking 서버 도입

* style: 코드 포맷팅

* fix(KasTokenService): HashMap 동시성 이슈로 ConcurrentHashMap으로 대체

* build: mockServerVersion buildscript에 명시

* refactor: KasMockConfig 도입

* refactor(KasServiceTestWithTestnet): 자동화 테스트 Disabled 설정

* feat: 티켓 구매시 문자 발송 (#135)

* feat: 티켓 구매시 문자 발송

* refactor: smsService 메시지 부분 리팩토링 및 local 민감 정보 aws parameter store 이용

* fix: 오타 수정 및 초기화 수정

* refactor: sms 메시지 설정부 분리

* update: issue templates (#137)

* refactor: 로컬 KAS 파라미터 스토어 도입 (#138)

* refactor: 로컬 KAS 정보 파라미터 스토어 도입

* refactor: 콘솔 로깅 쓰레드 정보 기입

* fix: tokenId 랜덤값 증가

* test: Klaytn 관련 테스트 작성 (#141)

* test: Klip 테스트 작성

* test: Kas 테스트 보충

* test(KlipServiceTest): 안 쓰는 변수 삭제

* test: 가입시 인증 로직 테스트 코드 작성 (#142)

* test: artist 패키지 테스트 작성 (#143)

* fix: Http Keep-Alive 설정 부여 (#140)

* test: Security 패키지 테스트 작성 (#144)

* refactor: 시큐리티 패키지 구조 세분화

* refactor: CustomUserDetails 추상 클래스 도입

* test: Security 테스트 작성

* test: Security 테스트 작성

* test: Global 패키지 테스트 작성 (#145)

* test: Global 패키지 테스트 작성

* refactor(DateTimeUtil): 생성자 막음

* feat: Awaitility를 도입한 테스트 작성

* refactor: redisDao로 네이밍 변경

* OrderConteollerTest 추가 (#147)

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

* test: EventService 테스트 (#146)

* test: EventService 테스트

* test: 종속된 티켓이 없는 경우 이벤트 상세조회 케이스 추가

* fix: 티켓없는 이벤트 상세 조회 가능하도록 쿼리 수정

* test: KasService Mocking 후 티켓 테스트 케이스 추가

* chore: ToDo 제거

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

* refactor: AdminService 테스트 및 구조 개선 (#148)

* refactor: AdminOrderService 도입

* test: 도메인 픽스쳐 도입

* test: EventIssueRequest 제약 조건 테스트 작성

* test(AdminServiceTest): 이벤트 발행 테스트 작성

* feat: WaitUtil 도입

* feat: 어드민 서비스 테스트 작성

* fix: valid 어노테이션 추가

* refactor: common/util -> util 패키지 네임 변경

* refactor: restTemplate 공통 구현

* fix: SecureRandom 도입

* build: jacoco 도입 (#149)

* test: user controller 테스트 (#151)

* test: user-controller test 코드 추가

* refactor: 미사용 엔드포인트 제거(service, repository 이력관리를 위해 남겨둠)

* test: Bad Request test 추가 및 ticket 도메인 테스트

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

* test: 어드민 인수테스트 작성 (#152)

* docs(Readme): 문서 초안 작성 (#153)

* docs(Readme): 문서 초안 작성

* fix(Readme): 아키텍처 부분 삭제 및 API 문서화 추가

* docs(Readme): requirements 삭제

* docs(Readme): IDE에서 발췌한 ERD로 변경

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

* fix: Request key 이슈로 에러나는 현상 수정 (#155)

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

Co-authored-by: Yeongsang Jo <[email protected]>
Co-authored-by: jungpil98 <[email protected]>
@mrlee7 mrlee7 deleted the test/auth-test branch October 12, 2022 07:38
mrlee7 added a commit that referenced this pull request Nov 16, 2022
* feat: 유저 정보 조회 (#1)

* feat: 유저 엔티티 생성

* feat: 유저 조회 요청 구현

* feat: Spring Security 설정

* test: UserController에 대한 테스트 작성

* feat: queryDsl 적용 (#2)

* feat: QueryDsl 초기 설정

* style: import 정리

* feat: pr 템플릿 구성 (#3)

* feat: jwt 토큰 생성 및 클레임 추출 (#4)

* feat: 유저 토큰 발행기능

* feat: 유저 토큰 검증

* feat: 토큰 데이터 속성 추출

* feat: 유저 탈퇴 기능 추가 (#5)

* feat: klip 로그인 구현 (#6)

* feat: klip 로그인 초기 설정 구현

* feat: klip 로그인 구현

* test: klip 로그인에 대한 UserService 테스트 작성

* feat: Cors 이슈 수정 (#7)

* feat: 크로스도메인 이슈 해결

* feat: 크로스도메인 이슈 수정

* feat: AWS ParameterStore 기능 추가 (#8)

* feat: AWS ParameterStore 기능 추가

* feat: Jwt 설정 추가

* fix: aws parameter-store 의존성 버전 수정 (#9)

* fix: aws parameterStore 의존성 버전 수정

* fix: 활성환경 dev->local 수정

* fix: Klip 로그인만 수행한 유저에 대해 isActive 값 상이하게 지정 (#10)

* fix: WebConfigure 경로 수정 (#11)

* feat: spring security 초기 설정 (#12)

* feat: CustomUserDetailsService 구현

* feat: JwtAuthenticationFilter 구현

* feat: spring security 구현

* refactor: ConnectableUserDetail로 user 가져오도록 수정

* feat: 유저 수정 기능 추가 (#13)

* feat: 유저 수정 기능 추가

* feat: 사용하지 않는 Transactional 패키지 제거

* fix: user 도메인 npe 수정 (#14)

* fix: cors methods 추가 (#15)

* fix: 스프링 시큐리티 Options 설정 (#16)

* fix: write connection 트랜잭셔널 어노테이션 추가 (#18)

* feat: 이벤트 목록 조회 (#17)

* feat: 이벤트 목록 조회

* feat: LocalDateTime->TimeStamp 변환을 Dto 내에서 하도록 수정

* feat: ticket 엔티티 구현 및 dataLoader 도입 (#19)

* fix: transactional ReadOnly 속성 삭제 (#20)

* feat: exception global 처리 추가 (#21)

* fix: 유저 상세 조회시 status 추가 (#22)

* fix: modify user transactional 선언 (#23)

* feat: 유저 수정 기능 queryDsl로 변경 (#24)

* feat: events detail (#25)

* feat: 이벤트 상세 조회 기능 추가

* feat: Artist 도메인 추가 및 Event연관관계 매핑

* refactor: DB Trans 오브젝트 경로 변경

* feat: 이벤트 조회 api (#26)

* feat: 이벤트에 속한 티켓 리스트 조회

* feat: 이벤트에 속한 티켓 상세 정보 조회

* test: 이벤트 티켓 리스트 & 티켓 상세 조회 통합 테스트 코드

* feat: 유저 소유 티켓 목록 조회 기능 추가 (#27)

* fix: 프론트 요구 명세에 따라 status 필드 추가 (#28)

* fix: QA 수정사항(타임스탬프 변환, artistImage필드 추가, 더미데이터 추가) (#29)

* fix: 티켓 메타데이터 null로 내려오는 이슈 수정 (#30)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: 유저 소지한 티켓데이터 내 티켓메타데이터 필드 null 현상 수정 (#31)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: /users/tickets 엔드포인트 티켓 메타데이터 수정

* feat: KasService 구현 (#32)

* build: KAS 설정을 위한 세팅

* feat: KasService 사용을 위한 Dto 생성

* feat: KasException 생성

* feat: KasService 생성

* build: yml 설정값 부여

* feat: DataLoader 정보 추가

* refactor: builder 어노테이션 생성자에 붙이도록 수정

* refactor: 티켓 도메인 쿼리 인덴트 수정 및 QueryProjection 적용, User metadata fix (#33)

* fix: 티켓 메타데이터 dto 도입 (#34)

* fix: tokenId로 KAS 접근하도록 수정 (#35)

* feat: 유저 수정 request dto 검증 기능 (#37)

* feat: 유저 수정 request dto 검증 기능

* fix: 닉네임 검증로직 및 문구 수정

* refactor: KAS API 수정 (#36)

* refactor: dto 패키지 구조 변경

* build: kas 관련 yml 설정 변경

* fix: dataloader 설정값 변경

* fix: 유저 아티스트명 필드 누락 수정 (#38)

* feat: nickname validation 도입 (#39)

* refactor: onSale 필드를 TicketSalesStatus로 변경 (#41)

* refactor: SalesOption을 EventSalesOption으로 수정

* refactor: onSale 필드를 TicketSalesStatus로 변경

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링 (#40)

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링

* fix: HttpStatus INTENAL_SERVER_ERROR -> BAD_REQUEST 변경

* refactor: service 레이어 Mapper 사용하여 DTO 변환 및 컨트롤러 ResponseEntity 변경 (#42)

* feat: api 문서화 (#43)

* feat: api 문서화

* refactor: global/config 패키지로 이동

* fix: ticketSalesStatus null 로 내려오는 현상 수정 (#45)

* feat: 주문 등록 기능 API 추가 (#44)

* feat: 티켓 예매 폼 제출 api

* refactor: 이력관리를 위한 Baseentity 추가 및 Order 테이블 예약어 이슈

* test: OrderService 테스트코드

* refactor: ManyToOne 에서 연관관계 OneToMany로 변경

* fix: 주문 상태 등록시 상태 메시지 변경 (#46)

* refactor: order와 orderDetail를 양방향으로 수정 (#47)

* refactor: order와 orderDetail를 양방향으로 수정

* fix: 깨지는 테스트 수정

* refactor: TicketMetadata hashcode/equals 정의 (#48)

* fix: dataloader 로직 오류 수정 (#49)

* fix: dataloader 로직 오류 수정

* refactor: TicketSalesStatus Expired 상태 추가

* fix: KLIP 주소를 소문자로 통일 (#51)

* refactor: contractAddress 추가 (#52)

* feat: �어드민을 통한 OrderDetail 상태 변경 기능 구현 (#50)

* feat: OrderDetail 도메인 로직 추가

- orderStatus 상태변경 enum으로 관리
- 연관관계를 가진 엔티티의 필드 getter를 OrderDetail 자체의 getter로 추상화

* feat: Admin 엔드포인트 작성

* feat: Admin 서비스 구현

* refactor: 엔드포인트 patch 요청으로 변경

* feat: admin 토큰 검증 로직 구현 (#53)

* feat(JwtProvider): 어드민 토큰 검증 기능 구현

* feat: 어드민 토큰 Filter 적용

* fix: 티켓 전송 엔티티 반영 로직 추가 (#54)

* feat: TicketSalesStatus 정보 동기화 (#55)

* feat: 티켓 주문시 Pending으로 상태 변경

* feat: OrderStatus에 따른 TicketSalesStatus 정보 업데이트

* refactor: KAS를 통해 사용자 티켓 정보 조회 (#57)

* feat(EventRepository): contract 주소 추출 기능 구현

* refactor: KAS를 통해 사용자의 티켓을 가져오도록 수정

* fix: KasService 비동기 예외처리

* feat: ID 기반으로 엔티티 equals/hashcode 재정의

* feat: Cron job으로 판매 종료된 이벤트의 티켓들 EXPIRED 처리 (#56)

* feat: 만료일자 지난 티켓에 대하여 판매 중지처리

* refactor: 사용하지 않는 패키지 제외

* fix: 스케줄러 패키지 경로 변경

* fix: scheduledTask Component 등록

* fix: dataloader 설정 재정의 (#58)

* fix: dataloader 설정 재정의

* fix: TicketRepository implements 재정의

* build: yml ddl-auto 값 파라미터 스토어로 이전

* feat: 거래 내역 조회 api (#59)

* feat: 거래 내역 조회 api

* refactor: 불필요한 개행 제거

* fix: 쿼리 수정 및 ticketMetadata 필드 추가

* feat: dataloader에서 새로운 nft 발행기능 구현 (#60)

* feat(KasService): alias로 컨트랙트 정보 가져오는 기능 구현

* feat(S3Service): tokenUri로 부터 metadata를 가져오는 기능 구현

* feat(TicketMetadataResponse): Dto에서 TicketMetadata로 변환해주는 메서드 구현

* refactor: 새로운 nft 민팅 기능 구현

* fix(S3ServiceTest): 깨지는 테스트 수정 (#61)

* fix: totalTicketCount 잘못 내려오는 현상 수정 (#62)

* fix: timestamp 필드 변환 수정 (#64)

* fix: 주문자명 정규식 검증 제거 (#65)

* feat: path, token 로깅 (#66)

* feat: 티켓 및 이벤트 정렬 (#67)

* fix: 티켓 정렬 순서 변경 (#68)

* feat: 주문 신청시 request 로그 슬랙알림 (#69)

* fix: get user 로직 수정 (#70)

* refactor: 예외 처리 전략 수립 (#71)

* feat: 예외 처리 전략 수립

* test: 깨지는 테스트 수정

* feat: 전역 Exception 핸들러 추가

* feat: 주문 상세 내역 필드 추가 (#72)

* feat: Opensea Collection Url 추가 (#73)

* refactor: 트랜잭션 어노테이션 정책에 따라 변경 및 단건 더티체킹 (#74)

* refactor: 유저 변경 트랜잭션 전파 설정 변경 (#75)

* fix: 유저 수정 queryDsl 로 변경 (#76)

* feat: 로깅 전략 수립 (#77)

* refactor: user details 수정 (#78)

* feat(ConnectableUserDetails): UserDetails가 klaytnAddress를 가지고 있도록 수정

* refactor(UserService): 서비스 내에서 user를 조회하도록 수정

* refactor(OrderService): 서비스 내에서 user를 조회하도록 수정

* test: 깨지는 테스트 수정

* build: local profile console logging 추가

* feat: ConnectableSecurityException 정의

* refactor(JwtProvider): try-catch를 통한 검증로직 추가

* style(SecurityConfiguration): configure 로직별 개행 추가

* feat(JwtAuthenticationFilter): try-catch 추가

* feat: 유저 인수테스트 추가 (#79)

* feat: 유저 인수테스트 추가

* fix: success 필드 직렬화되는 현상 수정

* refactor: 정책에 따라 fetchType 명시 제거 (#80)

* refactor: swagger 설정 변경 (#81)

* feat: swagger 설정

* refactor: ApiImplicitParam 어노테이션 제거

* feat: 전역 헤더 요청 값 추가

* fix: swagger uri 설정 (#82)

* feat: prod 환경 yaml 설정 (#83)

* feat: 인프라 관련 file 추가 (#84)

* fix: bash 쉘 오류 확인 여부 (#85)

* feat: plainjar 삭제 (#86)

* fix: region 명시 (#87)

* fix: region 변경 (#88)

* fix: task 강제 업데이트 되도록 수정 (#89)

* fix: Jenkinsfile 브랜치별 분기 (#90)

* fix: Jenkinsfile 문법 수정 (#91)

* fix: jenkinsfile 문법 수정 (#92)

* fix: Jenkinsfile 문법 수정 (#93)

* refactor: dockerfile profile 적용 (#94)

* fix: prod환경 log path 수정 (#96)

* feat: flyway 도입 (#99)

* feat: flyway 적용

* feat(Ticket): isUsed 필드 추가

* feat: ticket user 연관관계 제거

* style: 안쓰는 import 제거

* feat: fk 네이밍 컨벤션 확립

* refactor: TicketResponse isUsed 필드 추가 (#100)

* refactor: TicketResponse isUsed 필드 추가

* fix: EventMapper가 isUsed 필드 가져오도록 수정

* refactor: DB에서 ContractName을 가지도록 수정 (#101)

* refactor(Event): ContractName DB에 저장하도록 수정

* refactor(EventMapper): ticketToResponse ownedBy 필드 무시하도록 수정

* feat: 입장 처리를 위한 입장 정보 생성 (#103)

* feat: 입장 처리를 위한 입장 정보 생성 로직 구현

* refactor: RedisHash 값 부여

* feat: 회원가입 문자 인증 기능 (#104)

* feat: 회원가입 문자 인증 기능

* fix: ResponseEntity로 응답처리 및 apiDomain static final

* fix: RedisConfig 충돌해결 (#105)

* feat: 티켓 입장 기능 구현 (#106)

* feat: 티켓 입장 API 구현

* refactor(Ticket): useToEnter 네이밍 변경

* test: 티켓 입장 관련 테스트 작성

* fix: 티켓 사용 여부 로직에 Transactional 추가 (#107)

* fix: 티켓 사용 여부 로직에 Transactional 추가

* test(UserServiceTest): 티켓 업데이트 테스트 수정

* chore: 인증 메시지 문구 수정 (#108)

* feat: 컨트랙트 발행 및 토큰 민팅 기능 구현 (#110)

* �fix: nurigo exception추가 및 insert쿼리 작성 (#111)

* fix: exception error 로그 삽입 및 insert query 추가

* fix: 안쓰는 패키지 정리

* fix: event insert query 삭제

* fix: 컨트랙트 배포 로직 수정 (#112)

* fix: eventSalesOption -> salesOption (#114)

* fix: event 테이블 필드명 변경 (#116)

* feat: 무작위 티켓 구매 로직 구현 (#118)

* fix: 유저 토큰 조회시 id와 uri 검증하도록 수정 (#120)

* feature: 이벤트입장 로그 기록 (#122)

* feat: spotless 적용하여 코드 포맷팅 (#123)

* feat: new artist for letslock (#124)

* fix: 아티스트명, 이미지 변경 (#125)

* fix: 이벤트 노출 순서 변경 (#127)

* fix: artistname 변경 (#129)

* fix: artistname 변경

* fix: 아티스트 이미지 변경

* fix: 이미지 url 변경

* fix: 이미지 url 변경_Retry

* fix: HandlerMethodArgumentResolverComposite이슈 수정 (#131)

* feat: 이벤트 목록 조회 순서 변경 (#132)

* feat: 이벤트 목록 조회 순서 변경

* fix: event조회 함수명 추가 및 repository 테스트 코드 추가

* refactor: KasService 제네릭 적용 및 리팩터링 (#133)

* feat: KasContractService, KasTokenService 분리

* refactor(KasWebClient): Http 요청에 따른 제네릭 Mono 반환하도록 수정

* feat(KasUrlGenerator): Kas에 사용되는 URL 관리하는 유틸 클래스 생성

* test: KasService 테스트 작성 (#134)

* refactor: url 생성을 인터페이스로 분리

* refactor: 유저 토큰 전체 조회 메서드 네임 변경

* build: MockServer 도입

* refactor(KasService): getMyContractByAlias로 메서드 네이밍 변경

* refactor: KasException 구성 변경

* test: KasService Mocking 서버 도입

* style: 코드 포맷팅

* fix(KasTokenService): HashMap 동시성 이슈로 ConcurrentHashMap으로 대체

* build: mockServerVersion buildscript에 명시

* refactor: KasMockConfig 도입

* refactor(KasServiceTestWithTestnet): 자동화 테스트 Disabled 설정

* feat: 티켓 구매시 문자 발송 (#135)

* feat: 티켓 구매시 문자 발송

* refactor: smsService 메시지 부분 리팩토링 및 local 민감 정보 aws parameter store 이용

* fix: 오타 수정 및 초기화 수정

* refactor: sms 메시지 설정부 분리

* update: issue templates (#137)

* refactor: 로컬 KAS 파라미터 스토어 도입 (#138)

* refactor: 로컬 KAS 정보 파라미터 스토어 도입

* refactor: 콘솔 로깅 쓰레드 정보 기입

* fix: tokenId 랜덤값 증가

* test: Klaytn 관련 테스트 작성 (#141)

* test: Klip 테스트 작성

* test: Kas 테스트 보충

* test(KlipServiceTest): 안 쓰는 변수 삭제

* test: 가입시 인증 로직 테스트 코드 작성 (#142)

* test: artist 패키지 테스트 작성 (#143)

* fix: Http Keep-Alive 설정 부여 (#140)

* test: Security 패키지 테스트 작성 (#144)

* refactor: 시큐리티 패키지 구조 세분화

* refactor: CustomUserDetails 추상 클래스 도입

* test: Security 테스트 작성

* test: Security 테스트 작성

* test: Global 패키지 테스트 작성 (#145)

* test: Global 패키지 테스트 작성

* refactor(DateTimeUtil): 생성자 막음

* feat: Awaitility를 도입한 테스트 작성

* refactor: redisDao로 네이밍 변경

* OrderConteollerTest 추가 (#147)

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

* test: EventService 테스트 (#146)

* test: EventService 테스트

* test: 종속된 티켓이 없는 경우 이벤트 상세조회 케이스 추가

* fix: 티켓없는 이벤트 상세 조회 가능하도록 쿼리 수정

* test: KasService Mocking 후 티켓 테스트 케이스 추가

* chore: ToDo 제거

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

* refactor: AdminService 테스트 및 구조 개선 (#148)

* refactor: AdminOrderService 도입

* test: 도메인 픽스쳐 도입

* test: EventIssueRequest 제약 조건 테스트 작성

* test(AdminServiceTest): 이벤트 발행 테스트 작성

* feat: WaitUtil 도입

* feat: 어드민 서비스 테스트 작성

* fix: valid 어노테이션 추가

* refactor: common/util -> util 패키지 네임 변경

* refactor: restTemplate 공통 구현

* fix: SecureRandom 도입

* build: jacoco 도입 (#149)

* test: user controller 테스트 (#151)

* test: user-controller test 코드 추가

* refactor: 미사용 엔드포인트 제거(service, repository 이력관리를 위해 남겨둠)

* test: Bad Request test 추가 및 ticket 도메인 테스트

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

* test: 어드민 인수테스트 작성 (#152)

* docs(Readme): 문서 초안 작성 (#153)

* docs(Readme): 문서 초안 작성

* fix(Readme): 아키텍처 부분 삭제 및 API 문서화 추가

* docs(Readme): requirements 삭제

* docs(Readme): IDE에서 발췌한 ERD로 변경

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

* fix: Request key 이슈로 에러나는 현상 수정 (#155)

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

* feat: TimeCheck AOP 도입 (#158)

* feat: artist페이지 방명록 기능 (#157)

* feat(Comment): 도메인 추가

* feat(Comment): DDL 스크립트 작성

* feat(Artist): 서비스 레이어 작성

* feat(Comment): 기능 추가

* refactor: DB 스크립트 커맨드는 대문자로 수정

* test: ArtistService 테스트 코드 추가

* test: ArtistController 테스트 작성

* refactor: 권한 분리 및 테스트 코드 수정

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

* refactor: DirtiesContext제거 하여 Truncate로 변경 (#159)

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

* feat: 프로메테우스 actuator 도입 (#160)

* build: actuator 의존성 추가 및 springfox 충돌 해결

* build: 프로메테우스 actuator 도입

* refactor: code smell 제네릭 적용

* docs: tech spec 업데이트 (#161)

* docs: tech spec 업데이트

* fix: 오타 수정

* feat: 아티스트 별 이벤트 조회 (#162)

* refactor: artistId 반환하도록 dto 수정

* feat: 아티스트 별 이벤트 조회 API 구현

* test: 컨트롤러 테스트 요청/응답 보충

* feat: 오늘 구매 가능한 이벤트 조회 API (#163)

* feat: 오늘 구매 가능한 이벤트 조회 기능 구현

* refactor: EventRepositoryTest 픽스쳐 도입

* test(EventRepositoryTest): 현재 구매 가능 티켓 레포지토리 테스트

* test(EventServiceTest): 현재 구매 가능 티켓 서비스 테스트

* test(EventControllerTest): 현재 구매 가능 티켓 컨트롤러 테스트

* feat: 댓글 삭제 기능 추가 (#164)

* feat: 댓글 삭제 기능 추가

* fix: PUT -> DELETE 메소드로 변경

* fix(ArtistService, Comment): 명세에 따른 로직 변경

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

* feat: 아티스트 NFT 홀더 확인 (#165)

* feat: NFT 홀더 체크 기능 구현

* test: NFT 홀더 검증 테스트 작성

* refactor: kas 로직 내부로 변경

* refactor(ArtistService): 메서드 체이닝으로 수정

* test: Artist 인수테스트 작성

* fix: Security 예외처리 추가

* refactor(KasServiceMockSetup): mockserver 셋업 static으로 변경

* feat: 아티스트 상세 조회시 공지사항 및 추가정보 필드 추가 (#166)

* feat: 아티스트 상세 조회시 공지사항 및 추가정보 필드 추가

* fix: DDL 잘못된 필드명 수정

* fix: 생성자 내 일부 필드 삭제

* refactor(NoticeResponse): DTO 내 Entity 사용부 DTO로 변경

* fix: query질의 alias 삭제

* fix(noticeStatus): Enumerated 어노테이션 누락

* refactor: enum 을 status 필드로 하여 ui>dto 필드에서 도메인 노출하지 않게함

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

* fix(ArtistDetailResponse): 머지 과정에서 삭제된 부분 회생 (#167)

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

* fix: writtenAt 타임 스탬프로 변경 (#168)

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

* fix: 트랜잭셔널 어노테이션 추가 및 아티스트 상세 조회시 id누락부 (#169)

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

* fix: 아티스트 별 이벤트 가져오는 쿼리 수정 (#170)

* refactor: EventDetail에 artistId 정보 추가 (#172)

* feat: WebClient timeout 설정 (#171)

* refactor: WebClient timeout 추가

* refactor: 예상치 못한 에러에 대한 예외 로깅 전략 수정

* refactor(KasException): 에러 메시지 내용 수정

* feat: 아티스트 댓글 조회 시 티켓 정보 반환 (#173)

* feat: 각 klaytnAddress 마다 토큰 홀더인지 검증하는 기능 추가

* feat: 댓글별 아티스트 홀더인지 검사

* test: 테스트 보강

* refactor: 아티스트 댓글 TimeCheck 도입

* refactor: findMetadataByTokenIdAndTokenUri Optional 도입

* fix: Thread Interrupt 알림 추가

* docs: ERD 업데이트 (#174)

Co-authored-by: Yeongsang Jo <[email protected]>
Co-authored-by: jungpil98 <[email protected]>
joelonsw added a commit that referenced this pull request Nov 20, 2022
* feat: 유저 정보 조회 (#1)

* feat: 유저 엔티티 생성

* feat: 유저 조회 요청 구현

* feat: Spring Security 설정

* test: UserController에 대한 테스트 작성

* feat: queryDsl 적용 (#2)

* feat: QueryDsl 초기 설정

* style: import 정리

* feat: pr 템플릿 구성 (#3)

* feat: jwt 토큰 생성 및 클레임 추출 (#4)

* feat: 유저 토큰 발행기능

* feat: 유저 토큰 검증

* feat: 토큰 데이터 속성 추출

* feat: 유저 탈퇴 기능 추가 (#5)

* feat: klip 로그인 구현 (#6)

* feat: klip 로그인 초기 설정 구현

* feat: klip 로그인 구현

* test: klip 로그인에 대한 UserService 테스트 작성

* feat: Cors 이슈 수정 (#7)

* feat: 크로스도메인 이슈 해결

* feat: 크로스도메인 이슈 수정

* feat: AWS ParameterStore 기능 추가 (#8)

* feat: AWS ParameterStore 기능 추가

* feat: Jwt 설정 추가

* fix: aws parameter-store 의존성 버전 수정 (#9)

* fix: aws parameterStore 의존성 버전 수정

* fix: 활성환경 dev->local 수정

* fix: Klip 로그인만 수행한 유저에 대해 isActive 값 상이하게 지정 (#10)

* fix: WebConfigure 경로 수정 (#11)

* feat: spring security 초기 설정 (#12)

* feat: CustomUserDetailsService 구현

* feat: JwtAuthenticationFilter 구현

* feat: spring security 구현

* refactor: ConnectableUserDetail로 user 가져오도록 수정

* feat: 유저 수정 기능 추가 (#13)

* feat: 유저 수정 기능 추가

* feat: 사용하지 않는 Transactional 패키지 제거

* fix: user 도메인 npe 수정 (#14)

* fix: cors methods 추가 (#15)

* fix: 스프링 시큐리티 Options 설정 (#16)

* fix: write connection 트랜잭셔널 어노테이션 추가 (#18)

* feat: 이벤트 목록 조회 (#17)

* feat: 이벤트 목록 조회

* feat: LocalDateTime->TimeStamp 변환을 Dto 내에서 하도록 수정

* feat: ticket 엔티티 구현 및 dataLoader 도입 (#19)

* fix: transactional ReadOnly 속성 삭제 (#20)

* feat: exception global 처리 추가 (#21)

* fix: 유저 상세 조회시 status 추가 (#22)

* fix: modify user transactional 선언 (#23)

* feat: 유저 수정 기능 queryDsl로 변경 (#24)

* feat: events detail (#25)

* feat: 이벤트 상세 조회 기능 추가

* feat: Artist 도메인 추가 및 Event연관관계 매핑

* refactor: DB Trans 오브젝트 경로 변경

* feat: 이벤트 조회 api (#26)

* feat: 이벤트에 속한 티켓 리스트 조회

* feat: 이벤트에 속한 티켓 상세 정보 조회

* test: 이벤트 티켓 리스트 & 티켓 상세 조회 통합 테스트 코드

* feat: 유저 소유 티켓 목록 조회 기능 추가 (#27)

* fix: 프론트 요구 명세에 따라 status 필드 추가 (#28)

* fix: QA 수정사항(타임스탬프 변환, artistImage필드 추가, 더미데이터 추가) (#29)

* fix: 티켓 메타데이터 null로 내려오는 이슈 수정 (#30)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: 유저 소지한 티켓데이터 내 티켓메타데이터 필드 null 현상 수정 (#31)

* fix: 티켓 메타데이터 미노출 수정

* fix: 더미데이터 테스트로 테스트 케이스 깨지는 현상수정

* fix: /users/tickets 엔드포인트 티켓 메타데이터 수정

* feat: KasService 구현 (#32)

* build: KAS 설정을 위한 세팅

* feat: KasService 사용을 위한 Dto 생성

* feat: KasException 생성

* feat: KasService 생성

* build: yml 설정값 부여

* feat: DataLoader 정보 추가

* refactor: builder 어노테이션 생성자에 붙이도록 수정

* refactor: 티켓 도메인 쿼리 인덴트 수정 및 QueryProjection 적용, User metadata fix (#33)

* fix: 티켓 메타데이터 dto 도입 (#34)

* fix: tokenId로 KAS 접근하도록 수정 (#35)

* feat: 유저 수정 request dto 검증 기능 (#37)

* feat: 유저 수정 request dto 검증 기능

* fix: 닉네임 검증로직 및 문구 수정

* refactor: KAS API 수정 (#36)

* refactor: dto 패키지 구조 변경

* build: kas 관련 yml 설정 변경

* fix: dataloader 설정값 변경

* fix: 유저 아티스트명 필드 누락 수정 (#38)

* feat: nickname validation 도입 (#39)

* refactor: onSale 필드를 TicketSalesStatus로 변경 (#41)

* refactor: SalesOption을 EventSalesOption으로 수정

* refactor: onSale 필드를 TicketSalesStatus로 변경

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링 (#40)

* refactor: EventRepository NPE 발생이슈 Optional로 리팩토링

* fix: HttpStatus INTENAL_SERVER_ERROR -> BAD_REQUEST 변경

* refactor: service 레이어 Mapper 사용하여 DTO 변환 및 컨트롤러 ResponseEntity 변경 (#42)

* feat: api 문서화 (#43)

* feat: api 문서화

* refactor: global/config 패키지로 이동

* fix: ticketSalesStatus null 로 내려오는 현상 수정 (#45)

* feat: 주문 등록 기능 API 추가 (#44)

* feat: 티켓 예매 폼 제출 api

* refactor: 이력관리를 위한 Baseentity 추가 및 Order 테이블 예약어 이슈

* test: OrderService 테스트코드

* refactor: ManyToOne 에서 연관관계 OneToMany로 변경

* fix: 주문 상태 등록시 상태 메시지 변경 (#46)

* refactor: order와 orderDetail를 양방향으로 수정 (#47)

* refactor: order와 orderDetail를 양방향으로 수정

* fix: 깨지는 테스트 수정

* refactor: TicketMetadata hashcode/equals 정의 (#48)

* fix: dataloader 로직 오류 수정 (#49)

* fix: dataloader 로직 오류 수정

* refactor: TicketSalesStatus Expired 상태 추가

* fix: KLIP 주소를 소문자로 통일 (#51)

* refactor: contractAddress 추가 (#52)

* feat: �어드민을 통한 OrderDetail 상태 변경 기능 구현 (#50)

* feat: OrderDetail 도메인 로직 추가

- orderStatus 상태변경 enum으로 관리
- 연관관계를 가진 엔티티의 필드 getter를 OrderDetail 자체의 getter로 추상화

* feat: Admin 엔드포인트 작성

* feat: Admin 서비스 구현

* refactor: 엔드포인트 patch 요청으로 변경

* feat: admin 토큰 검증 로직 구현 (#53)

* feat(JwtProvider): 어드민 토큰 검증 기능 구현

* feat: 어드민 토큰 Filter 적용

* fix: 티켓 전송 엔티티 반영 로직 추가 (#54)

* feat: TicketSalesStatus 정보 동기화 (#55)

* feat: 티켓 주문시 Pending으로 상태 변경

* feat: OrderStatus에 따른 TicketSalesStatus 정보 업데이트

* refactor: KAS를 통해 사용자 티켓 정보 조회 (#57)

* feat(EventRepository): contract 주소 추출 기능 구현

* refactor: KAS를 통해 사용자의 티켓을 가져오도록 수정

* fix: KasService 비동기 예외처리

* feat: ID 기반으로 엔티티 equals/hashcode 재정의

* feat: Cron job으로 판매 종료된 이벤트의 티켓들 EXPIRED 처리 (#56)

* feat: 만료일자 지난 티켓에 대하여 판매 중지처리

* refactor: 사용하지 않는 패키지 제외

* fix: 스케줄러 패키지 경로 변경

* fix: scheduledTask Component 등록

* fix: dataloader 설정 재정의 (#58)

* fix: dataloader 설정 재정의

* fix: TicketRepository implements 재정의

* build: yml ddl-auto 값 파라미터 스토어로 이전

* feat: 거래 내역 조회 api (#59)

* feat: 거래 내역 조회 api

* refactor: 불필요한 개행 제거

* fix: 쿼리 수정 및 ticketMetadata 필드 추가

* feat: dataloader에서 새로운 nft 발행기능 구현 (#60)

* feat(KasService): alias로 컨트랙트 정보 가져오는 기능 구현

* feat(S3Service): tokenUri로 부터 metadata를 가져오는 기능 구현

* feat(TicketMetadataResponse): Dto에서 TicketMetadata로 변환해주는 메서드 구현

* refactor: 새로운 nft 민팅 기능 구현

* fix(S3ServiceTest): 깨지는 테스트 수정 (#61)

* fix: totalTicketCount 잘못 내려오는 현상 수정 (#62)

* fix: timestamp 필드 변환 수정 (#64)

* fix: 주문자명 정규식 검증 제거 (#65)

* feat: path, token 로깅 (#66)

* feat: 티켓 및 이벤트 정렬 (#67)

* fix: 티켓 정렬 순서 변경 (#68)

* feat: 주문 신청시 request 로그 슬랙알림 (#69)

* fix: get user 로직 수정 (#70)

* refactor: 예외 처리 전략 수립 (#71)

* feat: 예외 처리 전략 수립

* test: 깨지는 테스트 수정

* feat: 전역 Exception 핸들러 추가

* feat: 주문 상세 내역 필드 추가 (#72)

* feat: Opensea Collection Url 추가 (#73)

* refactor: 트랜잭션 어노테이션 정책에 따라 변경 및 단건 더티체킹 (#74)

* refactor: 유저 변경 트랜잭션 전파 설정 변경 (#75)

* fix: 유저 수정 queryDsl 로 변경 (#76)

* feat: 로깅 전략 수립 (#77)

* refactor: user details 수정 (#78)

* feat(ConnectableUserDetails): UserDetails가 klaytnAddress를 가지고 있도록 수정

* refactor(UserService): 서비스 내에서 user를 조회하도록 수정

* refactor(OrderService): 서비스 내에서 user를 조회하도록 수정

* test: 깨지는 테스트 수정

* build: local profile console logging 추가

* feat: ConnectableSecurityException 정의

* refactor(JwtProvider): try-catch를 통한 검증로직 추가

* style(SecurityConfiguration): configure 로직별 개행 추가

* feat(JwtAuthenticationFilter): try-catch 추가

* feat: 유저 인수테스트 추가 (#79)

* feat: 유저 인수테스트 추가

* fix: success 필드 직렬화되는 현상 수정

* refactor: 정책에 따라 fetchType 명시 제거 (#80)

* refactor: swagger 설정 변경 (#81)

* feat: swagger 설정

* refactor: ApiImplicitParam 어노테이션 제거

* feat: 전역 헤더 요청 값 추가

* fix: swagger uri 설정 (#82)

* feat: prod 환경 yaml 설정 (#83)

* feat: 인프라 관련 file 추가 (#84)

* fix: bash 쉘 오류 확인 여부 (#85)

* feat: plainjar 삭제 (#86)

* fix: region 명시 (#87)

* fix: region 변경 (#88)

* fix: task 강제 업데이트 되도록 수정 (#89)

* fix: Jenkinsfile 브랜치별 분기 (#90)

* fix: Jenkinsfile 문법 수정 (#91)

* fix: jenkinsfile 문법 수정 (#92)

* fix: Jenkinsfile 문법 수정 (#93)

* refactor: dockerfile profile 적용 (#94)

* fix: prod환경 log path 수정 (#96)

* feat: flyway 도입 (#99)

* feat: flyway 적용

* feat(Ticket): isUsed 필드 추가

* feat: ticket user 연관관계 제거

* style: 안쓰는 import 제거

* feat: fk 네이밍 컨벤션 확립

* refactor: TicketResponse isUsed 필드 추가 (#100)

* refactor: TicketResponse isUsed 필드 추가

* fix: EventMapper가 isUsed 필드 가져오도록 수정

* refactor: DB에서 ContractName을 가지도록 수정 (#101)

* refactor(Event): ContractName DB에 저장하도록 수정

* refactor(EventMapper): ticketToResponse ownedBy 필드 무시하도록 수정

* feat: 입장 처리를 위한 입장 정보 생성 (#103)

* feat: 입장 처리를 위한 입장 정보 생성 로직 구현

* refactor: RedisHash 값 부여

* feat: 회원가입 문자 인증 기능 (#104)

* feat: 회원가입 문자 인증 기능

* fix: ResponseEntity로 응답처리 및 apiDomain static final

* fix: RedisConfig 충돌해결 (#105)

* feat: 티켓 입장 기능 구현 (#106)

* feat: 티켓 입장 API 구현

* refactor(Ticket): useToEnter 네이밍 변경

* test: 티켓 입장 관련 테스트 작성

* fix: 티켓 사용 여부 로직에 Transactional 추가 (#107)

* fix: 티켓 사용 여부 로직에 Transactional 추가

* test(UserServiceTest): 티켓 업데이트 테스트 수정

* chore: 인증 메시지 문구 수정 (#108)

* feat: 컨트랙트 발행 및 토큰 민팅 기능 구현 (#110)

* �fix: nurigo exception추가 및 insert쿼리 작성 (#111)

* fix: exception error 로그 삽입 및 insert query 추가

* fix: 안쓰는 패키지 정리

* fix: event insert query 삭제

* fix: 컨트랙트 배포 로직 수정 (#112)

* fix: eventSalesOption -> salesOption (#114)

* fix: event 테이블 필드명 변경 (#116)

* feat: 무작위 티켓 구매 로직 구현 (#118)

* fix: 유저 토큰 조회시 id와 uri 검증하도록 수정 (#120)

* feature: 이벤트입장 로그 기록 (#122)

* feat: spotless 적용하여 코드 포맷팅 (#123)

* feat: new artist for letslock (#124)

* fix: 아티스트명, 이미지 변경 (#125)

* fix: 이벤트 노출 순서 변경 (#127)

* fix: artistname 변경 (#129)

* fix: artistname 변경

* fix: 아티스트 이미지 변경

* fix: 이미지 url 변경

* fix: 이미지 url 변경_Retry

* fix: HandlerMethodArgumentResolverComposite이슈 수정 (#131)

* feat: 이벤트 목록 조회 순서 변경 (#132)

* feat: 이벤트 목록 조회 순서 변경

* fix: event조회 함수명 추가 및 repository 테스트 코드 추가

* refactor: KasService 제네릭 적용 및 리팩터링 (#133)

* feat: KasContractService, KasTokenService 분리

* refactor(KasWebClient): Http 요청에 따른 제네릭 Mono 반환하도록 수정

* feat(KasUrlGenerator): Kas에 사용되는 URL 관리하는 유틸 클래스 생성

* test: KasService 테스트 작성 (#134)

* refactor: url 생성을 인터페이스로 분리

* refactor: 유저 토큰 전체 조회 메서드 네임 변경

* build: MockServer 도입

* refactor(KasService): getMyContractByAlias로 메서드 네이밍 변경

* refactor: KasException 구성 변경

* test: KasService Mocking 서버 도입

* style: 코드 포맷팅

* fix(KasTokenService): HashMap 동시성 이슈로 ConcurrentHashMap으로 대체

* build: mockServerVersion buildscript에 명시

* refactor: KasMockConfig 도입

* refactor(KasServiceTestWithTestnet): 자동화 테스트 Disabled 설정

* feat: 티켓 구매시 문자 발송 (#135)

* feat: 티켓 구매시 문자 발송

* refactor: smsService 메시지 부분 리팩토링 및 local 민감 정보 aws parameter store 이용

* fix: 오타 수정 및 초기화 수정

* refactor: sms 메시지 설정부 분리

* update: issue templates (#137)

* refactor: 로컬 KAS 파라미터 스토어 도입 (#138)

* refactor: 로컬 KAS 정보 파라미터 스토어 도입

* refactor: 콘솔 로깅 쓰레드 정보 기입

* fix: tokenId 랜덤값 증가

* test: Klaytn 관련 테스트 작성 (#141)

* test: Klip 테스트 작성

* test: Kas 테스트 보충

* test(KlipServiceTest): 안 쓰는 변수 삭제

* test: 가입시 인증 로직 테스트 코드 작성 (#142)

* test: artist 패키지 테스트 작성 (#143)

* fix: Http Keep-Alive 설정 부여 (#140)

* test: Security 패키지 테스트 작성 (#144)

* refactor: 시큐리티 패키지 구조 세분화

* refactor: CustomUserDetails 추상 클래스 도입

* test: Security 테스트 작성

* test: Security 테스트 작성

* test: Global 패키지 테스트 작성 (#145)

* test: Global 패키지 테스트 작성

* refactor(DateTimeUtil): 생성자 막음

* feat: Awaitility를 도입한 테스트 작성

* refactor: redisDao로 네이밍 변경

* OrderConteollerTest 추가 (#147)

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

* test: EventService 테스트 (#146)

* test: EventService 테스트

* test: 종속된 티켓이 없는 경우 이벤트 상세조회 케이스 추가

* fix: 티켓없는 이벤트 상세 조회 가능하도록 쿼리 수정

* test: KasService Mocking 후 티켓 테스트 케이스 추가

* chore: ToDo 제거

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

* refactor: AdminService 테스트 및 구조 개선 (#148)

* refactor: AdminOrderService 도입

* test: 도메인 픽스쳐 도입

* test: EventIssueRequest 제약 조건 테스트 작성

* test(AdminServiceTest): 이벤트 발행 테스트 작성

* feat: WaitUtil 도입

* feat: 어드민 서비스 테스트 작성

* fix: valid 어노테이션 추가

* refactor: common/util -> util 패키지 네임 변경

* refactor: restTemplate 공통 구현

* fix: SecureRandom 도입

* build: jacoco 도입 (#149)

* test: user controller 테스트 (#151)

* test: user-controller test 코드 추가

* refactor: 미사용 엔드포인트 제거(service, repository 이력관리를 위해 남겨둠)

* test: Bad Request test 추가 및 ticket 도메인 테스트

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

* test: 어드민 인수테스트 작성 (#152)

* docs(Readme): 문서 초안 작성 (#153)

* docs(Readme): 문서 초안 작성

* fix(Readme): 아키텍처 부분 삭제 및 API 문서화 추가

* docs(Readme): requirements 삭제

* docs(Readme): IDE에서 발췌한 ERD로 변경

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

* fix: Request key 이슈로 에러나는 현상 수정 (#155)

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

* feat: TimeCheck AOP 도입 (#158)

* feat: artist페이지 방명록 기능 (#157)

* feat(Comment): 도메인 추가

* feat(Comment): DDL 스크립트 작성

* feat(Artist): 서비스 레이어 작성

* feat(Comment): 기능 추가

* refactor: DB 스크립트 커맨드는 대문자로 수정

* test: ArtistService 테스트 코드 추가

* test: ArtistController 테스트 작성

* refactor: 권한 분리 및 테스트 코드 수정

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

* refactor: DirtiesContext제거 하여 Truncate로 변경 (#159)

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

* feat: 프로메테우스 actuator 도입 (#160)

* build: actuator 의존성 추가 및 springfox 충돌 해결

* build: 프로메테우스 actuator 도입

* refactor: code smell 제네릭 적용

* docs: tech spec 업데이트 (#161)

* docs: tech spec 업데이트

* fix: 오타 수정

* feat: 아티스트 별 이벤트 조회 (#162)

* refactor: artistId 반환하도록 dto 수정

* feat: 아티스트 별 이벤트 조회 API 구현

* test: 컨트롤러 테스트 요청/응답 보충

* feat: 오늘 구매 가능한 이벤트 조회 API (#163)

* feat: 오늘 구매 가능한 이벤트 조회 기능 구현

* refactor: EventRepositoryTest 픽스쳐 도입

* test(EventRepositoryTest): 현재 구매 가능 티켓 레포지토리 테스트

* test(EventServiceTest): 현재 구매 가능 티켓 서비스 테스트

* test(EventControllerTest): 현재 구매 가능 티켓 컨트롤러 테스트

* feat: 댓글 삭제 기능 추가 (#164)

* feat: 댓글 삭제 기능 추가

* fix: PUT -> DELETE 메소드로 변경

* fix(ArtistService, Comment): 명세에 따른 로직 변경

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

* feat: 아티스트 NFT 홀더 확인 (#165)

* feat: NFT 홀더 체크 기능 구현

* test: NFT 홀더 검증 테스트 작성

* refactor: kas 로직 내부로 변경

* refactor(ArtistService): 메서드 체이닝으로 수정

* test: Artist 인수테스트 작성

* fix: Security 예외처리 추가

* refactor(KasServiceMockSetup): mockserver 셋업 static으로 변경

* feat: 아티스트 상세 조회시 공지사항 및 추가정보 필드 추가 (#166)

* feat: 아티스트 상세 조회시 공지사항 및 추가정보 필드 추가

* fix: DDL 잘못된 필드명 수정

* fix: 생성자 내 일부 필드 삭제

* refactor(NoticeResponse): DTO 내 Entity 사용부 DTO로 변경

* fix: query질의 alias 삭제

* fix(noticeStatus): Enumerated 어노테이션 누락

* refactor: enum 을 status 필드로 하여 ui>dto 필드에서 도메인 노출하지 않게함

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

* fix(ArtistDetailResponse): 머지 과정에서 삭제된 부분 회생 (#167)

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

* fix: writtenAt 타임 스탬프로 변경 (#168)

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

* fix: 트랜잭셔널 어노테이션 추가 및 아티스트 상세 조회시 id누락부 (#169)

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

* fix: 아티스트 별 이벤트 가져오는 쿼리 수정 (#170)

* refactor: EventDetail에 artistId 정보 추가 (#172)

* feat: WebClient timeout 설정 (#171)

* refactor: WebClient timeout 추가

* refactor: 예상치 못한 에러에 대한 예외 로깅 전략 수정

* refactor(KasException): 에러 메시지 내용 수정

* feat: 아티스트 댓글 조회 시 티켓 정보 반환 (#173)

* feat: 각 klaytnAddress 마다 토큰 홀더인지 검증하는 기능 추가

* feat: 댓글별 아티스트 홀더인지 검사

* test: 테스트 보강

* refactor: 아티스트 댓글 TimeCheck 도입

* refactor: findMetadataByTokenIdAndTokenUri Optional 도입

* fix: Thread Interrupt 알림 추가

* docs: ERD 업데이트 (#174)

* refactor: 일괄 구매 수량 옵션 추가 (#176)

Co-authored-by: mrlee7 <[email protected]>
Co-authored-by: jungpil98 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants