diff --git a/src/apis/map/votePlace.ts b/src/apis/map/votePlace.ts index 65f9b58..92b63d5 100644 --- a/src/apis/map/votePlace.ts +++ b/src/apis/map/votePlace.ts @@ -1,6 +1,6 @@ import { instance } from '../instance'; import type { ApiEnvelope, ApiEnvelopeNullable } from '@/types/api.type'; -import type { AddCandidatePlaceRequest, AddCandidatePlaceResponse, GetCandidatePlacesResponse, PostVoteRequest } from '@/types/map/votePlace.type'; +import type { AddCandidatePlaceRequest, AddCandidatePlaceResponse, ConfirmPlaceRequest, GetCandidatePlacesResponse, PostVoteRequest } from '@/types/map/votePlace.type'; // 투표 후보지 목록 조회 export const getCandidatePlaces = async (promiseId: string): Promise> => { @@ -31,3 +31,15 @@ export const deleteVote = async (promiseId: string, candidateId: number): Promis const response = await instance.delete(`/promises/${promiseId}/votes/${candidateId}`); return response.data; }; + +// 장소 확정 +export const confirmPlace = async (promiseId: string, body: ConfirmPlaceRequest): Promise> => { + const response = await instance.post(`/promises/${promiseId}/confirmed`, body); + return response.data; +}; + +// 재투표 +export const postRevote = async (promiseId: string): Promise> => { + const response = await instance.post(`/promises/${promiseId}/revote`); + return response.data; +}; \ No newline at end of file diff --git a/src/pages/map/ConfirmedResult.tsx b/src/pages/map/ConfirmedResult.tsx index dfcb199..38245dd 100644 --- a/src/pages/map/ConfirmedResult.tsx +++ b/src/pages/map/ConfirmedResult.tsx @@ -1,20 +1,29 @@ import { useState } from 'react'; -import { useLocation } from 'react-router-dom'; +import { useParams } from 'react-router-dom'; import CandidatesCard from './components/CandidatesCard'; import CommonModal from '@/components/modal/CommonModal'; import PromiseStatusBadge from '@/components/common/PromiseStatusBadge'; import Header from '@/components/layout/Header'; +import { usePromiseDetail } from './services/usePromiseDetail'; +import { useGetCandidatePlaces } from './services/useVotePalce'; const ConfirmedResult = () => { - const { state } = useLocation(); - const promise = state?.promise; - const candidate = state?.confirmedCandidate; + const { promiseId } = useParams(); + const parsedPromiseId = Number(promiseId); + const { data: promise } = usePromiseDetail(parsedPromiseId); + const { data: candidatePlacesResponse } = useGetCandidatePlaces(promiseId); + const candidate = candidatePlacesResponse?.data.candidates.find(c => c.isConfirmed); const [isCalendarModalOpen, setIsCalendarModalOpen] = useState(false); - // 약속 날짜가 오늘인지 여부 - const today = - new Date().toDateString() === new Date(promise.date).toDateString(); + if (!promise || !candidate) return null; + + const today = new Date().toDateString() === new Date(promise.promisedAt).toDateString(); + const time = new Date(promise.promisedAt).toLocaleTimeString('ko-KR', { + hour: '2-digit', + minute: '2-digit', + hour12: false, + }); return (
@@ -42,7 +51,7 @@ const ConfirmedResult = () => { {promise.dayOfWeek}요일 {promise.title}

- 19:00 + {time}

@@ -56,9 +65,12 @@ const ConfirmedResult = () => { name={candidate.name} distance={candidate.distance} address={candidate.address} - createMember={candidate.createMember} - voteMember={candidate.voteMember} - voteCount={candidate.voteCount} + createMember={candidate.voteInfo.creator.nickname} + voteMember={candidate.voteInfo.voters + .filter(v => v.userId !== candidate.voteInfo.creator.userId) + .map(v => v.nickname) + .join(', ')} + voteCount={candidate.voteInfo.voteCount} memberCount={promise.memberCount} /> @@ -76,7 +88,6 @@ const ConfirmedResult = () => { ) : (