From f0a74e4ca81e6ce23347a66a5fa1e3892089f72f Mon Sep 17 00:00:00 2001 From: SEONG JIN JO <123255935+seong-jin-jo@users.noreply.github.com> Date: Sat, 1 Nov 2025 18:01:34 +0900 Subject: [PATCH 01/11] Update Dockerfile.prod --- Dockerfile.prod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile.prod b/Dockerfile.prod index cc21afa1..c465d4d1 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -9,7 +9,7 @@ COPY . . # 빌드시점에 .env 파일 복사 COPY .env .env -RUN yarn install && yarn build +RUN yarn install && yarn build --no-lint # 2단계: production FROM node:20-alpine AS runner @@ -34,4 +34,4 @@ RUN yarn install --production EXPOSE 3000 -CMD ["yarn", "start"] \ No newline at end of file +CMD ["yarn", "start"] From 5d71d0286f8ac0c80816f032c692d499650ae936 Mon Sep 17 00:00:00 2001 From: SEONG JIN JO <123255935+seong-jin-jo@users.noreply.github.com> Date: Sat, 1 Nov 2025 18:05:50 +0900 Subject: [PATCH 02/11] =?UTF-8?q?=EB=B0=B0=ED=8F=AC!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy-prod.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy-prod.yml b/.github/workflows/deploy-prod.yml index 894bfaf9..c0d87565 100644 --- a/.github/workflows/deploy-prod.yml +++ b/.github/workflows/deploy-prod.yml @@ -1,4 +1,4 @@ -# 도커 허브에 이미지 push 후 서버에 배포하는 방식 (25.11.1 이후) +# 도커 허브에 이미지 push 후 서버에 배포하는 방식 (25.11.1 시작) name: Front Production Server (Main) @@ -71,4 +71,4 @@ jobs: sudo docker compose -f docker-compose.prod.yml up -d --build echo "운영 서버 배포 완료" - EOF \ No newline at end of file + EOF From 2c693b94fc6f81a12d7b299e1d8a30b8cc02cbb1 Mon Sep 17 00:00:00 2001 From: aken-you Date: Sun, 2 Nov 2025 23:50:06 +0900 Subject: [PATCH 03/11] =?UTF-8?q?refactor:=20=EC=95=88=EC=93=B0=EB=8A=94?= =?UTF-8?q?=20completeStudy=20=ED=95=A8=EC=88=98=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/study/group/ui/group-study-detail-page.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/features/study/group/ui/group-study-detail-page.tsx b/src/features/study/group/ui/group-study-detail-page.tsx index eb2a2eb5..e76525a2 100644 --- a/src/features/study/group/ui/group-study-detail-page.tsx +++ b/src/features/study/group/ui/group-study-detail-page.tsx @@ -7,7 +7,6 @@ import Tabs from '@/shared/ui/tabs'; import ConfirmDeleteModal from './confirm-delete-modal'; import GroupStudyMemberList from './group-study-member-list'; import StudyInfoSection from './study-info-section'; -import { completeStudy } from '../../interview/api/get-interview'; import { GroupStudyDetailResponse } from '../api/group-study-types'; import ChannelSection from '../channel/ui/channel-section'; import { useGroupStudyMyStatusQuery } from '../model/use-group-study-my-status-query'; From db19869711e0561d681f97a318a51932c8afd7cf Mon Sep 17 00:00:00 2001 From: aken-you Date: Mon, 3 Nov 2025 23:29:30 +0900 Subject: [PATCH 04/11] =?UTF-8?q?refactor:=20=EA=B7=B8=EB=A3=B9=EC=8A=A4?= =?UTF-8?q?=ED=84=B0=EB=94=94=20=EC=8B=A0=EC=B2=AD=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=8B=A0=EC=B2=AD=20=EC=95=88=ED=96=88?= =?UTF-8?q?=EC=9D=84=20=EA=B2=BD=EC=9A=B0=EB=A5=BC=20=EB=82=98=ED=83=80?= =?UTF-8?q?=EB=82=B4=EB=8A=94=20=EC=83=81=ED=83=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/study/group/api/group-study-types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/features/study/group/api/group-study-types.ts b/src/features/study/group/api/group-study-types.ts index 53db249b..9d92d6fd 100644 --- a/src/features/study/group/api/group-study-types.ts +++ b/src/features/study/group/api/group-study-types.ts @@ -9,6 +9,7 @@ import { // 그룹 스터디 신청 상태 export type ApplicationStatus = + | 'NONE' // 신청 안함 | 'PENDING' // 승인 대기 | 'APPROVED' // 승인 수락 | 'REJECTED' // 승인 거절 From 43230b984e8eedc485e599de4847312225df8256 Mon Sep 17 00:00:00 2001 From: aken-you Date: Mon, 3 Nov 2025 23:48:49 +0900 Subject: [PATCH 05/11] =?UTF-8?q?fix:=20ApplyGroupStudyModal=EC=9D=98=20tr?= =?UTF-8?q?igger=EC=97=90=EC=84=9C=20SSR=20=EA=B2=B0=EA=B3=BC=EB=AC=BC?= =?UTF-8?q?=EA=B3=BC=20CSR=20=EA=B2=B0=EA=B3=BC=EB=AC=BC=EC=9D=B4=20?= =?UTF-8?q?=EB=8B=A4=EB=A5=B8=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../study/group/ui/group-study-detail-page.tsx | 1 + .../study/group/ui/study-info-section.tsx | 15 +++++++++++---- .../study/group/ui/summary-study-info.tsx | 11 ++++++++--- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/features/study/group/ui/group-study-detail-page.tsx b/src/features/study/group/ui/group-study-detail-page.tsx index e76525a2..f547b050 100644 --- a/src/features/study/group/ui/group-study-detail-page.tsx +++ b/src/features/study/group/ui/group-study-detail-page.tsx @@ -170,6 +170,7 @@ export default function StudyDetailPage({ {active === 'intro' && ( diff --git a/src/features/study/group/ui/study-info-section.tsx b/src/features/study/group/ui/study-info-section.tsx index 4dbcf2c6..b659a9b6 100644 --- a/src/features/study/group/ui/study-info-section.tsx +++ b/src/features/study/group/ui/study-info-section.tsx @@ -15,11 +15,11 @@ import { import Image from 'next/image'; import { useRouter } from 'next/navigation'; import React from 'react'; -import { hashValue } from '@/shared/lib/hash'; -import { getCookie } from '@/shared/tanstack-query/cookie'; import UserProfileModal from '@/entities/user/ui/user-profile-modal'; import { getSincerityPresetByLevelName } from '@/shared/config/sincerity-temp-presets'; +import { hashValue } from '@/shared/lib/hash'; import { cn } from '@/shared/shadcn/lib/utils'; +import { getCookie } from '@/shared/tanstack-query/cookie'; import UserAvatar from '@/shared/ui/avatar'; import Button from '@/shared/ui/button'; @@ -46,12 +46,14 @@ interface StudyInfoSectionProps { study: GroupStudyDetailResponse; groupStudyId: number; isLeader: boolean; + memberId?: number; } export default function StudyInfoSection({ study: studyDetail, groupStudyId, isLeader, + memberId, }: StudyInfoSectionProps) { const router = useRouter(); const { data: approvedApplicants } = useApplicantsByStatusQuery({ @@ -276,8 +278,12 @@ export default function StudyInfoSection({ sendGTMEvent({ event: 'group_study_member_profile_click', dl_timestamp: new Date().toISOString(), - ...(memberId && { dl_member_id: hashValue(memberId) }), - dl_target_member_id: String(data.applicantInfo.memberId), + ...(memberId && { + dl_member_id: hashValue(memberId), + }), + dl_target_member_id: String( + data.applicantInfo.memberId, + ), dl_group_study_id: String(groupStudyId), }); }} @@ -295,6 +301,7 @@ export default function StudyInfoSection({

{title}

@@ -67,9 +72,9 @@ export default function SummaryStudyInfo({ color="primary" className="h-[48px]" disabled={ - !!myApplicationStatus || + myApplicationStatus?.status !== 'NONE' || groupStudyStatus === 'IN_PROGRESS' || - !getCookie('memberId') + !isLoggedIn } > {myApplicationStatus?.status === 'APPROVED' || From 128f3eb4bbb7973b7fd408d4e84308cf2fa3f214 Mon Sep 17 00:00:00 2001 From: aken-you Date: Sun, 9 Nov 2025 14:30:37 +0900 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20=EC=B0=B8=EC=97=AC=EC=9E=90?= =?UTF-8?q?=EA=B0=80=20=EB=AA=A8=EC=A7=91=20=EC=9D=B8=EC=9B=90=EC=88=98?= =?UTF-8?q?=EB=B3=B4=EB=8B=A4=20=ED=81=AC=EA=B1=B0=EB=82=98=20=EA=B0=99?= =?UTF-8?q?=EC=9D=84=20=EA=B2=BD=EC=9A=B0,=20=EC=8B=A0=EC=B2=AD=ED=95=98?= =?UTF-8?q?=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EB=B9=84=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/features/study/group/api/group-study-types.ts | 2 +- .../study/group/ui/apply-group-study-modal.tsx | 11 +++++++---- src/features/study/group/ui/study-info-section.tsx | 2 ++ src/features/study/group/ui/summary-study-info.tsx | 12 ++++++++++-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/features/study/group/api/group-study-types.ts b/src/features/study/group/api/group-study-types.ts index 9d92d6fd..9d17f198 100644 --- a/src/features/study/group/api/group-study-types.ts +++ b/src/features/study/group/api/group-study-types.ts @@ -120,7 +120,7 @@ export interface GroupStudyData { } export interface InterviewPost { - interviewPost: string[]; + interviewPost: { question: string; id: number }[]; } // 그룹 스터디 신청 Request 타입 diff --git a/src/features/study/group/ui/apply-group-study-modal.tsx b/src/features/study/group/ui/apply-group-study-modal.tsx index ea18e62f..a8d69098 100644 --- a/src/features/study/group/ui/apply-group-study-modal.tsx +++ b/src/features/study/group/ui/apply-group-study-modal.tsx @@ -7,6 +7,7 @@ import { useController, useForm } from 'react-hook-form'; import Button from '@/shared/ui/button'; import Checkbox from '@/shared/ui/checkbox'; import { Modal } from '@/shared/ui/modal'; +import { GroupStudyDetailResponse } from '../api/group-study-types'; import { ApplyGroupStudyFormData, ApplyGroupStudyFormSchema, @@ -16,7 +17,7 @@ import { useApplyGroupStudyMutation } from '../model/use-apply-group-study'; interface ApplyGroupStudyModalProps { groupStudyId: number; title: string; - questions: string[]; + questions: GroupStudyDetailResponse['interviewPost']['interviewPost']; trigger: React.ReactNode; } @@ -64,7 +65,7 @@ function ApplyGroupStudyForm({ }: { groupStudyId: number; title: string; - questions: string[]; + questions: { question: string; id: number }[]; onClose: () => void; }) { const { @@ -87,6 +88,8 @@ function ApplyGroupStudyForm({ control, }); + console.log(questions); + const { mutate: applyGroupStudy } = useApplyGroupStudyMutation(groupStudyId); const onSubmit = (data: ApplyGroupStudyFormData) => { @@ -118,8 +121,8 @@ function ApplyGroupStudyForm({ className="flex flex-col gap-300" onSubmit={handleSubmit(onSubmit)} > - {questions.map((question, index) => ( -
+ {questions.map(({ question, id }, index) => ( +
-

{applicant.answer}

+ {applicant.interviewPost.map((q) => { + const matchedAnswer = applicant.answer.find((a) => a.id === q.id); + + return ( +
+

+ {q.id}. {q.question} +

+ +

+ {matchedAnswer?.answer ?? '—'} +

+
+ ); + })} +