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

fix: 회원이 가지고 있는 만료되지 않은 쿠폰에 대한 브랜드 리스트 조회 API 개발 #17

Merged
merged 13 commits into from
Aug 4, 2023

Conversation

versatile0010
Copy link
Member

Member API

[기능] 특정 회원이 가지고 있는 쿠폰들을 조회한 다음, 해당 쿠폰들의 브랜드 목록을 반환합니다.

  • member-id 는 path-variable 로 받아서 회원을 식별합니다.
  • paging 은 적용하지 않았는데, 필요 시 적용하겠습니다..!

[정렬 조건]

  • sort 값을 query-string 으로 받습니다.

[보완 사항]

  • 만료된 쿠폰에 대한 정보는 반환하지 않도록 수정했습니다.
  • 쿼리에서 CouponItemStatus 를 확인하고 EXPIRED 가 아닌 쿠폰만 조회하도록.
  • 또한 반환할 때 쿠폰의 상태를 같이 반환하도록 변경하였습니다.

sort = 1 이면 스탬프 많은 순, 쿠폰 생성 시간이 이른 순으로 브랜드 목록을 정렬하여 반환합니다.

{
  "code": 1000,
  "status": 200,
  "message": "요청에 성공하였습니다.",
  "result": {
    "id": 2,
    "name": "이회원",
    "email": "[email protected]",
    "memberGrade": "ROLE_MEMBER",
    "memberStatus": "ACTIVE",
    "brands": [
      {
        "id": 1,
        "name": "메가 커피",
        "rewardDescription": "따뜻한 아메리카노 한 잔 무료 증정",
        "brandImageUrl": "https://example.com/images/brand1.jpg",
        "stampCount": 10,
        "couponItemStatus": "ACTIVE",
        "createdDate": "2023-07-31T12:15:00",
        "expiredDate": "2024-01-31T12:15:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 1,
        "couponItemStatus": "INACTIVE",
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      }
    ]
  }
}

sort = 2 이면 쿠폰 생성 시간이 이른 순, 스탬프 많은 순으로 브랜드 목록을 정렬하여 반환합니다.

{
  "code": 1000,
  "status": 200,
  "message": "요청에 성공하였습니다.",
  "result": {
    "id": 1,
    "name": "김회원",
    "email": "[email protected]",
    "memberGrade": "ROLE_MEMBER",
    "memberStatus": "ACTIVE",
    "brands": [
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 4,
        "couponItemStatus": "INACTIVE",
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      },
      {
        "id": 1,
        "name": "메가 커피",
        "rewardDescription": "따뜻한 아메리카노 한 잔 무료 증정",
        "brandImageUrl": "https://example.com/images/brand1.jpg",
        "stampCount": 5,
        "couponItemStatus": "INACTIVE",
        "createdDate": "2023-07-31T12:15:00",
        "expiredDate": "2024-01-31T12:15:00"
      }
    ]
  }
}

sort = 3 이면 브랜드 이름 순으로 정렬하여 브랜드 목록을 반환합니다.

{
  "code": 1000,
  "status": 200,
  "message": "요청에 성공하였습니다.",
  "result": {
    "id": 2,
    "name": "이회원",
    "email": "[email protected]",
    "memberGrade": "ROLE_MEMBER",
    "memberStatus": "ACTIVE",
    "brands": [
      {
        "id": 1,
        "name": "메가 커피",
        "rewardDescription": "따뜻한 아메리카노 한 잔 무료 증정",
        "brandImageUrl": "https://example.com/images/brand1.jpg",
        "stampCount": 10,
        "couponItemStatus": "ACTIVE",
        "createdDate": "2023-07-31T12:15:00",
        "expiredDate": "2024-01-31T12:15:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 1,
        "couponItemStatus": "INACTIVE",
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      }
    ]
  }
}

🕝기획에서는 만료 시간을 기준으로 정렬해야한다고 했지만 생성 시간을 기준으로 정렬한 이유

  • 쿠폰 만료 시간은 쿠폰 생성 시간 + 6 개월로 계산 되므로, 쿠폰 생성 시간을 기준으로 정렬해도 동일한 효과라고 생각하여 이렇게 구현했습니다.
  • 쿠폰 도메인에는 현재 만료 시간 필드가 없는데요, 필드를 수정하지 않고 처리하려면 JPQL 에서 Date 연산을 해야 하는데 까다로워서.. 생성 시간만을 이용했습니다.

TODO

  1. TokenAuthenticationFilter
  2. Paging 처리 추가

순서로 진행해볼게요!

[before] dto/member
[after] dto/auth
- Http 메소드 + 도메인 + req/resp 형식으로 변경
- findByMemberIdOrderByStampCountAndCreatedDate 는 특정 회원이 가지고 있는 쿠폰을 1. 도장 개수 많은 순, 2. 생성시간이 빠른 순으로 조회.
- findByMemberIdOrderByCreatedDateAndStampCount 는 특정 회원이 가지고 있는 쿠폰을 1. 생성시간이 빠른 순, 2. 도장 개수가 많은 순으로 조회.
- findByMemberIdOrderByBrandName 는 특정 회원이 가지고 있는 쿠폰을 브랜드 이름으로 조회
- 회원이 소유한 쿠폰의 브랜드 리스트 조회 API
… into feature/member

# Conflicts:
#	src/main/java/com/example/couphoneserver/repository/CouponItemRepository.java
@akfrdma0125
Copy link
Collaborator

코드 확인했습니다!!

Copy link
Contributor

Choose a reason for hiding this comment

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

이미 있는 GetBrandResponse에 쿠폰 상태, 만료 시간만 추가해서 이용해도 될 것 같아요..!

Copy link
Member Author

Choose a reason for hiding this comment

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

오! 그러네요. 저녁에 반영해보도록 하겟습니다,,,

@akfrdma0125 akfrdma0125 merged commit e0a0906 into main Aug 4, 2023
2 checks passed
limsubinn pushed a commit that referenced this pull request Aug 5, 2023
fix: 회원이 가지고 있는 만료되지 않은 쿠폰에 대한 브랜드 리스트 조회 API 개발
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.

3 participants