From 1885eab4c399c1f97dc5788fff5479376df21474 Mon Sep 17 00:00:00 2001 From: Ardeman Date: Mon, 24 Mar 2025 13:42:36 +0800 Subject: [PATCH] feat: add API endpoints for fetching news by ID and slug, and update routing accordingly --- app/apis/admin/get-news-by-id.ts | 25 +++++++++++++++++++ app/apis/{common => news}/get-news-by-slug.ts | 0 app/pages/dashboard-contents/index.tsx | 2 +- app/pages/form-contents/index.tsx | 1 - ...-admin._dashboard.contents.update.$id.tsx} | 8 +++--- app/routes/_news.detail.$slug.tsx | 2 +- 6 files changed, 31 insertions(+), 7 deletions(-) create mode 100644 app/apis/admin/get-news-by-id.ts rename app/apis/{common => news}/get-news-by-slug.ts (100%) rename app/routes/{_admin.lg-admin._dashboard.contents.update.$slug.tsx => _admin.lg-admin._dashboard.contents.update.$id.tsx} (88%) diff --git a/app/apis/admin/get-news-by-id.ts b/app/apis/admin/get-news-by-id.ts new file mode 100644 index 0000000..b05fa55 --- /dev/null +++ b/app/apis/admin/get-news-by-id.ts @@ -0,0 +1,25 @@ +import { z } from 'zod' + +import { newsResponseSchema } from '~/apis/common/get-news' +import { HttpServer, type THttpServer } from '~/libs/http-server' + +const dataResponseSchema = z.object({ + data: z.object(newsResponseSchema.shape), +}) + +type TParameters = { + id: string +} & THttpServer + +export const getNewsById = async (parameters: TParameters) => { + const { id, ...restParameters } = parameters + try { + const { data } = await HttpServer(restParameters).get( + `/api/staff/news/${encodeURIComponent(id)}`, + ) + return dataResponseSchema.parse(data) + } catch (error) { + // eslint-disable-next-line unicorn/no-useless-promise-resolve-reject + return Promise.reject(error) + } +} diff --git a/app/apis/common/get-news-by-slug.ts b/app/apis/news/get-news-by-slug.ts similarity index 100% rename from app/apis/common/get-news-by-slug.ts rename to app/apis/news/get-news-by-slug.ts diff --git a/app/pages/dashboard-contents/index.tsx b/app/pages/dashboard-contents/index.tsx index b5fd093..7f7a130 100644 --- a/app/pages/dashboard-contents/index.tsx +++ b/app/pages/dashboard-contents/index.tsx @@ -60,7 +60,7 @@ export const ContentsPage = () => { }, { title: 'Action', - data: 'slug', + data: 'id', }, ] const dataSlot: DataTableSlots = { diff --git a/app/pages/form-contents/index.tsx b/app/pages/form-contents/index.tsx index b844767..22041e7 100644 --- a/app/pages/form-contents/index.tsx +++ b/app/pages/form-contents/index.tsx @@ -126,7 +126,6 @@ export const FormContentsPage = (properties: TProperties) => { className="border-0 bg-white shadow read-only:bg-gray-100 focus:ring-1 focus:ring-[#2E2F7C] focus:outline-none disabled:bg-gray-100" labelClassName="text-sm font-medium text-[#363636]" containerClassName="flex-1" - disabled={!!newsData} /> { const { staffToken: accessToken } = await handleCookie(request) - const { slug } = params - const { data: newsData } = await getNewsBySlug({ accessToken, slug }) + const { id } = params + const { data: newsData } = await getNewsById({ accessToken, id }) return { newsData } } diff --git a/app/routes/_news.detail.$slug.tsx b/app/routes/_news.detail.$slug.tsx index e066389..2cc24fd 100644 --- a/app/routes/_news.detail.$slug.tsx +++ b/app/routes/_news.detail.$slug.tsx @@ -4,7 +4,7 @@ import { stripHtml } from 'string-strip-html' import { getCategories } from '~/apis/common/get-categories' import { getNews } from '~/apis/common/get-news' -import { getNewsBySlug } from '~/apis/common/get-news-by-slug' +import { getNewsBySlug } from '~/apis/news/get-news-by-slug' import { getUser } from '~/apis/news/get-user' import { APP } from '~/configs/meta' import { handleCookie } from '~/libs/cookies'