From 496d0170a2b693b1e4b13c10a91c801dcb18ad84 Mon Sep 17 00:00:00 2001 From: naka-12 <104970808+naka-12@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:49:04 +0900 Subject: [PATCH 1/2] zod parse at safeReadData --- web/api/user.ts | 5 ++++- web/hooks/useData.ts | 17 +++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/web/api/user.ts b/web/api/user.ts index 0f535341..def66d81 100644 --- a/web/api/user.ts +++ b/web/api/user.ts @@ -24,7 +24,10 @@ export function useAll(): Hook { } export function useRecommended(): UseHook { const url = endpoints.recommendedUsers; - return useAuthorizedData(url); + return useAuthorizedData( + url, + z.array(UserWithCoursesAndSubjectsSchema), + ); } export function useMatched(): Hook { return useCustomizedSWR("users::matched", matched, UserListSchema); diff --git a/web/hooks/useData.ts b/web/hooks/useData.ts index 4d2cbfce..60810e2e 100644 --- a/web/hooks/useData.ts +++ b/web/hooks/useData.ts @@ -34,19 +34,24 @@ export default function useData(url: string) { return { data, isLoading, error, reload }; } -async function safeReadData(url: string): Promise> { +async function safeReadData( + url: string, + schema: Zod.Schema, +): Promise> { try { const res = await credFetch("GET", url); - const result = await res.json(); - // TODO: zod + const data = await res.json(); + const result = schema.parse(data); return Ok(result); } catch (e) { + console.error(` + safeReadData: Schema Parse Error | in incoming data | Error: ${e}`); return Err(e); } } // TODO: refactor this to look better. -export function useAuthorizedData(url: string) { +export function useAuthorizedData(url: string, schema: Zod.Schema) { const [data, setData] = useState(null); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); @@ -55,7 +60,7 @@ export function useAuthorizedData(url: string) { setLoading(true); setError(null); - const result = await safeReadData(url); + const result = await safeReadData(url, schema); if (result.ok) { setData(result.value); setLoading(false); @@ -64,7 +69,7 @@ export function useAuthorizedData(url: string) { setError(result.error as Error); setData(null); setLoading(false); - }, [url]); + }, [url, schema]); useEffect(() => { reload(); From 8e0d2bac0b577abf9832b605d30c86a1cb1d457a Mon Sep 17 00:00:00 2001 From: RRRyoma <119156952+RRRyoma@users.noreply.github.com> Date: Tue, 21 Jan 2025 04:08:15 -0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8E=88=E6=A5=AD=E7=B7=A8=E9=9B=86?= =?UTF-8?q?=E7=94=BB=E9=9D=A2=E3=81=AE=E3=80=8C=E3=83=97=E3=83=AD=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=83=BC=E3=83=AB=E7=B7=A8=E9=9B=86=E3=81=B8=E3=80=8D?= =?UTF-8?q?=E3=83=9C=E3=82=BF=E3=83=B3=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/app/settings/courses/page.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/web/app/settings/courses/page.tsx b/web/app/settings/courses/page.tsx index cc656ca1..8a018e22 100644 --- a/web/app/settings/courses/page.tsx +++ b/web/app/settings/courses/page.tsx @@ -29,9 +29,6 @@ export default function EditCourses() { 設定画面に戻る - - プロフィール編集へ - );