system.ts 1.0 KB

12345678910111213141516171819
  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. // 설정 변경 즉시 반영이 필요하면 POST /api/revalidate?tag=site-config (REVALIDATE_SECRET 설정 시).
  7. const CONFIG_REVALIDATE = 3600;
  8. const CONFIG_TAGS = ['site-config'];
  9. // Config 값 조회
  10. export const fetchConfig = cache(async (): Promise<ResultDto<Config|null>> => {
  11. return await fetchPublicJson<Config>('/api/config', { revalidate: CONFIG_REVALIDATE, tags: CONFIG_TAGS });
  12. });
  13. // 관리자 관리형 상단 메뉴 조회 (노출 항목만 정렬순)
  14. export const fetchNavMenu = cache(async (): Promise<ResultDto<{ items: NavMenuLink[] }|null>> => {
  15. return await fetchPublicJson<{ items: NavMenuLink[] }>('/api/config/nav-menu', { revalidate: CONFIG_REVALIDATE, tags: CONFIG_TAGS });
  16. });