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

feat: 회원이 가지고 있는 쿠폰에 대한 브랜드 리스트 조회 API 개발 #16

Closed
wants to merge 12 commits into from

Conversation

versatile0010
Copy link
Member

Member API

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

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

[정렬 조건]

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

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

🕝기획에서는 만료 시간을 기준으로 정렬해야한다고 했지만 생성 시간을 기준으로 정렬한 이유 [검토 필요합니다.]

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

Response 예시

  • sort = 1 (default) 스탬프 많은 순, 쿠폰 생성 시간이 이른 순
{
  "code": 1000,
  "status": 200,
  "message": "요청에 성공하였습니다.",
  "result": {
    "id": 1,
    "name": "김회원",
    "email": "[email protected]",
    "memberGrade": "ROLE_MEMBER",
    "memberStatus": "ACTIVE",
    "brands": [
      {
        "id": 1,
        "name": "메가 커피",
        "rewardDescription": "따뜻한 아메리카노 한 잔 무료 증정",
        "brandImageUrl": "https://example.com/images/brand1.jpg",
        "stampCount": 5,
        "createdDate": "2023-07-31T12:15:00",
        "expiredDate": "2024-01-31T12:15:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 4,
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 3,
        "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,
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 3,
        "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,
        "createdDate": "2023-07-31T12:15:00",
        "expiredDate": "2024-01-31T12:15:00"
      }
    ]
  }
}
  • sort = 3 (브랜드 이름 순으로 정렬)
{
  "code": 1000,
  "status": 200,
  "message": "요청에 성공하였습니다.",
  "result": {
    "id": 1,
    "name": "김회원",
    "email": "[email protected]",
    "memberGrade": "ROLE_MEMBER",
    "memberStatus": "ACTIVE",
    "brands": [
      {
        "id": 1,
        "name": "메가 커피",
        "rewardDescription": "따뜻한 아메리카노 한 잔 무료 증정",
        "brandImageUrl": "https://example.com/images/brand1.jpg",
        "stampCount": 5,
        "createdDate": "2023-07-31T12:15:00",
        "expiredDate": "2024-01-31T12:15:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 3,
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      },
      {
        "id": 2,
        "name": "버거킹",
        "rewardDescription": "주니어 와퍼 한 개 무료 증정",
        "brandImageUrl": "https://example.com/images/brand3.jpg",
        "stampCount": 4,
        "createdDate": "2023-07-29T10:00:00",
        "expiredDate": "2024-01-29T10:00:00"
      }
    ]
  }
}

검토 후 이상한 점이 있으면,, 알려주세요! 🥲

TODO

  • TokenAuthenticationFilter 로직 수정 (금일 pr 예정)

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

정렬 기준을 생성 시간이 되는 게 저도 맞다고 생각하는데, 다만 6개월이 지난 쿠폰에 대해서는 조회하지 않는 조건은 필요하지 않나 싶습니다!!
또한 혹시 시간 남으시면 페이징 처리도 해도 될 것 같아요!

@versatile0010
Copy link
Member Author

헉 그러네요. 만료된 쿠폰을 고려하지 못했네요.
음, Coupon 의 상태가 EXPIRED 가 아니여야 한다. 라는 쿼리를 추가하면 해결될 것 같아요!

이 부분 반영해서 PR 다시 올릴게요!

… into feature/member

# Conflicts:
#	src/main/java/com/example/couphoneserver/repository/CouponItemRepository.java
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