diff --git a/src/@types/api.ts b/src/@types/api.ts index 727f7c11..d6e82d97 100644 --- a/src/@types/api.ts +++ b/src/@types/api.ts @@ -3,11 +3,19 @@ export interface APIError extends Error { message: string; } -export interface ApiResponse { +export interface FetcherError extends Error { + status?: number; +} + +export interface BaseResponse { status: string; data: T; } -export interface FetcherError extends Error { - status?: number; +export interface ListResponse { + status: string; + data: T[]; + total: number; + currentPage: number; + hasNext: boolean; } diff --git a/src/@types/travel.ts b/src/@types/travel.ts index 7ffc704a..6f2dc36d 100644 --- a/src/@types/travel.ts +++ b/src/@types/travel.ts @@ -1,17 +1,24 @@ export interface Travel { travelId: number; travelName: string; + description: string; + travelImage: string; + expectedTripCost?: number; + currentTravelMateCount: number; + minTravelMateCount: number; + maxTravelMateCount: number; + hashTags: string; isDomestic: boolean; - travelStatus?: string; - location: string; - image: string; + travelLocation: string; + departureLocation?: string; startAt: string; endAt: string; - maxTravelMateCount: number; - currentTravelMateCount: number; - formattedStartDate?: string; - expectedTripCost?: number; - isBookmark: boolean | null; + registrationEnd: string; + tripDuration: number; + travelPlan: TravelPlan[]; + participant: Participant[]; + participationFlag: boolean | null; + bookmarkFlag: boolean | null; } export interface TravelPlan { @@ -19,9 +26,23 @@ export interface TravelPlan { tripOrderNumber: number; destination: string; description: string; - image: string; + travelPlanImage: string; } +export type TravelCard = Pick< + Travel, + | 'travelId' + | 'travelImage' + | 'isDomestic' + | 'travelName' + | 'travelLocation' + | 'maxTravelMateCount' + | 'currentTravelMateCount' + | 'startAt' + | 'endAt' + | 'bookmarkFlag' +>; + export interface Participant { id: number; nickname: string; @@ -29,29 +50,6 @@ export interface Participant { profileImage: string; } -export interface TravelDetail { - travelId: number; - travelName: string; - description: string; - image: string; - expectedTripCost: number; - currentTravelMateCount: number; - minTravelMateCount: number; - maxTravelMateCount: number; - hashTags: string; - isDomestic: boolean; - travelLocation: string; - departureLocation: string; - startAt: string; - endAt: string; - registrationEnd: string; - tripDuration: number; - travelPlan: TravelPlan[]; - participant: Participant[]; - participationFlag: boolean | null; - bookmarkFlag: boolean | null; -} - export interface TravelReviewRateScore { oneStarReviews: number; twoStarReviews: number; @@ -103,7 +101,7 @@ export interface TravelList { } export interface MyTravel { - content: TravelList[]; + content: Travel[]; total: number; currentPage: number; hasNext: boolean; diff --git a/src/api/travel/travels.ts b/src/api/travel/travels.ts index 6d19a9df..146bfb5f 100644 --- a/src/api/travel/travels.ts +++ b/src/api/travel/travels.ts @@ -1,13 +1,13 @@ import { Filters, Travel, - TravelDetail, TravelFilterResponse, MyTravel, MyTravelResponse, + TravelCard, } from '@/@types/travel'; import buildTravelUrl from '@/utils/buildTravelUrl'; -import { ApiResponse } from '@/@types/api'; +import { BaseResponse } from '@/@types/api'; import { http } from '../fetcher'; export const postTravelParticipation = (travelId: number) => { @@ -23,17 +23,17 @@ export const deleteTravel = (travelId: number) => { }; export const getPopularTravel = () => { - return http.get>('/travels/popular'); + return http.get>('/travels/popular'); }; export const getTravelDetail = ({ id }: { id: string }) => { - return http.get>(`/travels/${id}`); + return http.get>(`/travels/${id}`); }; export const getTravels = (props: Filters & { pageParam?: number }) => { const { pageParam, ...filters } = props; const url = buildTravelUrl(filters, pageParam); - return http.get>(url); + return http.get>(url); }; export const postTravelBookMark = (id: number) => { diff --git a/src/components/card/travel/TravelCard.tsx b/src/components/card/travel/TravelCard.tsx index a44ab059..fe5184f8 100644 --- a/src/components/card/travel/TravelCard.tsx +++ b/src/components/card/travel/TravelCard.tsx @@ -1,7 +1,7 @@ import Image from 'next/image'; import Location from '@/assets/location.svg'; import ProfileICon from '@/assets/profile.svg'; -import { Travel } from '@/@types/travel'; +import { TravelCard as TravelCardProps } from '@/@types/travel'; import { useMemo, useState } from 'react'; import Link from 'next/link'; import cn from '@/utils/cn'; @@ -15,26 +15,24 @@ import ProgressBar from '../../common/progressbar/ProgressBar'; import ExpiredTag from '../../common/tag/ExpiredTag'; import CheckMarkButton from '../../common/button/CheckMarkButton'; -interface Props extends Omit { +interface Props extends TravelCardProps { closed?: boolean; - checkMark?: boolean; - isChecked?: boolean; + formattedStartDate?: string; } const TravelCard = ({ travelId, isDomestic, travelName, - location, + travelLocation, maxTravelMateCount, currentTravelMateCount, formattedStartDate, - image, + travelImage, closed, - checkMark, - isChecked, + bookmarkFlag, }: Props) => { - const [isCheckedState, setIsCheckedState] = useState(isChecked); + const [isCheckedState, setIsCheckedState] = useState(bookmarkFlag); const [animate, setAnimate] = useState(false); const progressRate = useMemo( @@ -79,8 +77,8 @@ const TravelCard = ({ )} > {`${travelName} )} - {checkMark && ( + {isCheckedState !== null && ( - {location} + {travelLocation} diff --git a/src/components/card/travel/TravelCardBig.tsx b/src/components/card/travel/TravelCardBig.tsx index 0fbba885..7d277c94 100644 --- a/src/components/card/travel/TravelCardBig.tsx +++ b/src/components/card/travel/TravelCardBig.tsx @@ -3,7 +3,7 @@ import Image from 'next/image'; import Location from '@/assets/location.svg'; import ProfileICon from '@/assets/profile.svg'; -import { Travel } from '@/@types/travel'; +import { TravelCard } from '@/@types/travel'; import { useMemo, useState } from 'react'; import Link from 'next/link'; import cn from '@/utils/cn'; @@ -17,25 +17,24 @@ import ProgressBar from '../../common/progressbar/ProgressBar'; import ExpiredTag from '../../common/tag/ExpiredTag'; import CheckMarkButton from '../../common/button/CheckMarkButton'; -interface Props extends Travel { +interface Props extends TravelCard { closed?: boolean; - isBookmark: boolean | null; } const TravelCardBig = ({ travelId, isDomestic, travelName, - location, + travelLocation, maxTravelMateCount, currentTravelMateCount, startAt, endAt, - image, + travelImage, closed, - isBookmark, + bookmarkFlag, }: Props) => { - const [isCheckedState, setIsCheckedState] = useState(isBookmark); + const [isCheckedState, setIsCheckedState] = useState(bookmarkFlag); const [animate, setAnimate] = useState(false); const progressRate = useMemo( @@ -75,8 +74,8 @@ const TravelCardBig = ({ })} > {`${travelName}
- {location} + {travelLocation}
diff --git a/src/components/card/travel/TravelPlanCard.tsx b/src/components/card/travel/TravelPlanCard.tsx index 4b7deeb9..00c09b14 100644 --- a/src/components/card/travel/TravelPlanCard.tsx +++ b/src/components/card/travel/TravelPlanCard.tsx @@ -3,7 +3,7 @@ import LocationIcon from '@/assets/location.svg'; import Image from 'next/image'; const TravelPlanCard = ({ - image, + travelPlanImage, destination, description, }: Omit) => { @@ -11,7 +11,7 @@ const TravelPlanCard = ({
{`${destination} { +const WeeklyPopular = ({ travelList }: { travelList: TravelCard[] }) => { if (travelList.length === 0) { return (
@@ -30,15 +30,15 @@ const WeeklyPopular = ({ travelList }: { travelList: Travel[] }) => { ))}
diff --git a/src/components/main/weeklyTravel/WeeklyPopularContainer.tsx b/src/components/main/weeklyTravel/WeeklyPopularContainer.tsx index 0b217eef..3a7f93b7 100644 --- a/src/components/main/weeklyTravel/WeeklyPopularContainer.tsx +++ b/src/components/main/weeklyTravel/WeeklyPopularContainer.tsx @@ -13,6 +13,7 @@ const WeeklyPopularContainer = async () => { queryKey: QUERY_KEYS.TRAVEL.POPULAR_TRAVEL, queryFn: getPopularTravel, }); + return ( diff --git a/src/components/mypage/contents/content/myReview/Writable.tsx b/src/components/mypage/contents/content/myReview/Writable.tsx index cf4efb9b..7778ee00 100644 --- a/src/components/mypage/contents/content/myReview/Writable.tsx +++ b/src/components/mypage/contents/content/myReview/Writable.tsx @@ -2,7 +2,6 @@ import { useState } from 'react'; import TravelCard from '@/components/card/travel/TravelCard'; import { checkTomorrow } from '@/utils/dateChangeKr'; import Link from 'next/link'; -import { TravelList } from '@/@types/travel'; import { useWritableTravel } from '@/queries/travel/useGetMyTravel'; import Pagination from '@/components/common/pagination/Pagination'; import HorizontalDivider from '@/components/common/divider/HorizontalDivider'; @@ -31,7 +30,7 @@ const Writable = () => { > {travels && travels.total > 0 ? (
- {travels.content.map((travel: TravelList) => ( + {travels.content.map((travel) => (
{ maxTravelMateCount={travel.maxTravelMateCount} currentTravelMateCount={travel.currentTravelMateCount} isDomestic={travel.isDomestic} - location={travel.location} - image={travel.image} + travelLocation={travel.travelLocation} + travelImage={travel.travelImage} startAt={travel.startAt} endAt={travel.endAt} formattedStartDate={checkTomorrow(travel.startAt)} + bookmarkFlag closed /> diff --git a/src/components/mypage/contents/content/mySelfTravel/MySelfTravel.tsx b/src/components/mypage/contents/content/mySelfTravel/MySelfTravel.tsx index 4711f812..c9c7c94e 100644 --- a/src/components/mypage/contents/content/mySelfTravel/MySelfTravel.tsx +++ b/src/components/mypage/contents/content/mySelfTravel/MySelfTravel.tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import TravelCard from '@/components/card/travel/TravelCard'; import Pagination from '@/components/common/pagination/Pagination'; import { useMySelfTravel } from '@/queries/travel/useGetMyTravel'; -import { TravelList } from '@/@types/travel'; +import { TravelCard as TravelCardProps } from '@/@types/travel'; import HorizontalDivider from '@/components/common/divider/HorizontalDivider'; import MyTravelCardSkeleton from '@/components/mypage/skeleton/MyTravelCardSkeleton'; import NoTravel from '../myTravel/NoTravel'; @@ -28,7 +28,7 @@ const MySelfTravel = () => { > {travels && travels.data.total > 0 ? (
- {travels.data.content.map((travel: TravelList) => ( + {travels.data.content.map((travel: TravelCardProps) => (
{ maxTravelMateCount={travel.maxTravelMateCount} currentTravelMateCount={travel.currentTravelMateCount} isDomestic={travel.isDomestic} - location={travel.location} - image={travel.image} + travelLocation={travel.travelLocation} + travelImage={travel.travelImage} startAt={travel.startAt} endAt={travel.endAt} + bookmarkFlag formattedStartDate={checkTomorrow(travel.startAt)} /> diff --git a/src/components/mypage/contents/content/myTravel/CheckedTravel.tsx b/src/components/mypage/contents/content/myTravel/CheckedTravel.tsx index 4f7bb639..1e955064 100644 --- a/src/components/mypage/contents/content/myTravel/CheckedTravel.tsx +++ b/src/components/mypage/contents/content/myTravel/CheckedTravel.tsx @@ -3,7 +3,7 @@ import Pagination from '@/components/common/pagination/Pagination'; import { checkTomorrow } from '@/utils/dateChangeKr'; import { useState } from 'react'; import { useCheckedTravel } from '@/queries/travel/useGetMyTravel'; -import { TravelList } from '@/@types/travel'; +import { TravelCard as TravelCardProps } from '@/@types/travel'; import HorizontalDivider from '@/components/common/divider/HorizontalDivider'; import MyTravelCardSkeleton from '@/components/mypage/skeleton/MyTravelCardSkeleton'; import NoTravel from './NoTravel'; @@ -28,7 +28,7 @@ const CheckedTravel = () => { > {travels && travels.data.total > 0 ? (
- {travels.data.content.map((travel: TravelList) => ( + {travels.data.content.map((travel: TravelCardProps) => (
{ maxTravelMateCount={travel.maxTravelMateCount} currentTravelMateCount={travel.currentTravelMateCount} isDomestic={travel.isDomestic} - location={travel.location} - image={travel.image} + travelLocation={travel.travelLocation} + travelImage={travel.travelImage} startAt={travel.startAt} endAt={travel.endAt} formattedStartDate={checkTomorrow(travel.startAt)} - checkMark - isChecked + bookmarkFlag />
diff --git a/src/components/mypage/contents/content/myTravel/PastTravel.tsx b/src/components/mypage/contents/content/myTravel/PastTravel.tsx index 90de9e20..3e07cc59 100644 --- a/src/components/mypage/contents/content/myTravel/PastTravel.tsx +++ b/src/components/mypage/contents/content/myTravel/PastTravel.tsx @@ -3,7 +3,7 @@ import Pagination from '@/components/common/pagination/Pagination'; import { checkTomorrow } from '@/utils/dateChangeKr'; import { useState } from 'react'; import { usePastTravel } from '@/queries/travel/useGetMyTravel'; -import { TravelList } from '@/@types/travel'; +import { TravelCard as TravelCardProps } from '@/@types/travel'; import HorizontalDivider from '@/components/common/divider/HorizontalDivider'; import MyTravelCardSkeleton from '@/components/mypage/skeleton/MyTravelCardSkeleton'; import NoTravel from './NoTravel'; @@ -28,7 +28,7 @@ const PastTravel = () => { > {travels && travels.data.total > 0 ? (
- {travels.data.content.map((travel: TravelList) => ( + {travels.data.content.map((travel: TravelCardProps) => (
{ maxTravelMateCount={travel.maxTravelMateCount} currentTravelMateCount={travel.currentTravelMateCount} isDomestic={travel.isDomestic} - location={travel.location} - image={travel.image} + travelLocation={travel.travelLocation} + travelImage={travel.travelImage} startAt={travel.startAt} endAt={travel.endAt} formattedStartDate={checkTomorrow(travel.startAt)} + bookmarkFlag closed /> diff --git a/src/components/travel/detail/TravelDetail.tsx b/src/components/travel/detail/TravelDetail.tsx index 910e1ad6..fdce9102 100644 --- a/src/components/travel/detail/TravelDetail.tsx +++ b/src/components/travel/detail/TravelDetail.tsx @@ -1,11 +1,11 @@ import TravelInformation from '@/components/travel/detail/information/TravelInformation'; -import { TravelDetail as TravelType } from '@/@types/travel'; +import { Travel } from '@/@types/travel'; import dayjs from 'dayjs'; import TravelDetailCategory from './TravelDetailCategory'; import TravelImage from './image/TravelImage'; import TravelButtons from './buttons/TravelButtons'; -const TravelDetail = ({ travelDetail }: { travelDetail: TravelType }) => { +const TravelDetail = ({ travelDetail }: { travelDetail: Travel }) => { const organizer = travelDetail && travelDetail.participant.find((part) => part.role === 'ORGANIZER'); @@ -17,7 +17,7 @@ const TravelDetail = ({ travelDetail }: { travelDetail: TravelType }) => {
diff --git a/src/components/travel/detail/TravelDetailCategory.tsx b/src/components/travel/detail/TravelDetailCategory.tsx index 89831f14..32fb0a16 100644 --- a/src/components/travel/detail/TravelDetailCategory.tsx +++ b/src/components/travel/detail/TravelDetailCategory.tsx @@ -1,6 +1,6 @@ 'use client'; -import { Participant, TravelDetail } from '@/@types/travel'; +import { Participant, Travel } from '@/@types/travel'; import React, { Suspense, useState } from 'react'; import dayjs from 'dayjs'; import SpinnerIcon from '@/assets/spinner_round.svg'; @@ -8,7 +8,7 @@ import TabTravelReview from './category/TabTravelReview'; import TabTravelDetail from './category/TabTravelDetail'; type Props = Pick< - TravelDetail, + Travel, | 'travelId' | 'hashTags' | 'description' diff --git a/src/components/travel/detail/category/TabTravelItinerary.tsx b/src/components/travel/detail/category/TabTravelItinerary.tsx index 69e2b41e..20ddc0d3 100644 --- a/src/components/travel/detail/category/TabTravelItinerary.tsx +++ b/src/components/travel/detail/category/TabTravelItinerary.tsx @@ -1,12 +1,12 @@ 'use client'; -import { TravelDetail } from '@/@types/travel'; +import { Travel } from '@/@types/travel'; import ArrowDownIcon from '@/assets/arrow_down.svg'; import { useState } from 'react'; import { formatDateToShortWithDay } from '@/utils/dateChangeKr'; import TravelPlanCard from '../../../card/travel/TravelPlanCard'; -type Props = Pick; +type Props = Pick; const TabTravelItinerary = ({ tripDuration, travelPlan, startAt }: Props) => { const [isOpen, setIsOpen] = useState>(new Set()); @@ -69,7 +69,7 @@ const TabTravelItinerary = ({ tripDuration, travelPlan, startAt }: Props) => { diff --git a/src/components/travel/detail/category/TabTravelReview.tsx b/src/components/travel/detail/category/TabTravelReview.tsx index 98baef2e..cb856b95 100644 --- a/src/components/travel/detail/category/TabTravelReview.tsx +++ b/src/components/travel/detail/category/TabTravelReview.tsx @@ -42,7 +42,7 @@ const TabTravelReview = ({ travelId }: { travelId: number }) => { {data && data.pages.map((reviewList) => reviewList.data.content.map((review) => ( - +
@@ -28,7 +28,7 @@ const ScoreBox = ({
- {[1, 2, 3, 4, 5].map((v) => ( + {scores.map((v) => ( ))}
diff --git a/src/components/travel/list/TravelList.tsx b/src/components/travel/list/TravelList.tsx index f5a10858..0ce84f06 100644 --- a/src/components/travel/list/TravelList.tsx +++ b/src/components/travel/list/TravelList.tsx @@ -4,7 +4,7 @@ import NoResult from '@/components/common/NoResult'; import { useTravelListStore } from '@/store/useTravelListStore'; import { useEffect } from 'react'; import { useInView } from 'react-intersection-observer'; -import { checkTomorrow } from '@/utils/dateChangeKr'; + import useGetTravelsList from '@/queries/travel/useGetTravelsList'; import { InitialFilters } from '@/@types/travel'; import TravelCardBig from '@/components/card/travel/TravelCardBig'; @@ -64,16 +64,15 @@ const TravelList = () => { )), )}