refactor: standardize access token variable naming across routes

This commit is contained in:
Ardeman 2025-03-12 20:46:54 +08:00
parent f423f3e1c0
commit 1ce5a2130b
22 changed files with 127 additions and 94 deletions

View File

@ -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)
}
}

View File

@ -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 }
}

View File

@ -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 }
}

View File

@ -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')
}

View File

@ -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(

View File

@ -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) {

View File

@ -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,

View File

@ -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 },
)
}
}

View File

@ -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,
})

View File

@ -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,
})

View File

@ -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(
{

View File

@ -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(
{

View File

@ -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)

View File

@ -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,
})

View File

@ -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,
})

View File

@ -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(
{

View File

@ -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(
{

View File

@ -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(

View File

@ -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)

View File

@ -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)

View File

@ -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(
{

View File

@ -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,
})
}