From 290f6ce7f3b9189638841b7ec875f5792d5c5325 Mon Sep 17 00:00:00 2001 From: JungSoEun <85235356+ssilver01@users.noreply.github.com> Date: Tue, 15 Jul 2025 14:24:28 +0900 Subject: [PATCH 1/4] =?UTF-8?q?fix(sevice):=20homeheader=20=EC=9D=B4?= =?UTF-8?q?=EB=A6=84,=20=ED=95=99=EB=85=84=20=EA=B0=80=EC=A0=B8=EC=98=A4?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/service/src/apis/authMiddleware.ts | 3 ++- apps/service/src/app/onboarding/page.tsx | 3 ++- apps/service/src/components/home/HomeHeader.tsx | 7 +++++-- apps/service/src/utils/common/auth.ts | 13 ++++++++++++- 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/apps/service/src/apis/authMiddleware.ts b/apps/service/src/apis/authMiddleware.ts index 33de2eaf..cc42ab27 100644 --- a/apps/service/src/apis/authMiddleware.ts +++ b/apps/service/src/apis/authMiddleware.ts @@ -1,7 +1,7 @@ 'use client'; import { Middleware } from 'openapi-fetch'; -import { getAccessToken, setAccessToken, setName, setRefreshToken } from '@utils'; +import { getAccessToken, setAccessToken, setGrade, setName, setRefreshToken } from '@utils'; import { postRefreshToken } from '@/apis/controller/auth'; const UNPROTECTED_ROUTES = ['/api/student/auth/social/login', '/api/common/auth/refresh']; @@ -32,6 +32,7 @@ const reissueToken = async () => { } if (result.data?.name) { setName(result.data.name); + setGrade(result.data.grade); } return accessToken; }; diff --git a/apps/service/src/app/onboarding/page.tsx b/apps/service/src/app/onboarding/page.tsx index bae6d5d1..12de9146 100644 --- a/apps/service/src/app/onboarding/page.tsx +++ b/apps/service/src/app/onboarding/page.tsx @@ -6,7 +6,7 @@ import { useEffect, useState } from 'react'; import { Button, Header } from '@components'; import { postUserInfo } from '@/apis/controller/auth'; -import { setName } from '@utils'; +import { setName, setGrade } from '@utils'; import UserInfoForm from '@/components/onboarding/UserInfoForm'; const Page = () => { @@ -26,6 +26,7 @@ const Page = () => { if (result.isSuccess) { if (result.data) { setName(result.data.name); + setGrade(result.data.grade); } router.push('/'); } else { diff --git a/apps/service/src/components/home/HomeHeader.tsx b/apps/service/src/components/home/HomeHeader.tsx index e3b7cbb2..18618409 100644 --- a/apps/service/src/components/home/HomeHeader.tsx +++ b/apps/service/src/components/home/HomeHeader.tsx @@ -1,8 +1,11 @@ import Link from 'next/link'; import { IcSetting } from '@svg'; import { LogoHeader } from '@/assets/svg/logo'; +import { getName, getGrade } from '@/utils/common/auth'; const HomeHeader = () => { + const name = getName(); + const grade = getGrade(); return (
@@ -11,12 +14,12 @@ const HomeHeader = () => {
{/* TODO: 학년 받아오기 */}
- 2학년 + {grade}학년
{/* TODO: 이름 받아오기 */} <> - 홍길동님 + {name}
diff --git a/apps/service/src/utils/common/auth.ts b/apps/service/src/utils/common/auth.ts index 3ffebfad..4f86c56c 100644 --- a/apps/service/src/utils/common/auth.ts +++ b/apps/service/src/utils/common/auth.ts @@ -5,5 +5,16 @@ const setRefreshToken = (refreshToken: string) => localStorage.setItem('refreshToken', refreshToken); const getName = () => localStorage.getItem('name'); const setName = (name: string) => localStorage.setItem('name', name); +const getGrade = () => localStorage.getItem('grade'); +const setGrade = (grade: number) => localStorage.setItem('grade', grade.toString()); -export { getAccessToken, setAccessToken, getRefreshToken, setRefreshToken, getName, setName }; +export { + getAccessToken, + setAccessToken, + getRefreshToken, + setRefreshToken, + getName, + setName, + setGrade, + getGrade, +}; From dfb5ed7d904e09196d860d479fb2b74f6973bc85 Mon Sep 17 00:00:00 2001 From: JungSoEun <85235356+ssilver01@users.noreply.github.com> Date: Wed, 16 Jul 2025 10:48:56 +0900 Subject: [PATCH 2/4] =?UTF-8?q?fix(service):=20=EB=AC=B8=EC=A0=9C=20?= =?UTF-8?q?=ED=92=80=EB=9F=AC=EA=B0=80=EA=B8=B0=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../home/ProblemCard/ProblemCard.tsx | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/apps/service/src/components/home/ProblemCard/ProblemCard.tsx b/apps/service/src/components/home/ProblemCard/ProblemCard.tsx index bfd95bf6..768aba1d 100644 --- a/apps/service/src/components/home/ProblemCard/ProblemCard.tsx +++ b/apps/service/src/components/home/ProblemCard/ProblemCard.tsx @@ -10,10 +10,9 @@ interface Props { dateString: string; title: string; image: string; - solvedCount: number; } -const ProblemCard = ({ publishId, dateString, title, image, solvedCount }: Props) => { +const ProblemCard = ({ publishId, dateString, title, image }: Props) => { const router = useRouter(); const handleClickProblem = () => { @@ -44,17 +43,10 @@ const ProblemCard = ({ publishId, dateString, title, image, solvedCount }: Props className={`from-sub2 absolute bottom-0 left-0 h-[8.9rem] w-full bg-gradient-to-t to-transparent`} />
-
-

- - {solvedCount}명이 문제를 풀었어요! - -

- -
+ ); }; From e4d9023d28028aa6ab3a5b62e8721002c93b69f7 Mon Sep 17 00:00:00 2001 From: JungSoEun <85235356+ssilver01@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:01:57 +0900 Subject: [PATCH 3/4] =?UTF-8?q?chore(package):=20ProblemViewer=EB=A5=BC=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20?= =?UTF-8?q?=EC=84=B8=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/service/package.json | 1 + apps/service/tsconfig.json | 62 +++++++++++++++++++++------- packages/pointer-editor/index.d.ts | 22 ++++++++++ packages/pointer-editor/package.json | 9 +++- 4 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 packages/pointer-editor/index.d.ts diff --git a/apps/service/package.json b/apps/service/package.json index 2cf1f7a2..9a574941 100644 --- a/apps/service/package.json +++ b/apps/service/package.json @@ -12,6 +12,7 @@ "dependencies": { "@next/third-parties": "^15.2.4", "@repo/pointer-design-system": "workspace:*", + "@repo/pointer-editor": "workspace:*", "@tanstack/react-query": "^5.66.0", "@tanstack/react-query-devtools": "^5.66.0", "dayjs": "^1.11.13", diff --git a/apps/service/tsconfig.json b/apps/service/tsconfig.json index f96f0586..db96deb9 100644 --- a/apps/service/tsconfig.json +++ b/apps/service/tsconfig.json @@ -2,7 +2,11 @@ "compilerOptions": { "composite": true, "target": "ES2017", - "lib": ["dom", "dom.iterable", "esnext"], + "lib": [ + "dom", + "dom.iterable", + "esnext" + ], "allowJs": true, "skipLibCheck": true, "strict": true, @@ -20,18 +24,48 @@ } ], "paths": { - "@apis": ["./src/apis"], - "@svg": ["./src/assets/svg"], - "@image": ["./public/image"], - "@components": ["./src/components/common"], - "@contexts": ["./src/contexts"], - "@hooks": ["./src/hooks/common"], - "@types": ["./src/types"], - "@schema": ["./src/types/api/schema.d.ts"], - "@utils": ["./src/utils/common"], - "@/*": ["./src/*"] + "@apis": [ + "./src/apis" + ], + "@svg": [ + "./src/assets/svg" + ], + "@image": [ + "./public/image" + ], + "@components": [ + "./src/components/common" + ], + "@contexts": [ + "./src/contexts" + ], + "@hooks": [ + "./src/hooks/common" + ], + "@types": [ + "./src/types" + ], + "@schema": [ + "./src/types/api/schema.d.ts" + ], + "@utils": [ + "./src/utils/common" + ], + "@/*": [ + "./src/*" + ], + "@repo/pointer-editor/*": [ + "../../packages/pointer-editor" + ] } }, - "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], - "exclude": ["node_modules"] -} + "include": [ + "next-env.d.ts", + "**/*.ts", + "**/*.tsx", + ".next/types/**/*.ts" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/packages/pointer-editor/index.d.ts b/packages/pointer-editor/index.d.ts new file mode 100644 index 00000000..e11bb9dd --- /dev/null +++ b/packages/pointer-editor/index.d.ts @@ -0,0 +1,22 @@ +import React from 'react'; + +export interface ProblemBlock { + type: 'TEXT' | 'IMAGE'; + content?: string; + data?: string; + style?: string; +} + +export interface Problem { + id: number; + title: string; + blocks: ProblemBlock[]; +} + +export interface ProblemViewerProps { + problem: Problem; + loading?: boolean; +} + +export default ProblemViewer; +export { EditorModal }; diff --git a/packages/pointer-editor/package.json b/packages/pointer-editor/package.json index e176eec4..692633ef 100644 --- a/packages/pointer-editor/package.json +++ b/packages/pointer-editor/package.json @@ -3,7 +3,14 @@ "version": "1.0.0", "main": "index.js", "exports": { - ".": "./libs/components/EditorModal.jsx" + ".": { + "import": "./libs/components/EditorModal.jsx", + "types": "./index.d.ts" + }, + "./ProblemViewer": { + "import": "./libs/components/viewer/ProblemViewer.jsx", + "types": "./index.d.ts" + } }, "scripts": { "dev": "vite", From 16b991c82d4de0f9779d1ab42d234938134947b6 Mon Sep 17 00:00:00 2001 From: JungSoEun <85235356+ssilver01@users.noreply.github.com> Date: Wed, 16 Jul 2025 15:16:27 +0900 Subject: [PATCH 4/4] =?UTF-8?q?feat(service):=20=ED=99=88=ED=99=94?= =?UTF-8?q?=EB=A9=B4=20=EB=AC=B8=EC=A0=9C=20=EC=B9=B4=EB=93=9C=20ProblemVi?= =?UTF-8?q?ewer=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/service/public/svg/ic-question-white.svg | 3 +++ .../service/src/apis/controller/home/index.ts | 9 ++++++- .../controller/home/useGetWeeklyPublish.ts | 7 ++++++ apps/service/src/app/(home)/page.tsx | 14 +++++++---- .../src/assets/svg/IcQuestionWhite.tsx | 20 ++++++++++++++++ apps/service/src/assets/svg/index.ts | 1 + .../src/components/home/HomeHeader.tsx | 2 -- .../home/ProblemCard/ProblemCard.tsx | 24 +++++++------------ .../home/ProblemSwiper/ProblemSwiper.tsx | 16 ++++++------- packages/pointer-editor/index.d.ts | 22 ++++++++--------- .../libs/components/viewer/ProblemViewer.jsx | 4 ++-- packages/pointer-editor/package.json | 2 +- 12 files changed, 76 insertions(+), 48 deletions(-) create mode 100644 apps/service/public/svg/ic-question-white.svg create mode 100644 apps/service/src/apis/controller/home/useGetWeeklyPublish.ts create mode 100644 apps/service/src/assets/svg/IcQuestionWhite.tsx diff --git a/apps/service/public/svg/ic-question-white.svg b/apps/service/public/svg/ic-question-white.svg new file mode 100644 index 00000000..66331744 --- /dev/null +++ b/apps/service/public/svg/ic-question-white.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/service/src/apis/controller/home/index.ts b/apps/service/src/apis/controller/home/index.ts index 6a91c1e4..ede6fd01 100644 --- a/apps/service/src/apis/controller/home/index.ts +++ b/apps/service/src/apis/controller/home/index.ts @@ -2,5 +2,12 @@ import useGetWeeklyProgress from './useGetWeeklyProgress'; import useGetNoticeUnreadCount from './useGetNoticeUnreadCount'; import useGetNotice from './useGetNotice'; import putRead from './putRead'; +import useGetWeeklyPublish from './useGetWeeklyPublish'; -export { useGetWeeklyProgress, useGetNoticeUnreadCount, useGetNotice, putRead }; +export { + useGetWeeklyPublish, + useGetWeeklyProgress, + useGetNoticeUnreadCount, + useGetNotice, + putRead, +}; diff --git a/apps/service/src/apis/controller/home/useGetWeeklyPublish.ts b/apps/service/src/apis/controller/home/useGetWeeklyPublish.ts new file mode 100644 index 00000000..0369076d --- /dev/null +++ b/apps/service/src/apis/controller/home/useGetWeeklyPublish.ts @@ -0,0 +1,7 @@ +import { TanstackQueryClient } from '@apis'; + +const useGetWeeklyPublish = () => { + return TanstackQueryClient.useQuery('get', '/api/student/study/publish/weekly'); +}; + +export default useGetWeeklyPublish; diff --git a/apps/service/src/app/(home)/page.tsx b/apps/service/src/app/(home)/page.tsx index 0a8f895c..fe6ab03c 100644 --- a/apps/service/src/app/(home)/page.tsx +++ b/apps/service/src/app/(home)/page.tsx @@ -2,11 +2,14 @@ import { useRouter } from 'next/navigation'; import { Button } from '@components'; -import { IcCalendar } from '@svg'; +import { IcCalendar, IcQuestionWhite } from '@svg'; import { trackEvent } from '@utils'; import { HomeHeader, NoticeButton, ProblemSwiper, WeekProgress } from '@/components/home'; +import { useGetWeeklyPublish } from '@/apis/controller/home'; const Page = () => { const router = useRouter(); + const { data, isLoading } = useGetWeeklyPublish(); + const problemSets = data?.data ?? []; const handleClickAllProblem = () => { trackEvent('home_all_problem_button_click'); @@ -31,21 +34,22 @@ const Page = () => {
- {/* {isLoading ? ( + {isLoading ? (
) : problemSets ? ( ) : ( <> - )} */} + )}
-