diff --git a/src/ReviewRequest/list/apis/query-pr-reviews.ts b/src/ReviewRequest/list/apis/query-pr-reviews.ts new file mode 100644 index 0000000..f3c9e44 --- /dev/null +++ b/src/ReviewRequest/list/apis/query-pr-reviews.ts @@ -0,0 +1,49 @@ +import { apiClient } from "@/common/api"; +import type { ApiResponse } from "@/common/types/api"; + +export interface QueryPrReviewsQueryParams { + /** PR 현재 상태 : 보내지 않을시 모든 상태 조회 */ + status?: "open" | "closed"; + /** 정렬 순서 */ + order?: "createdAt-desc" | "createdAt-asc" | "hitCount-desc" | "hitCount-asc"; + /** 직군별 필터링 */ + position?: "BACKEND" | "FRONTEND"; + /** 마지막으로 조회된 요청글 id */ + lastReviewId?: number; + /** 페이지 사이즈 (기본 20) */ + size?: number; +} + +/** + * PR 리뷰 요청글 리스트 아이템 + * @ + */ +export interface PrReviewListItem { + /** 작성자 프로필 사진 URL */ + profileImageUrl: string; + /** 작성자 유저 태그 */ + username: string; + /** 요청글 상태 */ + status: string; + /** 분야 태그 */ + position: string; + /** PR 리뷰 요청글 제목 */ + title: string; + /** 조회수 */ + hitCount: number; + /** 작성일자/시각 */ + createdAt: string; +} + +export interface QueryPrReviewsResponse { + /** PR 리뷰 요청글 리스트 */ + prReviews: PrReviewListItem[]; + /** 마지막 페이지 여부 */ + isLast: boolean; +} + +export async function queryPrReviews(params?: QueryPrReviewsQueryParams): Promise> { + return apiClient.get("api/v1/pr-reviews", { + searchParams: params as Record, + }); +} diff --git a/src/ReviewRequest/list/hooks/apis/querykeys.ts b/src/ReviewRequest/list/hooks/apis/querykeys.ts new file mode 100644 index 0000000..aaf6ac5 --- /dev/null +++ b/src/ReviewRequest/list/hooks/apis/querykeys.ts @@ -0,0 +1,6 @@ +import type { QueryPrReviewsQueryParams } from "../../apis/query-pr-reviews"; + +export const prListQueryKeys = { + all: () => ["pr-list"], + prReviews: (params?: QueryPrReviewsQueryParams) => [...prListQueryKeys.all(), "pr-reviews", params], +}; diff --git a/src/ReviewRequest/list/hooks/apis/useQueryPrReviews.ts b/src/ReviewRequest/list/hooks/apis/useQueryPrReviews.ts new file mode 100644 index 0000000..d12fa5e --- /dev/null +++ b/src/ReviewRequest/list/hooks/apis/useQueryPrReviews.ts @@ -0,0 +1,15 @@ +import type { ApiResponse } from "@/common/types/api"; +import { useQuery } from "@tanstack/react-query"; +import { + type QueryPrReviewsQueryParams, + type QueryPrReviewsResponse, + queryPrReviews, +} from "../../apis/query-pr-reviews"; +import { prListQueryKeys } from "./querykeys"; + +export const useQueryPrReviews = (params?: QueryPrReviewsQueryParams) => { + return useQuery, Error>({ + queryFn: () => queryPrReviews(params), + queryKey: prListQueryKeys.prReviews(params), + }); +};