system.ts 1.2 KB

1234567891011121314151617181920
  1. import { cache } from 'react';
  2. import { ResultDto } from '@/types/response/common';
  3. import { fetchPublicJson } from '@/lib/utils/publicFetch';
  4. import Config, { NavMenuLink } from '@/types/config';
  5. // 전역 익명 설정 — 모든 사용자 공통이라 Data Cache 안전. React.cache(요청 내 dedupe) + tag 'site-config'(요청 간).
  6. // 60s 로 짧게 유지 → Admin 설정 변경(예: OAuth on/off, 메뉴)이 ~1분 내 프론트 반영. TTFB 이득은 대부분 유지.
  7. // 즉시 반영이 필요하면 POST /api/revalidate?tag=site-config (REVALIDATE_SECRET 설정 시).
  8. const CONFIG_REVALIDATE = 60;
  9. const CONFIG_TAGS = ['site-config'];
  10. // Config 값 조회
  11. export const fetchConfig = cache(async (): Promise<ResultDto<Config|null>> => {
  12. return await fetchPublicJson<Config>('/api/config', { revalidate: CONFIG_REVALIDATE, tags: CONFIG_TAGS });
  13. });
  14. // 관리자 관리형 상단 메뉴 조회 (노출 항목만 정렬순)
  15. export const fetchNavMenu = cache(async (): Promise<ResultDto<{ items: NavMenuLink[] }|null>> => {
  16. return await fetchPublicJson<{ items: NavMenuLink[] }>('/api/config/nav-menu', { revalidate: CONFIG_REVALIDATE, tags: CONFIG_TAGS });
  17. });