Files
Aislo/config/config_frontend.ts
T

120 lines
4.2 KiB
TypeScript

/* =============================================================================
* config_frontend.ts
* 프론트엔드 제어 및 웹 환경 설정 (API 주소, 업로드 제한, 라우트 등)
*
* 규칙:
* - 프론트엔드의 모든 제어 상수는 여기서 관리. 컴포넌트 내 하드코딩 금지.
* - API 주소, 파일 제한, WebCAD 렌더 옵션 등을 중앙 집중.
* ========================================================================== */
/* -----------------------------------------------------------------------------
* 1. API 통신
* -------------------------------------------------------------------------- */
/** 백엔드 API 기본 경로. vite proxy(/api → :8000)를 통해 FastAPI로 전달. */
export const API_BASE_URL = "/api";
/** API 요청 타임아웃 (ms) */
export const API_TIMEOUT_MS = 30_000;
/** B03~B09 워크플로우에서 사용할 현재 프로젝트 UUID 저장 키 */
export const CURRENT_PROJECT_ID_KEY = "frd_current_project_id";
/** 인증 토큰 저장 키 (HttpOnly 쿠키 사용, localStorage는 참조용) */
export const AUTH_TOKEN_KEY = "frd_auth_token";
/* -----------------------------------------------------------------------------
* 2. 파일 업로드 제한 (B03_FileInput)
* -------------------------------------------------------------------------- */
/** 단일 파일 최대 크기 (MB) */
export const UPLOAD_MAX_MB = 500;
/** 한 요청에서 선택 가능한 최대 파일 수 */
export const UPLOAD_MAX_FILES = 20;
/** 허용 확장자 (지형/포인트클라우드/도면) */
export const UPLOAD_ALLOWED_EXT = [
".las",
".laz",
".dem",
".tif",
".tiff",
".tfw",
".prj",
".dxf",
".dwg",
] as const;
/* -----------------------------------------------------------------------------
* 3. WebCAD / 3D 렌더링 옵션
* -------------------------------------------------------------------------- */
export const RENDER_OPTIONS = {
/** Three.js 배경색 (theme.css 변수와 별개로 캔버스 clear color) */
canvasClearColorLight: 0xf6f7fa,
canvasClearColorDark: 0x16121f,
/** 카메라 기본 시야각 */
cameraFov: 60,
/** 카메라 near/far */
cameraNear: 0.1,
cameraFar: 100_000,
/** 안티앨리어싱 사용 여부 */
antialias: true,
/** 픽셀 비율 상한 (고DPI 성능 보호) */
maxPixelRatio: 2,
} as const;
/* -----------------------------------------------------------------------------
* 4. 라우트 상수 (해시 기반 SPA 라우팅)
* 각 페이지 폴더명과 1:1 매핑.
* -------------------------------------------------------------------------- */
export const ROUTES = {
// 로그인 전
A01_HOME: "a01-home",
A02_PROG_DETAIL: "a02-prog-detail",
A03_COMP_DETAIL: "a03-comp-detail",
A04_NEWS_HISTORY: "a04-news-history",
A05_EDU_DETAIL: "a05-edu-detail",
A06_LOGIN: "a06-login",
A07_REGISTER: "a07-register",
A08_SUPPORT: "a08-support",
A09_SECURITY: "a09-security",
// 로그인 후
B01_ACCOUNT: "b01-account",
B02_PROJ_REGISTER: "b02-proj-register",
B03_FILE_INPUT: "b03-file-input",
B04_WF1_SURFACE: "b04-wf1-surface",
B05_WF2_ROUTE: "b05-wf2-route",
B06_WF3_PROFILE_CROSS: "b06-wf3-profile-cross",
B07_WF4_DESIGN_DETAIL: "b07-wf4-design-detail",
B08_WF5_QUANTITY: "b08-wf5-quantity",
B09_WF6_ESTIMATION: "b09-wf6-estimation",
B10_PAYMENT: "b10-payment",
B11_STATUS: "b11-status",
} as const;
export type RouteKey = keyof typeof ROUTES;
export type RoutePath = (typeof ROUTES)[RouteKey];
/** 기본 진입 라우트 */
export const DEFAULT_ROUTE: RoutePath = ROUTES.A01_HOME;
/** 로그인이 필요한 라우트 (인증 가드용) */
export const PROTECTED_ROUTES: readonly RoutePath[] = [
ROUTES.B01_ACCOUNT,
ROUTES.B02_PROJ_REGISTER,
ROUTES.B03_FILE_INPUT,
ROUTES.B04_WF1_SURFACE,
ROUTES.B05_WF2_ROUTE,
ROUTES.B06_WF3_PROFILE_CROSS,
ROUTES.B07_WF4_DESIGN_DETAIL,
ROUTES.B08_WF5_QUANTITY,
ROUTES.B09_WF6_ESTIMATION,
ROUTES.B10_PAYMENT,
ROUTES.B11_STATUS,
];
/* -----------------------------------------------------------------------------
* 5. 테마 / 언어 저장 키
* -------------------------------------------------------------------------- */
export const THEME_STORAGE_KEY = "frd_theme";
export const LANG_STORAGE_KEY = "frd_lang";