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: cursor 데이터 일치 #163

Closed
wants to merge 5 commits into from
Closed

fix: cursor 데이터 일치 #163

wants to merge 5 commits into from

Conversation

GaBaljaintheroom
Copy link
Contributor

@GaBaljaintheroom GaBaljaintheroom commented Sep 12, 2024

😋 작업한 내용

  • front 요청 시 cursorId, cursorValue로 요청 스키마 일치
  • cursor 기반 목록 조회 응답 시 {”cursor” : {”id” : “”, “value” : ””}} 형식 일치
  • 목록 조회 개수 최소 개수는 10, 최대 개수는 30으로 validation

🙏 PR Point

  • 이 브랜치 역시 fix/structures에서 분기 하였습니다.
  • fix/structures 머지가 된 이후에 머지가능 합니다.

👍 관련 이슈


@GaBaljaintheroom GaBaljaintheroom added the fix fix feature label Sep 12, 2024
@GaBaljaintheroom GaBaljaintheroom self-assigned this Sep 12, 2024
@devmizz
Copy link
Contributor

devmizz commented Sep 14, 2024

@GaBaljaintheroom 해당 기능은 fix/structure랑 아예 별개니깐 temp-develop에서 분기를 따도 좋을 거 같아요

@Schema(description = "조회한 데이터의 Cursor Value")
Object value
) {
public static CursorApiResponse toCursor(UUID id, Object value) {
Copy link
Contributor

Choose a reason for hiding this comment

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

리뷰 포인트: 2
toCursor라고 하면, Cursor 객체 그 자체일 거 같은 느낌이 들어서, toCursorResponse라고 명시하는 건 어떨까요?


@Parameter(description = "조회하는 데이터 개수", required = true)
@Min(value = 10, message = "조회하는 데이터 개수는 최소 10개 이어야 합니다.")
@Max(value = 30, message = "조회하는 데이터 개수는 최대 30개 이어야 합니다.")
Copy link
Contributor

Choose a reason for hiding this comment

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

리뷰 포인트: 5
default 30, min은 없고, maz 30이에요!
입력이 들어오지 않았을 때 30으로 기본 할당 되어야 해요!
image

@devmizz
Copy link
Contributor

devmizz commented Sep 15, 2024

준수님 default 값 할당이 안 보이는데, 혹시 제가 놓친 포인트가 있을까요?

  • Swagger 상에 default가 30이라고 description에 명시되어 있으면 좋을 거 같슴다

@GaBaljaintheroom
Copy link
Contributor Author

수정완료했습니당

@devmizz
Copy link
Contributor

devmizz commented Sep 15, 2024

@GaBaljaintheroom 혹시 이런 방식은 어때요?

package com.example.genre.controller.dto.request;

import com.example.genre.service.dto.request.GenreUnsubscriptionPaginationServiceRequest;
import com.example.vo.SubscriptionStatusApiType;
import io.swagger.v3.oas.annotations.Parameter;
import java.util.UUID;

public record GenreUnsubscriptionPaginationApiRequest(
    @Parameter(description = "이전 페이지네이션 마지막 데이터의 ID / 최초 조회라면 null")
    UUID cursor,

    @Parameter(description = "조회하는 데이터 개수")
    String size
) {

    public GenreUnsubscriptionPaginationApiRequest(UUID cursor, String size) {
        this.cursor = cursor;
        this.size = size == null ? "30" : size;
    }

    public GenreUnsubscriptionPaginationServiceRequest toServiceRequest(UUID userId) {
        return GenreUnsubscriptionPaginationServiceRequest.builder()
            .subscriptionStatusApiType(SubscriptionStatusApiType.UNSUBSCRIBED)
            .cursor(cursor)
            .size(Integer.parseInt(size))
            .userId(userId)
            .build();
    }
}

이유는,

  1. common에 들어갈 내용인가? -> 다른 모듈에서는 default가 다르다면?
  2. Validator가 해야할 일인가? -> null 체크 및 기본값 할당이 제약 조건이라고 보기에는 어렵지 않나?
  3. Validator가 getDefaultSize라는 메서드를 갖는 게 맞나? -> 검사하겠다는 클래스가 기본값을 내려주는 건 이상한데?
    와 같습니다! 그래서 각각의 request body에서 핸들링 하는 게 낫지 않나 싶었어요!

@GaBaljaintheroom GaBaljaintheroom changed the base branch from fix/structrues to develop September 15, 2024 13:49
@GaBaljaintheroom
Copy link
Contributor Author

    @GetMapping("/unsubscriptions")
    @Operation(summary = "구독하지 않은 아티스트 목록 조회")
    public ResponseEntity<PaginationApiResponse<ArtistUnsubscriptionPaginationApiParam>> getUnsubscribedArtists(
        @AuthenticationPrincipal AuthenticatedUser user,
        @Valid @ParameterObject ArtistUnsubscriptionPaginationApiRequest request,
        @RequestParam(defaultValue = "30") @Max(value = 30, message = "조회하는 데이터 개수는 최대 30개 이어야 합니다.") int size
    ) {
        var response =
            (user == null)
                ? artistService.findArtistUnsubscriptionsForNonUser(
                request.toNonUserServiceRequest(size)
            )
                : artistService.findArtistUnsubscriptions(
                    request.toServiceRequest(user.userId(), size)
                );

        var data = response.data().stream()
            .map(ArtistUnsubscriptionPaginationApiParam::from)
            .toList();

        return ResponseEntity.ok(
            PaginationApiResponse.<ArtistUnsubscriptionPaginationApiParam>builder()
                .hasNext(response.hasNext())
                .data(data)
                .build()
        );
    }```
    
    찬기님 혹시 이런식으로 빼는  어떻게 생각하시나요? Swagger로도 명시적으로용

@GaBaljaintheroom GaBaljaintheroom deleted the fix/cursor branch September 16, 2024 02:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fix fix feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants