From 1ce5a2130be669540391164c87ff98a195dd32e7 Mon Sep 17 00:00:00 2001 From: Ardeman Date: Wed, 12 Mar 2025 20:46:54 +0800 Subject: [PATCH] refactor: standardize access token variable naming across routes --- app/apis/admin/delete-ads.ts | 27 +++++++++++ ...admin._dashboard.contents.update.$slug.tsx | 8 ++-- ...admin.lg-admin._dashboard.users._index.tsx | 6 +-- app/routes/_admin.lg-admin.tsx | 12 +++-- app/routes/_news.detail.$slug.tsx | 8 ++-- app/routes/_news.tsx | 8 ++-- .../actions.admin.advertisements.create.ts | 9 ++-- ...actions.admin.advertisements.delete.$id.ts | 45 +++++++++++++++++++ app/routes/actions.admin.categories.create.ts | 4 +- app/routes/actions.admin.categories.update.ts | 4 +- app/routes/actions.admin.contents.create.ts | 7 +-- app/routes/actions.admin.contents.update.ts | 7 +-- app/routes/actions.admin.login.ts | 10 ++--- .../actions.admin.subscribe-plan.create.ts | 4 +- .../actions.admin.subscribe-plan.update.ts | 4 +- app/routes/actions.admin.tags.create.ts | 7 +-- app/routes/actions.admin.tags.update.ts | 7 +-- app/routes/actions.admin.upload.ts | 4 +- app/routes/actions.login.ts | 10 ++--- app/routes/actions.register.ts | 10 ++--- app/routes/actions.subscribe.ts | 6 +-- app/utils/token.ts | 14 +++--- 22 files changed, 127 insertions(+), 94 deletions(-) create mode 100644 app/apis/admin/delete-ads.ts create mode 100644 app/routes/actions.admin.advertisements.delete.$id.ts diff --git a/app/apis/admin/delete-ads.ts b/app/apis/admin/delete-ads.ts new file mode 100644 index 0000000..77a3ebf --- /dev/null +++ b/app/apis/admin/delete-ads.ts @@ -0,0 +1,27 @@ +import { z } from 'zod' + +import { HttpServer, type THttpServer } from '~/libs/http-server' +import type { TAdsSchema } from '~/pages/form-advertisements' + +const deleteAdsResponseSchema = z.object({ + data: z.object({ + Message: z.string(), + }), +}) + +type TParameters = { + id: TAdsSchema['id'] +} & THttpServer + +export const deleteAdsRequest = async (parameters: TParameters) => { + const { id, ...restParameters } = parameters + try { + const { data } = await HttpServer(restParameters).delete( + `/api/ads/${id}/delete`, + ) + return deleteAdsResponseSchema.parse(data) + } catch (error) { + // eslint-disable-next-line unicorn/no-useless-promise-resolve-reject + return Promise.reject(error) + } +} diff --git a/app/routes/_admin.lg-admin._dashboard.contents.update.$slug.tsx b/app/routes/_admin.lg-admin._dashboard.contents.update.$slug.tsx index b2ed7f8..3fac863 100644 --- a/app/routes/_admin.lg-admin._dashboard.contents.update.$slug.tsx +++ b/app/routes/_admin.lg-admin._dashboard.contents.update.$slug.tsx @@ -7,11 +7,9 @@ import { FormContentsPage } from '~/pages/form-contents' import type { Route } from './+types/_admin.lg-admin._dashboard.contents.update.$slug' export const loader = async ({ request, params }: Route.LoaderArgs) => { - const { staffToken } = await handleCookie(request) - const { data: newsData } = await getNewsBySlug({ - accessToken: staffToken, - slug: params.slug, - }) + const { staffToken: accessToken } = await handleCookie(request) + const { slug } = params + const { data: newsData } = await getNewsBySlug({ accessToken, slug }) return { newsData } } diff --git a/app/routes/_admin.lg-admin._dashboard.users._index.tsx b/app/routes/_admin.lg-admin._dashboard.users._index.tsx index 0ef88e2..1618df8 100644 --- a/app/routes/_admin.lg-admin._dashboard.users._index.tsx +++ b/app/routes/_admin.lg-admin._dashboard.users._index.tsx @@ -7,10 +7,8 @@ import { UsersPage } from '~/pages/dashboard-users' import type { Route } from './+types/_admin.lg-admin._dashboard.users._index' export const loader = async ({ request }: Route.LoaderArgs) => { - const { staffToken } = await handleCookie(request) - const { data: usersData } = await getUsers({ - accessToken: staffToken, - }) + const { staffToken: accessToken } = await handleCookie(request) + const { data: usersData } = await getUsers({ accessToken }) return { usersData } } diff --git a/app/routes/_admin.lg-admin.tsx b/app/routes/_admin.lg-admin.tsx index c00c895..b777061 100644 --- a/app/routes/_admin.lg-admin.tsx +++ b/app/routes/_admin.lg-admin.tsx @@ -10,16 +10,14 @@ import { setStaffLogoutHeaders } from '~/libs/logout-header.server' import type { Route } from './+types/_admin.lg-admin' export const loader = async ({ request }: Route.LoaderArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) const { pathname } = new URL(request.url) const isAuthPage = AUTH_PAGES.includes(pathname) let staffData - if (staffToken) { + if (accessToken) { try { - const { data } = await getStaff({ - accessToken: staffToken, - }) + const { data } = await getStaff({ accessToken }) staffData = data } catch (error) { if (error instanceof XiorError && error.response?.status === 401) { @@ -28,11 +26,11 @@ export const loader = async ({ request }: Route.LoaderArgs) => { } } - if (!isAuthPage && !staffToken) { + if (!isAuthPage && !accessToken) { throw redirect('/lg-admin/login') } - if (isAuthPage && staffToken) { + if (isAuthPage && accessToken) { throw redirect('/lg-admin') } diff --git a/app/routes/_news.detail.$slug.tsx b/app/routes/_news.detail.$slug.tsx index 5802810..0478079 100644 --- a/app/routes/_news.detail.$slug.tsx +++ b/app/routes/_news.detail.$slug.tsx @@ -10,11 +10,9 @@ import { NewsDetailPage } from '~/pages/news-detail' import type { Route } from './+types/_news.detail.$slug' export const loader = async ({ request, params }: Route.LoaderArgs) => { - const { userToken } = await handleCookie(request) - const { data: newsDetailData } = await getNewsBySlug({ - slug: params.slug, - accessToken: userToken, - }) + const { userToken: accessToken } = await handleCookie(request) + const { slug } = params + const { data: newsDetailData } = await getNewsBySlug({ slug, accessToken }) const { data: categoriesData } = await getCategories() const beritaCode = 'berita' const beritaCategory = categoriesData.find( diff --git a/app/routes/_news.tsx b/app/routes/_news.tsx index bea6b25..6bbb011 100644 --- a/app/routes/_news.tsx +++ b/app/routes/_news.tsx @@ -13,13 +13,11 @@ import { setUserLogoutHeaders } from '~/libs/logout-header.server' import type { Route } from './+types/_news' export const loader = async ({ request }: Route.LoaderArgs) => { - const { userToken } = await handleCookie(request) + const { userToken: accessToken } = await handleCookie(request) let userData - if (userToken) { + if (accessToken) { try { - const { data } = await getUser({ - accessToken: userToken, - }) + const { data } = await getUser({ accessToken }) userData = data } catch (error) { if (error instanceof XiorError && error.response?.status === 401) { diff --git a/app/routes/actions.admin.advertisements.create.ts b/app/routes/actions.admin.advertisements.create.ts index e1c161d..dbb08e7 100644 --- a/app/routes/actions.admin.advertisements.create.ts +++ b/app/routes/actions.admin.advertisements.create.ts @@ -10,7 +10,7 @@ import { adsSchema, type TAdsSchema } from '~/pages/form-advertisements' import type { Route } from './+types/actions.admin.advertisements.create' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -26,15 +26,12 @@ export const action = async ({ request }: Route.ActionArgs) => { return data({ success: false, errors, defaultValues }, { status: 400 }) } - const { data: categoryData } = await createAdsRequest({ - accessToken: staffToken, - payload, - }) + const { data: adsData } = await createAdsRequest({ accessToken, payload }) return data( { success: true, - categoryData, + adsData, }, { status: 200, diff --git a/app/routes/actions.admin.advertisements.delete.$id.ts b/app/routes/actions.admin.advertisements.delete.$id.ts new file mode 100644 index 0000000..20b5a62 --- /dev/null +++ b/app/routes/actions.admin.advertisements.delete.$id.ts @@ -0,0 +1,45 @@ +import { data } from 'react-router' +import { XiorError } from 'xior' + +import { deleteAdsRequest } from '~/apis/admin/delete-ads' +import { handleCookie } from '~/libs/cookies' + +import type { Route } from './+types/actions.admin.advertisements.create' + +export const action = async ({ request, params }: Route.ActionArgs) => { + const { staffToken: accessToken } = await handleCookie(request) + const { id } = params + try { + const { data: adsData } = await deleteAdsRequest({ accessToken, id }) + + return data( + { + success: true, + adsData, + }, + { + status: 200, + statusText: 'OK', + }, + ) + } catch (error) { + if (error instanceof XiorError) { + return data( + { + success: false, + message: error?.response?.data?.error?.message || error.message, + }, + { + status: error?.response?.status || 500, + }, + ) + } + return data( + { + success: false, + message: 'Internal server error', + }, + { status: 500 }, + ) + } +} diff --git a/app/routes/actions.admin.categories.create.ts b/app/routes/actions.admin.categories.create.ts index c675bb2..eff0487 100644 --- a/app/routes/actions.admin.categories.create.ts +++ b/app/routes/actions.admin.categories.create.ts @@ -10,7 +10,7 @@ import { categorySchema, type TCategorySchema } from '~/pages/form-category' import type { Route } from './+types/actions.admin.categories.create' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -27,7 +27,7 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: categoryData } = await createCategoryRequest({ - accessToken: staffToken, + accessToken, payload, }) diff --git a/app/routes/actions.admin.categories.update.ts b/app/routes/actions.admin.categories.update.ts index 4a007ea..a5cae4b 100644 --- a/app/routes/actions.admin.categories.update.ts +++ b/app/routes/actions.admin.categories.update.ts @@ -10,7 +10,7 @@ import { categorySchema, type TCategorySchema } from '~/pages/form-category' import type { Route } from './+types/actions.admin.categories.update' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -27,7 +27,7 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: categoryData } = await updateCategoryRequest({ - accessToken: staffToken, + accessToken, payload, }) diff --git a/app/routes/actions.admin.contents.create.ts b/app/routes/actions.admin.contents.create.ts index 5b76e5c..ed3e963 100644 --- a/app/routes/actions.admin.contents.create.ts +++ b/app/routes/actions.admin.contents.create.ts @@ -10,7 +10,7 @@ import { contentSchema, type TContentSchema } from '~/pages/form-contents' import type { Route } from './+types/actions.admin.contents.create' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -26,10 +26,7 @@ export const action = async ({ request }: Route.ActionArgs) => { return data({ success: false, errors, defaultValues }, { status: 400 }) } - const { data: newsData } = await createNewsRequest({ - accessToken: staffToken, - payload, - }) + const { data: newsData } = await createNewsRequest({ accessToken, payload }) return data( { diff --git a/app/routes/actions.admin.contents.update.ts b/app/routes/actions.admin.contents.update.ts index a33f116..905cdfd 100644 --- a/app/routes/actions.admin.contents.update.ts +++ b/app/routes/actions.admin.contents.update.ts @@ -10,7 +10,7 @@ import { contentSchema, type TContentSchema } from '~/pages/form-contents' import type { Route } from './+types/actions.admin.contents.update' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -26,10 +26,7 @@ export const action = async ({ request }: Route.ActionArgs) => { return data({ success: false, errors, defaultValues }, { status: 400 }) } - const { data: newsData } = await updateNewsRequest({ - accessToken: staffToken, - payload, - }) + const { data: newsData } = await updateNewsRequest({ accessToken, payload }) return data( { diff --git a/app/routes/actions.admin.login.ts b/app/routes/actions.admin.login.ts index 7d6d7d9..b10ce17 100644 --- a/app/routes/actions.admin.login.ts +++ b/app/routes/actions.admin.login.ts @@ -27,13 +27,9 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: loginData } = await staffLoginRequest(payload) - const { token } = loginData - const { data: staffData } = await getStaff({ - accessToken: token, - }) - const tokenCookie = generateStaffTokenCookie({ - token, - }) + const { token: accessToken } = loginData + const { data: staffData } = await getStaff({ accessToken }) + const tokenCookie = generateStaffTokenCookie({ accessToken }) const headers = new Headers() headers.append('Set-Cookie', await tokenCookie) diff --git a/app/routes/actions.admin.subscribe-plan.create.ts b/app/routes/actions.admin.subscribe-plan.create.ts index 9309fbf..4feef5f 100644 --- a/app/routes/actions.admin.subscribe-plan.create.ts +++ b/app/routes/actions.admin.subscribe-plan.create.ts @@ -13,7 +13,7 @@ import { import type { Route } from './+types/actions.admin.subscribe-plan.create' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -30,7 +30,7 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: subscribePlanData } = await createSubscribePlanRequest({ - accessToken: staffToken, + accessToken, payload, }) diff --git a/app/routes/actions.admin.subscribe-plan.update.ts b/app/routes/actions.admin.subscribe-plan.update.ts index 99fc6c7..e8bcad3 100644 --- a/app/routes/actions.admin.subscribe-plan.update.ts +++ b/app/routes/actions.admin.subscribe-plan.update.ts @@ -13,7 +13,7 @@ import { import type { Route } from './+types/actions.admin.subscribe-plan.update' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -30,7 +30,7 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: subscribePlanData } = await updateSubscribePlanRequest({ - accessToken: staffToken, + accessToken, payload, }) diff --git a/app/routes/actions.admin.tags.create.ts b/app/routes/actions.admin.tags.create.ts index 1d8ea4d..7d34b60 100644 --- a/app/routes/actions.admin.tags.create.ts +++ b/app/routes/actions.admin.tags.create.ts @@ -10,7 +10,7 @@ import { tagSchema, type TTagSchema } from '~/pages/form-tag' import type { Route } from './+types/actions.admin.tags.create' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -26,10 +26,7 @@ export const action = async ({ request }: Route.ActionArgs) => { return data({ success: false, errors, defaultValues }, { status: 400 }) } - const { data: tagsData } = await createTagsRequest({ - accessToken: staffToken, - payload, - }) + const { data: tagsData } = await createTagsRequest({ accessToken, payload }) return data( { diff --git a/app/routes/actions.admin.tags.update.ts b/app/routes/actions.admin.tags.update.ts index 630ff84..dc7222e 100644 --- a/app/routes/actions.admin.tags.update.ts +++ b/app/routes/actions.admin.tags.update.ts @@ -10,7 +10,7 @@ import { tagSchema, type TTagSchema } from '~/pages/form-tag' import type { Route } from './+types/actions.admin.tags.update' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { errors, @@ -26,10 +26,7 @@ export const action = async ({ request }: Route.ActionArgs) => { return data({ success: false, errors, defaultValues }, { status: 400 }) } - const { data: tagData } = await updateTagRequest({ - accessToken: staffToken, - payload, - }) + const { data: tagData } = await updateTagRequest({ accessToken, payload }) return data( { diff --git a/app/routes/actions.admin.upload.ts b/app/routes/actions.admin.upload.ts index c60bf98..148e960 100644 --- a/app/routes/actions.admin.upload.ts +++ b/app/routes/actions.admin.upload.ts @@ -10,7 +10,7 @@ import { handleCookie } from '~/libs/cookies' import type { Route } from './+types/actions.admin.upload' export const action = async ({ request }: Route.ActionArgs) => { - const { staffToken } = await handleCookie(request) + const { staffToken: accessToken } = await handleCookie(request) try { const { @@ -29,7 +29,7 @@ export const action = async ({ request }: Route.ActionArgs) => { const { data: uploadData } = await uploadFileRequest({ payload, - accessToken: staffToken, + accessToken, }) return data( diff --git a/app/routes/actions.login.ts b/app/routes/actions.login.ts index a04d136..4bb209a 100644 --- a/app/routes/actions.login.ts +++ b/app/routes/actions.login.ts @@ -27,13 +27,9 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: loginData } = await userLoginRequest(payload) - const { token } = loginData - const { data: userData } = await getUser({ - accessToken: token, - }) - const tokenCookie = generateUserTokenCookie({ - token, - }) + const { token: accessToken } = loginData + const { data: userData } = await getUser({ accessToken }) + const tokenCookie = generateUserTokenCookie({ accessToken }) const headers = new Headers() headers.append('Set-Cookie', await tokenCookie) diff --git a/app/routes/actions.register.ts b/app/routes/actions.register.ts index f4ba8a2..48ac35d 100644 --- a/app/routes/actions.register.ts +++ b/app/routes/actions.register.ts @@ -30,13 +30,9 @@ export const action = async ({ request }: Route.ActionArgs) => { } const { data: registerData } = await userRegisterRequest(payload) - const { token } = registerData - const { data: userData } = await getUser({ - accessToken: token, - }) - const tokenCookie = generateUserTokenCookie({ - token, - }) + const { token: accessToken } = registerData + const { data: userData } = await getUser({ accessToken }) + const tokenCookie = generateUserTokenCookie({ accessToken }) const headers = new Headers() headers.append('Set-Cookie', await tokenCookie) diff --git a/app/routes/actions.subscribe.ts b/app/routes/actions.subscribe.ts index 0c774db..6686137 100644 --- a/app/routes/actions.subscribe.ts +++ b/app/routes/actions.subscribe.ts @@ -13,7 +13,7 @@ import { handleCookie } from '~/libs/cookies' import type { Route } from './+types/actions.subscribe' export const action = async ({ request }: Route.ActionArgs) => { - const { userToken } = await handleCookie(request) + const { userToken: accessToken } = await handleCookie(request) try { const { errors, @@ -32,9 +32,7 @@ export const action = async ({ request }: Route.ActionArgs) => { // TODO: implement subscribe console.log('payload', payload) // eslint-disable-line no-console - const { data: userData } = await getUser({ - accessToken: userToken, - }) + const { data: userData } = await getUser({ accessToken }) return data( { diff --git a/app/utils/token.ts b/app/utils/token.ts index 1069738..7303a72 100644 --- a/app/utils/token.ts +++ b/app/utils/token.ts @@ -6,33 +6,33 @@ import { } from '~/libs/cookie.server' type TTokenCookie = { - token: string + accessToken: string } export const generateUserTokenCookie = (parameters: TTokenCookie) => { - const { token } = parameters + const { accessToken } = parameters - const decodedToken = decodeJwt(token) + const decodedToken = decodeJwt(accessToken) const decodedTokenExp = decodedToken.exp const expirationDate = decodedTokenExp ? new Date(decodedTokenExp * 1000) : undefined - return userTokenCookieConfig.serialize(token, { + return userTokenCookieConfig.serialize(accessToken, { expires: expirationDate, }) } export const generateStaffTokenCookie = (parameters: TTokenCookie) => { - const { token } = parameters + const { accessToken } = parameters - const decodedToken = decodeJwt(token) + const decodedToken = decodeJwt(accessToken) const decodedTokenExp = decodedToken.exp const expirationDate = decodedTokenExp ? new Date(decodedTokenExp * 1000) : undefined - return staffTokenCookieConfig.serialize(token, { + return staffTokenCookieConfig.serialize(accessToken, { expires: expirationDate, }) }