diff --git a/.agent/0_backup_위키구현전 md파일.zip b/.agent/0_backup_위키구현전 md파일.zip new file mode 100644 index 0000000..204bfb1 Binary files /dev/null and b/.agent/0_backup_위키구현전 md파일.zip differ diff --git a/.agent/agent.md b/.agent/agent.md index 56f275f..e904b2c 100644 --- a/.agent/agent.md +++ b/.agent/agent.md @@ -198,3 +198,13 @@ WF6: B09_wf6_Estimation (견적·문서) | **인증 방식** | HttpOnly Secure 세션 쿠키 | | **사용자 역할** | SYSTEM_ADMIN, ADMIN, USER (3가지) | | **대시보드** | B01_Dashboard (역할별 동적 렌더링) | + +## graphify + +This project has a knowledge graph at graphify-out/ with god nodes, community structure, and cross-file relationships. + +Rules: +- For codebase questions, first run `graphify query ""` when graphify-out/graph.json exists. Use `graphify path "" ""` for relationships and `graphify explain ""` for focused concepts. These return a scoped subgraph, usually much smaller than GRAPH_REPORT.md or raw grep output. +- If graphify-out/wiki/index.md exists, use it for broad navigation instead of raw source browsing. +- Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context. +- After modifying code, run `graphify update .` to keep the graph current (AST-only, no API cost). diff --git a/.claude/scheduled_tasks.lock b/.claude/scheduled_tasks.lock new file mode 100644 index 0000000..447b4d4 --- /dev/null +++ b/.claude/scheduled_tasks.lock @@ -0,0 +1 @@ +{"sessionId":"9ae379c1-e893-4e1a-90dd-8805e30be635","pid":23164,"acquiredAt":1783854829533} \ No newline at end of file diff --git a/.claude/settings.json b/.claude/settings.json index 0bebe95..5a66e56 100644 --- a/.claude/settings.json +++ b/.claude/settings.json @@ -16,5 +16,27 @@ "Bash(./venv/Scripts/python.exe -c \"import ast; ast.parse\\(open\\('B04_wf1_Surface/B04_wf1_Surface_Repository.py',encoding='utf-8'\\).read\\(\\)\\); print\\('OK'\\)\")", "Bash(python)" ] + }, + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { + "type": "command", + "command": "C:\\Users\\umsan\\AppData\\Local\\Programs\\Python\\Python312\\Scripts\\graphify.EXE hook-guard search" + } + ] + }, + { + "matcher": "Read|Glob", + "hooks": [ + { + "type": "command", + "command": "C:\\Users\\umsan\\AppData\\Local\\Programs\\Python\\Python312\\Scripts\\graphify.EXE hook-guard read" + } + ] + } + ] } -} +} \ No newline at end of file diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 8333274..6991b36 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -15,7 +15,9 @@ "Bash(git checkout *)", "Bash(dir /B)", "Read(//c/Program_coding/**)", - "Read(//c/Program_coding/�ӵ����� �� �����ڵ�ȭ ���α׷� ����/**)" + "Read(//c/Program_coding/�ӵ����� �� �����ڵ�ȭ ���α׷� ����/**)", + "Bash(graphify path *)", + "Bash(graphify query *)" ] } } diff --git a/AGENTS.md b/AGENTS.md index b237134..5a4c09a 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,147 +1,95 @@ -# 프로젝트 행동지침 및 기술 스택 명세 (agent.md) +# Aislo 프로젝트 AI 행동 지침서 (AGENTS.md) -## 프로젝트 & DB 정보 -### 📌 프로그램명 -**Aislo (아이슬로)** -- **의미**: AI (인공지능) + Slotti (핀란드어: 임도/산림 도로) -- **콘셉트**: 산림의 미래를 열어가는 인공지능 경로 설계 솔루션 +이 문서는 **Antigravity** 및 **Codex** 코드 어시스턴트가 프로젝트 수행 시 반드시 준수해야 하는 행동 지침 및 아키텍처 명세입니다. 본 가이드라인은 불필요한 토큰 소모를 방지하고 설계 정합성을 유지하기 위해 강제 적용됩니다. --- -## 1. 기술 환경 및 기본 스택 (Technical Stack Baseline) -프로젝트의 코드를 작성, 테스트 또는 검증할 환경 명확화 및 호환 기준 제시. +## 1. 3중 역할 분담 협업 체계 (3-Role System) -### A. 백엔드 프레임워크 (Python) -* **Runtime:** Python v3.12 or v3.13.7 -* **Framework:** FastAPI / Pydantic -* **Geometry/GIS Engine:** Trimesh, Whitebox, Geopandas, Shapely, Rasterio, Laspy +AI는 작업 단계에 따라 다음 3가지 역할 중 하나로만 명확하게 작동해야 하며, 각 단계의 작업물은 엄격하게 분리됩니다. -### B. 데이터베이스 (MariaDB) -* **DBMS:** MariaDB v10.6+ -* **Character Set:** utf8mb4 (한글 완벽 지원) -* **Collation:** utf8mb4_unicode_ci -* **DB Driver (비동기):** `aiomysql` (순수 Python, Windows 호환. asyncmy는 Cython 빌드 필요로 미채택) -* **쿼리 방식:** Raw SQL (ORM 사용 금지) -* **공간 데이터:** JSON 기반 저장 (MariaDB는 PostGIS 미지원) - -### C. 프론트엔드 & WebCAD (TypeScript & WebGL) -* **Language/Runtime:** TypeScript / Node.js -* **Rendering:** HTML5 Canvas 및 WebGL 기반 WebCAD 시스템 구현 - -### D. 인코딩 및 다국어 표준 -* **인코딩:** 텍스트 파일은 UTF-8 표준으로 통일 - ---- - -## 2. 문맥 라우팅 및 문서 구조 (Context Routing) -코드 작성 및 기술 검증 시 문서 우선순위에 따른 계층적 레퍼런스 필수 읽기. - -* **1단계 (필수):** `.agent/structure.md` 읽기 후 신규 폴더 생성 기준 분석. -* **2단계 (선택 읽기):** 프로젝트 구현에 필요한 세부 기술 명세 읽기. - * **그룹 A (UI, 스타일, 컴포넌트, WebCAD):** `.agent/frontend.md` 필수 추가 읽기. - * **그룹 B (알고리즘, 저장, DB, MariaDB 값 제어):** `.agent/backend.md` 필수 추가 읽기. - * **그룹 C (DB 구조 변경):** DB 구조 변경 시 `.agent/db_schema.md` 선택적 읽기. - ---- - -## 3. 코드 작성 기본 제약 (Constraints) -* **구조 준수:** `.agent/structure.md` 트리 구조 엄격 준수. -* **700줄 제한:** 단일 파일 코드 작성/수정 시 700줄 이상이 될 경우 사전 공지. 기능별 파일 분할 후 `structure.md` 갱신 필수. -* **안전 보관:** 백엔드 작업 시 보안 저장소 경로 명시 및 임의 삭제 방지 필수. -* **경로 활용:** 단계별 페이지 기반 폴더 구조(B03~B09)와 DB 경로 열의 기준은 `.agent/db_schema_simple.md`의 「파일시스템 경로와 DB 링크」를 따른다. -* **일관성 검증:** 설계 단계에서부터 DB 설계, 파일 경로, API 라우팅이 모두 동일한 워크플로우 기준으로 통일되어야 한다. (불일치 발생 시 설계 단계에서 재논의 필수) -* **코드 포맷팅 (자동화 도구):** 프로젝트의 코드 작성이 완료되는 시, 반드시 프로젝트 루트에서 각 언어별 포맷터를 재실행하여 스타일을 통일해야 한다. - * *Python 포맷팅 명령어:* `ruff format [파일명]` 및 `ruff check --fix [파일명]` 실행 - * *TypeScript/CSS 포맷팅 명령어:* `npx prettier --write [파일명]` 실행 -* **외부 라이브러리 활용:** 외부 라이브러리 활용 시 프로젝트에 맞춰 호환 라이브러리 선정하고, 불필요한 함수는 작성하지 않도록 최소화. - ---- - -## 4. 데이터베이스 상세 명세 (Database Specification) - -### 4.1 스키마 기본 정보 -- **DB 명:** `aislo_db` -- **DBMS:** MariaDB v10.6+ -- **인코딩:** utf8mb4_unicode_ci -- **테이블 수:** 18개 -- **드라이버:** aiomysql (비동기) - -### 4.2 파일 경로 추적 (Path Tracking) -**모든 중간 산출물의 파일 경로를 DB에 기록:** -- `input_files.raw_file_path` — 원본 입력 파일 -- `processed_point_cloud.converted_file_path` — 변환된 포인트클라우드 -- `surface_models.model_file_path` — 지표면 모델 -- `routes.route_data_path` — 경로 데이터 -- `longitudinal_sections.longitudinal_file_path` — 종단면 -- `cross_sections.cross_section_file_path` — 횡단면 -- `structures.structure_data_path` — 구조물 배치 -- `quantity_items.quantity_data_path` — 수량 항목 -- `outputs.outputs_directory_path` — 산출물 폴더 -- `output_files.output_file_path` — 개별 산출 파일 - -### 4.3 저장소 구조 (Workflow-based Folder Structure) -``` -storage/{company_slug}/{user_slug}/{project_id}/ -├── B03_FileInput/input/ (WF0: 원본 입력) -├── B04_wf1_Surface/processed/ (WF1: 변환된 포인트클라우드 & 모델) -├── B05_wf2_Route/route/ (WF2: 경로 설계) -├── B06_wf3_ProfileCross/ (WF3: 종단면 & 횡단면) -├── B07_wf4_DesignDetail/structures/ (WF4: 구조물 배치) -├── B08_wf5_Quantity/quantities/ (WF5: 수량 산출) -└── B09_wf6_Estimation/v1,v2,.../ (WF6: 최종 산출물) -``` - -### 4.4 공간 데이터 처리 (MariaDB 특성) -- **지하형 기하 데이터:** GEOMETRY 타입 미지원 → JSON으로 저장 -- **좌표 저장 예:** `{"type": "Point", "coordinates": [127.5, 37.5]}` -- **경로 저장 예:** `{"type": "LineString", "coordinates": [[127.5, 37.5], [127.6, 37.6]]}` -- **애플리케이션 처리:** Python의 Shapely, Geopandas에서 JSON 파싱 후 기하 연산 - ---- - -## 5. 워크플로우 6단계 (6-Stage Workflow) +### 🎭 단계별 역할 정의 ``` -WF0: B03_FileInput (파일 입력) - ↓ (LAS, TIF, TFW, PRJ, DXF 업로드) -WF1: B04_wf1_Surface (지표면 분석) - ↓ (DEM, TIN, 포인트클라우드 변환) -WF2: B05_wf2_Route (경로 설계) - ↓ (최적 경로 계산) -WF3: B06_wf3_ProfileCross (종횡단 생성) - ↓ (종단면, 횡단면 생성) -WF4: B07_wf4_DesignDetail (상세 설계) - ↓ (구조물 배치) -WF5: B08_wf5_Quantity (수량 산출) - ↓ (수량 항목 계산) -WF6: B09_wf6_Estimation (견적·문서) - ↓ (Excel, PDF, DXF 생성) +사용자 요청 ➡️ [1. 기획자] ➡️ 계획 수립 및 PLAN.md 합의 + ⬇️ + [2. 프로그래머] ➡️ 오직 코드 작성 및 수정 (Surgical) + ⬇️ + [3. 코드 검증] ➡️ 검증 및 보고서 작성, 완료 건 아카이빙 + ⬇️ + [4. 위키 관리] ➡️ 인제스트, 린트 및 지식 그래프 갱신 ``` ---- +#### 역할 1: 기획자 (Planner / Architect) +* **목표**: 최소한의 정보 탐색으로 문제의 핵심을 짚고, 작업 계획을 구체화하여 사용자 합의를 얻는 것. +* **동작**: + 1. 사용자 요구사항을 받으면 전체 코드를 뒤지지 않고, `docs/wiki/` 내의 `graphify` 결과물 및 위키 지식을 우선 조회하여 작업 대상 파일과 이력을 신속하게 식별합니다. + 2. 영향을 받는 파일 범위와 수정 방향을 분석하여 `docs/raw/PLAN.md`에 계획서와 구체적인 구현 체크리스트를 작성합니다. + 3. `PLAN.md`에 작성된 계획서 내용에 대해 사용자의 Proceed 승인을 받습니다. -## 6. 주요 문서 참고 순서 +#### 역할 2: 코딩 전문 (Coder) +* **목표**: 오직 코드 작성 및 수정에만 집중하여 고품질의 구현물을 만드는 것. +* **동작**: + 1. 기획 단계에서 합의된 `docs/raw/PLAN.md`에 명시된 스펙과 대상 파일만 접근하여 수정합니다. (Spec 외의 오버엔지니어링 절대 금지) + 2. 전체 코드를 뒤지지 않고, `docs/wiki/` 내의 `graphify` 결과물 및 위키 지식을 우선 조회하여 작업 대상 파일과 이력을 신속하게 식별합니다. + 3. 수정 시 **Surgical Changes(정밀 수정) 원칙**을 지켜 주변 코드나 서식을 손대지 않습니다. + 4. 수정이 끝나면 프로그래머는 계획서의 구현 체크리스트에 스스로 완료 표시를 합니다. + 5. *주의*: 코더는 작업 중 어떠한 경우에도 `graphify` 명령어를 실행하지 않습니다. -1. **구조 설계:** `.agent/structure.md` 읽기 -2. **프론트 구현:** `.agent/frontend.md` 읽기 -3. **백엔드 구현:** `.agent/backend.md` 읽기 -4. **마이그레이션:** `.agent/migration_plan.md` 읽기 -5. **DB 스키마:** `.agent/db_schema_simple.md` 읽기 -6. **프로젝트 정보:** `.agent/project_info.md` 읽기 +#### 역할 3: 코드 검증 (Verifier / QA) +* **목표**: 구현된 코드가 실무 기준에 맞는지 정밀 검증하고 설계 지식을 현행화하는 것. +* **동작**: + 1. 코드가 작성되면 오직 수정한 코드만을 대조하여 실무 적합성 및 기술 검증을 수행합니다. + 2. 전체 코드를 뒤지지 않고, `docs/wiki/` 내의 `graphify` 결과물 및 위키 지식을 우선 조회하여 작업 대상 파일과 이력을 신속하게 식별합니다. + 3. 검증 결과를 바탕으로 `docs/raw/verification/{YYYY-MM-DD}_verify_{기능명}.md` 보고서를 작성합니다. + 4. `docs/raw/PLAN.md`에서 완료된 항목을 잘라내어(Cut) `docs/raw/plans/{YYYY-MM-DD}_plan_{기능명}.md` 파일로 이관하고, `PLAN.md`에서는 제거합니다. + 5. 관련 `docs/wiki/` 문서를 현행화(`status: stable` 전환)하고, 아래 규칙에 따라 **지식 그래프(`graphify`)를 업데이트**합니다. + +#### 역할 4: 기타 작업자 (위키 관리 / 작업 보조) +* **목표**: 사용자의 위키 및 프로젝트 지식 관리와 도구 실행(인제스트, 린트, 위키 업데이트 등)을 효과적으로 지원하는 것. +* **동작**: + 1. **인제스트(Ingest) 또는 린트(Lint) 요청 시**: 루트 폴더의 `./docs/AGENTS.md` 파일을 참조하여 해당 파일에 명시된 인제스트 및 린트 지침과 명령어를 성실히 따릅니다. + 2. **위키 업데이트 요청 시**: Skill을 통해 `graphify update`를 실행하여 `docs/wiki/` 기준으로 지식 그래프를 갱신합니다. --- -## 7. 요약 +## 2. 작업 관리 표준 (Live-PLAN 및 아카이빙) -| 항목 | 값 | -|------|-----| -| **프로그램명** | Aislo (아이슬로) | -| **DB 명** | aislo_db | -| **DBMS** | MariaDB v10.6+ | -| **인코딩** | utf8mb4_unicode_ci | -| **Backend** | Python 3.12+ / FastAPI | -| **Frontend** | TypeScript / Node.js | -| **드라이버** | aiomysql | -| **워크플로우** | 6단계 (WF0~WF6) | -| **테이블 수** | 18개 | -| **폴더 구조** | 워크플로우 기반 (B03~B09) | +* **현재 작업판 (`docs/raw/PLAN.md`)**: + * 현재 개발해야 할 신규 작업, 활성 작업 체크리스트, 미결 사항(Backlog)만 남겨놓는 살아있는 유일한 계획서입니다. + * 이 파일에 적힌 백로그가 완전히 비워지면 프로젝트가 최종 완료된 것으로 판단합니다. +* **완료 이력 백업 (`docs/raw/plans/`)**: + * 검증이 완료된 작업은 `PLAN.md`에서 즉시 삭제되고, `{YYYY-MM-DD}_plan_{기능명}.md` 문서로 이관 보관됩니다. +* **세션 종료 전 2중 검증**: + * 대화 세션을 종료하기 전에 `raw/`에 쌓인 신규 아카이브와 보고서를 Ingest(위키 반영) 및 Lint(위키 건강 점검)하여 데이터 누락 및 모순이 없는지 교차 점검합니다. + +--- + +## 3. 기술 환경 및 제약 조건 (Baseline Constraints) + +### 📌 기본 기술 스택 +* **Backend**: Python v3.12.7 / FastAPI / Pydantic (aiomysql 비동기 드라이버 사용, ORM 금지, Raw SQL 쿼리) +* **Frontend**: TypeScript / Node.js / HTML5 Canvas 및 WebGL (WebGL WebCAD) +* **Database**: MariaDB v10.6+ (공간 데이터는 GEOMETRY 미지원으로 인해 JSON 포맷 저장) +* **GIS Engine**: Trimesh, Whitebox, Geopandas, Shapely, Rasterio, Laspy + +### 📌 코딩 규칙 +* **700줄 제한**: 단일 소스코드 파일은 700줄을 초과할 수 없습니다. 초과할 경우 기능별로 파일을 분리해야 합니다. +* **Surgical Edit**: 변경해야 할 최소한의 라인만 정확하게 수정합니다. +* **포맷팅 적용**: 작업 완료 시 해당 언어의 포맷터(Python: `ruff format`, TS/CSS: `prettier`)를 반드시 실행합니다. + +### 📌 지식 그래프(graphify) 운영 규칙 + +* **분석 대상 범위**: `docs/wiki/` 폴더만을 대상으로 합니다. + * 검색 범위: `docs/wiki/` 하위 모든 마크다운 파일 + * 업데이트 범위: `docs/wiki/` 폴더만 + +* **Skill 기반 호출**: + * 기획자/검증자: Skill을 통해 graphify를 호출하여 정보 수집 + * 조회 옵션: `graphify query "질문"`, `graphify path "개념A" "개념B"`, `graphify explain "개념명"` + * 업데이트: `graphify update` (Skill 기반) + +* **실행 권한**: + * 기획자: graphify query/explain/path 사용 가능 (계획 수립 시) + * 프로그래머: graphify 실행 금지 + * 검증자: graphify update만 문서 갱신 후 최종 1회 실행 diff --git a/B01_Dashboard/B01_Dashboard_UI_Page.ts b/B01_Dashboard/B01_Dashboard_UI_Page.ts index b338b36..844bb69 100644 --- a/B01_Dashboard/B01_Dashboard_UI_Page.ts +++ b/B01_Dashboard/B01_Dashboard_UI_Page.ts @@ -369,7 +369,6 @@ function projectTable(projects: ProjectItem[], currentUser: DashboardUser): HTML } function workflow(project: ProjectItem): HTMLElement { - const activeStage = project.workflow_stage; const routes: RoutePath[] = [ ROUTES.B03_FILE_INPUT, ROUTES.B04_WF1_SURFACE, @@ -391,21 +390,14 @@ function workflow(project: ProjectItem): HTMLElement { button.className = "b01-dashboard__step"; button.textContent = stepLabels[index] ?? `B${String(index + 3).padStart(2, "0")}`; - let enabled = false; - if (stages && stages.length > 0) { - enabled = index === 0 || stages[index - 1]?.state === "COMPLETE"; - } else { - enabled = index + 1 <= Math.max(activeStage, 1); - } - - button.disabled = !enabled; - if (enabled) { - button.classList.add("is-enabled"); - button.addEventListener("click", () => { - localStorage.setItem(CURRENT_PROJECT_ID_KEY, project.id); - navigateTo(route); - }); - } + // 스텝바는 항상 자유롭게 이동 가능(게이팅하지 않음). + // 단계 완료/무효화 판정은 각 페이지의 액션(업로드·분석 실행 등) 시 백엔드가 + // 계산·DB 갱신하며, 여기서는 그 결과를 색상/툴팁으로 표시만 한다. + button.classList.add("is-enabled"); + button.addEventListener("click", () => { + localStorage.setItem(CURRENT_PROJECT_ID_KEY, project.id); + navigateTo(route); + }); if (stages && stages[index]) { const state = stages[index].state; diff --git a/B04_wf1_Surface/B04_wf1_Surface_Api_Fetch.ts b/B04_wf1_Surface/B04_wf1_Surface_Api_Fetch.ts index 19c12c3..3fcf25a 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_Api_Fetch.ts +++ b/B04_wf1_Surface/B04_wf1_Surface_Api_Fetch.ts @@ -163,3 +163,34 @@ export async function fetchSurfaceStatus(projectId: string): Promise { + return requestJson(`/projects/${projectId}/vworld-meta?layer_name=${layerName}`, { + method: "GET", + }); +} + +export async function fetchGisGeoJson(projectId: string, layer: string): Promise { + return requestJson(`/projects/${projectId}/geojson?layer=${encodeURIComponent(layer)}`, { + method: "GET", + }); +} diff --git a/B04_wf1_Surface/B04_wf1_Surface_Engine.py b/B04_wf1_Surface/B04_wf1_Surface_Engine.py index 42024e1..f1061b9 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_Engine.py +++ b/B04_wf1_Surface/B04_wf1_Surface_Engine.py @@ -84,6 +84,52 @@ def run_surface_analysis( config["precompute"] = list(methods) manifest = build_all_terrain_models(data, masks, models_dir, config, force=force) + # 3-2. VWorld 지도 및 국가 GIS 벡터 다운로드 + _report(90, "download_maps", "VWorld 지도 및 GIS 벡터 데이터 다운로드 중") + try: + # project_root 내의 .prj 파일 탐색 (B03_FileInput/input 또는 root 내 존재할 수 있음) + prj_files = ( + list(project_root.glob("**/B03_FileInput/input/*.prj")) + + list(project_root.glob("*.prj")) + + list(project_root.glob("**/*.prj")) + ) + prj_path = prj_files[0] if prj_files else project_root / "result.prj" + + bounds_dict_for_download = { + "x": [float(bounds[0, 0]), float(bounds[0, 1])], + "y": [float(bounds[1, 0]), float(bounds[1, 1])], + "z": [float(bounds[2, 0]), float(bounds[2, 1])], + } + + from B04_wf1_Surface.B04_wf1_Surface_Engine_GisVector import download_all_gis_vectors + from B04_wf1_Surface.B04_wf1_Surface_Engine_VWorld import download_vworld_satellite_map + + # VWorld 지도 및 GIS 데이터 저장 위치는 B04_wf1_Surface/processed에 보관. + layers = [ + {"layer": "Satellite", "ext": "jpeg"}, + {"layer": "Hybrid", "ext": "png"}, + {"layer": "white", "ext": "png"}, + ] + for item in layers: + try: + download_vworld_satellite_map( + prj_path, + bounds_dict_for_download, + processed_dir, + layer_name=item["layer"], + ext=item["ext"], + ) + except Exception: + pass + + try: + download_all_gis_vectors(prj_path, bounds_dict_for_download, processed_dir) + + except Exception: + pass + except Exception: + pass + _report(95, "saving", "결과 저장 중") processed = { diff --git a/B04_wf1_Surface/B04_wf1_Surface_Engine_GisVector.py b/B04_wf1_Surface/B04_wf1_Surface_Engine_GisVector.py new file mode 100644 index 0000000..d7e09cf --- /dev/null +++ b/B04_wf1_Surface/B04_wf1_Surface_Engine_GisVector.py @@ -0,0 +1,155 @@ +"""국가 GIS 벡터 데이터 다운로드 엔진.""" + +from __future__ import annotations + +import json +import urllib.parse +import urllib.request +from pathlib import Path + +from pyproj import Transformer + +# 설정 불러오기 +try: + from config import config_system + + VWORLD_API_KEY = getattr( + config_system, "VWORLD_API_KEY", "3DBD7306-7DBD-38BB-B292-267C5ED7AC6B" + ) + PROJECT_ROOT = getattr(config_system, "PROJECT_ROOT", Path(__file__).resolve().parent.parent) +except ImportError: + VWORLD_API_KEY = "3DBD7306-7DBD-38BB-B292-267C5ED7AC6B" + PROJECT_ROOT = Path(__file__).resolve().parent.parent + +from B04_wf1_Surface.B04_wf1_Surface_Engine_VWorld import get_epsg_from_prj + + +def request_vworld_wfs(typename: str, filename: str, bounds_wgs84: dict, output_dir: Path) -> None: + """브이월드 WFS API를 사용하여 지정된 Bounds 영역 내의 + 공간 벡터 데이터를 GeoJSON으로 다운로드합니다. + """ + # 4326(위경도) bbox 파라미터 구성 (BBOX=minx,miny,maxx,maxy) + bbox_str = ( + f"{bounds_wgs84['min_lon']},{bounds_wgs84['min_lat']}," + f"{bounds_wgs84['max_lon']},{bounds_wgs84['max_lat']}" + ) + + # WFS 파라미터 조립 + params = { + "key": VWORLD_API_KEY, + "domain": "localhost", + "service": "WFS", + "version": "1.1.0", + "request": "GetFeature", + "typename": typename, + "bbox": bbox_str, + "output": "application/json", # GeoJSON 포맷 요청 + "srsName": "EPSG:4326", + } + + url = "http://api.vworld.kr/req/wfs?" + urllib.parse.urlencode(params) + headers = {"User-Agent": "Mozilla/5.0"} + + req = urllib.request.Request(url, headers=headers) + try: + with urllib.request.urlopen(req, timeout=15) as res: + content = res.read() + + data = json.loads(content.decode("utf-8")) + + output_path = output_dir / filename + output_path.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8") + except Exception: + pass + + +def download_all_gis_vectors(prj_path: Path, bounds_meter: dict, output_dir: Path) -> None: + """지형의 로컬 미터단위 bounds 정보를 위경도로 변환 후 5대 국가 GIS 데이터를 다운로드합니다.""" + output_dir.mkdir(parents=True, exist_ok=True) + + # 1. vworld_white_meta.json이 생성되어 있다면 직접 위경도 경계 획득하여 pyproj 축왜곡 방지 + meta_path = prj_path.parent / "vworld_white_meta.json" + if not meta_path.exists(): + meta_path = prj_path.parent / "vworld_satellite_meta.json" + + if meta_path.exists(): + try: + with open(meta_path, "r", encoding="utf-8") as f: + meta_data = json.load(f) + bounds_wgs84 = { + "min_lon": meta_data["lon_min"] - 0.010, + "max_lon": meta_data["lon_max"] + 0.010, + "min_lat": meta_data["lat_min"] - 0.010, + "max_lat": meta_data["lat_max"] + 0.010, + } + except Exception: + # 폴백용 pyproj 변환 + src_epsg = "EPSG:5186" + if prj_path.exists(): + src_epsg = get_epsg_from_prj(prj_path.read_text(encoding="utf-8", errors="ignore")) + transformer = Transformer.from_crs(src_epsg, "EPSG:4326", always_xy=True) + x_min, x_max = bounds_meter["x"][0], bounds_meter["x"][1] + y_min, y_max = bounds_meter["y"][0], bounds_meter["y"][1] + lon_min, lat_min = transformer.transform(x_min, y_min) + lon_max, lat_max = transformer.transform(x_max, y_max) + bounds_wgs84 = { + "min_lon": min(lon_min, lon_max) - 0.002, + "max_lon": max(lon_min, lon_max) + 0.002, + "min_lat": min(lat_min, lat_max) - 0.002, + "max_lat": max(lat_min, lat_max) + 0.002, + } + else: + # 폴백용 pyproj 변환 + src_epsg = "EPSG:5186" + if prj_path.exists(): + src_epsg = get_epsg_from_prj(prj_path.read_text(encoding="utf-8", errors="ignore")) + transformer = Transformer.from_crs(src_epsg, "EPSG:4326", always_xy=True) + x_min, x_max = bounds_meter["x"][0], bounds_meter["x"][1] + y_min, y_max = bounds_meter["y"][0], bounds_meter["y"][1] + lon_min, lat_min = transformer.transform(x_min, y_min) + lon_max, lat_max = transformer.transform(x_max, y_max) + bounds_wgs84 = { + "min_lon": min(lon_min, lon_max) - 0.010, + "max_lon": max(lon_min, lon_max) + 0.010, + "min_lat": min(lat_min, lat_max) - 0.010, + "max_lat": max(lat_min, lat_max) + 0.010, + } + + # 5대 레이어 다운로드 + request_vworld_wfs( + "lt_c_landinfobasemap", "연속지적도_bounds.geojson", bounds_wgs84, output_dir + ) + request_vworld_wfs("lt_c_uq111", "용도지역도_bounds.geojson", bounds_wgs84, output_dir) + request_vworld_wfs("lt_c_adsigg", "행정구역_시군구_bounds.geojson", bounds_wgs84, output_dir) + request_vworld_wfs("lt_c_adri", "행정구역_읍면동_bounds.geojson", bounds_wgs84, output_dir) + request_vworld_wfs("lt_c_gimshydro", "수계망_물줄기_bounds.geojson", bounds_wgs84, output_dir) + request_vworld_wfs( + "lt_c_kfdrssigugrade", "산사태위험등급_bounds.geojson", bounds_wgs84, output_dir + ) + + # 6. gpkg 등고선(national_contours.gpkg) 데이터에서 + # 기준 영역 크롭하여 등고선_bounds.geojson 생성 + + gpkg_path = PROJECT_ROOT / "source" / "grobal_contours" / "national_contours.gpkg" + if gpkg_path.exists(): + try: + import geopandas as gpd + from shapely.geometry import box + + t_to_5179 = Transformer.from_crs("EPSG:4326", "EPSG:5179", always_xy=True) + min_x_5179, min_y_5179 = t_to_5179.transform( + bounds_wgs84["min_lon"], bounds_wgs84["min_lat"] + ) + max_x_5179, max_y_5179 = t_to_5179.transform( + bounds_wgs84["max_lon"], bounds_wgs84["max_lat"] + ) + + bbox = box(min_x_5179, min_y_5179, max_x_5179, max_y_5179) + + gdf = gpd.read_file(gpkg_path, bbox=bbox) + if not gdf.empty: + gdf_wgs84 = gdf.to_crs("EPSG:4326") + geojson_out = output_dir / "등고선_bounds.geojson" + gdf_wgs84.to_file(geojson_out, driver="GeoJSON") + except Exception: + pass diff --git a/B04_wf1_Surface/B04_wf1_Surface_Engine_MvtHelper.py b/B04_wf1_Surface/B04_wf1_Surface_Engine_MvtHelper.py new file mode 100644 index 0000000..c945e8f --- /dev/null +++ b/B04_wf1_Surface/B04_wf1_Surface_Engine_MvtHelper.py @@ -0,0 +1,113 @@ +"""MVT 벡터 타일 생성 유틸리티.""" + +from __future__ import annotations + +import math +from pathlib import Path +from typing import Any + +try: + import geopandas as gpd + from shapely.geometry import box +except ImportError: + gpd = None + box = None + +try: + import mapbox_vector_tile +except ImportError: + mapbox_vector_tile = None + +# 메모리 캐시: {project_id}_{layer_name}: GeoDataFrame +_gdf_cache: dict[str, Any] = {} + + +def num2deg(xtile: int, ytile: int, zoom: int) -> tuple[float, float]: + """Z/X/Y 타일 인덱스를 경도/위도(WGS84) 좌표로 변환합니다.""" + n = 1.0 << zoom + lon_deg = xtile / n * 360.0 - 180.0 + lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n))) + lat_deg = math.degrees(lat_rad) + return lon_deg, lat_deg + + +def get_tile_bbox(xtile: int, ytile: int, zoom: int) -> tuple[float, float, float, float]: + """Z/X/Y 타일의 경위도 Bounding Box (min_lon, min_lat, max_lon, max_lat)를 구합니다.""" + left, top = num2deg(xtile, ytile, zoom) + right, bottom = num2deg(xtile + 1, ytile + 1, zoom) + return min(left, right), min(top, bottom), max(left, right), max(top, bottom) + + +def load_geojson_cached(filepath: Path, cache_key: str) -> Any: + """GeoJSON 파일을 한 번 읽으면 메모리에 GeoDataFrame으로 캐싱합니다.""" + global _gdf_cache + if cache_key not in _gdf_cache: + if not filepath.exists(): + raise FileNotFoundError(f"File not found: {filepath}") + if gpd is None: + raise ImportError("geopandas가 설치되어 있지 않습니다.") + gdf = gpd.read_file(filepath) + if gdf.crs is None: + gdf.set_crs(epsg=4326, inplace=True) + if gdf.crs.to_epsg() != 4326: + gdf = gdf.to_crs(epsg=4326) + _gdf_cache[cache_key] = gdf + return _gdf_cache[cache_key] + + +def generate_mvt_tile( + filepath: Path, cache_key: str, z: int, x: int, y: int, layer_name: str = "contour" +) -> bytes: + """주어진 GeoJSON 파일에서 Z/X/Y 영역에 해당하는 데이터를 + 필터링하고 MVT 타일 바이너리로 인코딩합니다. + """ + if mapbox_vector_tile is None: + # mapbox_vector_tile 패키지가 없을 경우 빈 바이트 리턴하여 다운 방지 + return b"" + + gdf = load_geojson_cached(filepath, cache_key) + + # 1. 타일 경계 구하기 + min_lon, min_lat, max_lon, max_lat = get_tile_bbox(x, y, z) + tile_geom = box(min_lon, min_lat, max_lon, max_lat) + + # 2. 해당 영역 내에 공간적으로 접하는(Intersects) 데이터 신속 조회 + possible_matches_index = list(gdf.sindex.intersection((min_lon, min_lat, max_lon, max_lat))) + possible_matches = gdf.iloc[possible_matches_index] + + # 정확하게 겹치는 피처만 정밀 필터링 및 타일 경계로 클리핑(자르기) + clipped_gdf = possible_matches.clip(tile_geom) + + if clipped_gdf.empty: + return mapbox_vector_tile.encode([]) + + # 3. GeoJSON 스타일 피처 목록 생성 + features = [] + extent = 4096 + + for idx, row in clipped_gdf.iterrows(): + geom = row.geometry + if geom.is_empty: + continue + + properties = {} + for col in clipped_gdf.columns: + if col != "geometry": + val = row[col] + if isinstance(val, (int, float, str, bool)): + properties[col] = val + else: + properties[col] = str(val) if val is not None else "" + + features.append({"geometry": geom, "properties": properties}) + + tile_data = [{"name": layer_name, "features": features}] + + mvt_bytes = mapbox_vector_tile.encode( + tile_data, + quantize_bounds=(min_lon, min_lat, max_lon, max_lat), + y_coord_down=True, + extents=extent, + ) + + return mvt_bytes diff --git a/B04_wf1_Surface/B04_wf1_Surface_Engine_VWorld.py b/B04_wf1_Surface/B04_wf1_Surface_Engine_VWorld.py new file mode 100644 index 0000000..bfba30f --- /dev/null +++ b/B04_wf1_Surface/B04_wf1_Surface_Engine_VWorld.py @@ -0,0 +1,199 @@ +"""VWorld 위성 맵 및 타일 다운로드 엔진.""" + +from __future__ import annotations + +import json +import math +import urllib.parse +import urllib.request +from io import BytesIO +from pathlib import Path + +from PIL import Image +from pyproj import Transformer + +# 설정 불러오기 +try: + from config import config_system + + VWORLD_API_KEY = getattr( + config_system, "VWORLD_API_KEY", "3DBD7306-7DBD-38BB-B292-267C5ED7AC6B" + ) +except ImportError: + VWORLD_API_KEY = "3DBD7306-7DBD-38BB-B292-267C5ED7AC6B" + + +def get_epsg_from_prj(prj_content: str) -> str: + """PRJ 파일 텍스트 내용을 해석하여 적합한 EPSG 좌표계 코드를 추정합니다. + + 기본 한반도 주요 좌표계 매핑: + - Korea Central Belt (중부원점 20만, 60만) -> EPSG:5186 (Korea 2000 Central) + - Korea East Belt (동부원점) -> EPSG:5187 + - Korea West Belt (서부원점) -> EPSG:5185 + - WGS84 UTM 52N -> EPSG:32652 + """ + prj_upper = prj_content.upper() + if "EAST" in prj_upper: + return "EPSG:5187" + elif "WEST" in prj_upper: + return "EPSG:5185" + elif "CENTRAL" in prj_upper: + return "EPSG:5186" + elif "UTM" in prj_upper and "52N" in prj_upper: + return "EPSG:32652" + + # 디폴트는 한국 중부 2000 좌표계 적용 + return "EPSG:5186" + + +def latlon_to_tile(lat: float, lon: float, zoom: int) -> tuple[int, int]: + """위도, 경도를 OSM/VWorld 표준 지도 타일 좌표 (X, Y)로 변환합니다.""" + lat_rad = math.radians(lat) + n = 2.0**zoom + xtile = int((lon + 180.0) / 360.0 * n) + ytile = int((1.0 - math.log(math.tan(lat_rad) + (1 / math.cos(lat_rad))) / math.pi) / 2.0 * n) + return xtile, ytile + + +def tile_to_latlon(xtile: int, ytile: int, zoom: int) -> tuple[float, float]: + """OSM/VWorld 표준 타일 좌표 (X, Y)를 위도, 경도 좌표로 역변환합니다.""" + n = 2.0**zoom + lon_deg = xtile / n * 360.0 - 180.0 + lat_rad = math.atan(math.sinh(math.pi * (1 - 2 * ytile / n))) + lat_deg = math.degrees(lat_rad) + return lat_deg, lon_deg + + +def download_vworld_satellite_map( + prj_path: Path, bounds: dict, output_dir: Path, layer_name: str = "Satellite", ext: str = "jpeg" +) -> Path | None: + """PRJ 좌표 정보와 지형 범위(bounds)를 바탕으로, + 해당 임도 산림 지역을 감싸는 VWorld 지도 타일을 다운로드하여 하나의 PNG 텍스처로 병합합니다. + """ + output_dir.mkdir(parents=True, exist_ok=True) + file_name = f"vworld_{layer_name.lower()}.png" + map_png_path = output_dir / file_name + meta_json_path = output_dir / f"vworld_{layer_name.lower()}_meta.json" + + # 1. PRJ 내용 분석 + if not prj_path.exists(): + return None + prj_content = prj_path.read_text(encoding="utf-8", errors="ignore") + src_epsg = get_epsg_from_prj(prj_content) + + # 2. 중심점 및 경계 좌표 위경도 변환 + # bounds: {'x': [x_min, x_max], 'y': [y_min, y_max], 'z': [z_min, z_max]} + x_min, x_max = bounds["x"][0], bounds["x"][1] + y_min, y_max = bounds["y"][0], bounds["y"][1] + + # 좌표 변환기 생성 (지정 좌표계 -> 경위도 EPSG:4326) + try: + transformer = Transformer.from_crs(src_epsg, "EPSG:4326", always_xy=True) + except Exception: + # 실패 시 강제로 Korea Central -> WGS84 생성 + transformer = Transformer.from_crs("EPSG:5186", "EPSG:4326", always_xy=True) + + lon_min, lat_min = transformer.transform(x_min, y_min) + lon_max, lat_max = transformer.transform(x_max, y_max) + + # 3. 지도 타일 크기 결정 (ZOOM 18 초고해상도 적용) + zoom = 18 + + # 영역을 포괄하는 좌상단 타일, 우하단 타일 인덱스 산출 + x1, y1 = latlon_to_tile(lat_max, lon_min, zoom) + x2, y2 = latlon_to_tile(lat_min, lon_max, zoom) + + # 타일 경계 마진 패딩 + x_start = min(x1, x2) - 1 + x_end = max(x1, x2) + 1 + y_start = min(y1, y2) - 1 + y_end = max(y1, y2) + 1 + + tile_w = x_end - x_start + 1 + tile_h = y_end - y_start + 1 + + # 너무 많은 타일을 다운로드하여 IP 차단되는 것을 방지 + if tile_w > 15: + tile_w = 15 + x_end = x_start + 14 + if tile_h > 15: + tile_h = 15 + y_end = y_start + 14 + + # 4. 개별 타일 다운로드 및 이미지 병합 + map_img = Image.new("RGBA", (tile_w * 256, tile_h * 256)) + headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"} + + for ty in range(y_start, y_end + 1): + for tx in range(x_start, x_end + 1): + try: + normalized_layer = layer_name.lower() + if normalized_layer == "satellite": + sat_url = f"http://api.vworld.kr/req/wmts/1.0.0/{VWORLD_API_KEY}/Satellite/{zoom}/{ty}/{tx}.jpeg" + sat_req = urllib.request.Request(sat_url, headers=headers) + with urllib.request.urlopen(sat_req, timeout=5) as sat_res: + sat_data = sat_res.read() + base_img = Image.open(BytesIO(sat_data)).convert("RGBA") + elif normalized_layer == "hybrid": + hy_url = f"http://api.vworld.kr/req/wmts/1.0.0/{VWORLD_API_KEY}/Hybrid/{zoom}/{ty}/{tx}.png" + hy_req = urllib.request.Request(hy_url, headers=headers) + with urllib.request.urlopen(hy_req, timeout=5) as hy_res: + hy_data = hy_res.read() + base_img = Image.open(BytesIO(hy_data)).convert("RGBA") + elif normalized_layer == "white": + white_url = f"http://api.vworld.kr/req/wmts/1.0.0/{VWORLD_API_KEY}/white/{zoom}/{ty}/{tx}.png" + white_req = urllib.request.Request(white_url, headers=headers) + with urllib.request.urlopen(white_req, timeout=5) as white_res: + white_data = white_res.read() + base_img = Image.open(BytesIO(white_data)).convert("RGBA") + else: + layer_url = f"http://api.vworld.kr/req/wmts/1.0.0/{VWORLD_API_KEY}/{layer_name}/{zoom}/{ty}/{tx}.{ext}" + layer_req = urllib.request.Request(layer_url, headers=headers) + with urllib.request.urlopen(layer_req, timeout=5) as layer_res: + layer_data = layer_res.read() + base_img = Image.open(BytesIO(layer_data)).convert("RGBA") + + # 병합 좌표 계산 + px = (tx - x_start) * 256 + py = (ty - y_start) * 256 + map_img.paste(base_img, (px, py)) + except Exception: + # 다운로드 실패 시 회색 격자 텍스처로 대체 + fallback_tile = Image.new("RGBA", (256, 256), (200, 200, 200, 255)) + px = (tx - x_start) * 256 + py = (ty - y_start) * 256 + map_img.paste(fallback_tile, (px, py)) + + # 5. 병합된 이미지의 실제 위경도 바운더리 계산 + lat_top, lon_left = tile_to_latlon(x_start, y_start, zoom) + lat_bottom, lon_right = tile_to_latlon(x_end + 1, y_end + 1, zoom) + + # 위경도를 다시 원본 Local 3D 미터 좌표계로 변환 + try: + rev_transformer = Transformer.from_crs("EPSG:4326", src_epsg, always_xy=True) + except Exception: + rev_transformer = Transformer.from_crs("EPSG:4326", "EPSG:5186", always_xy=True) + + img_x_min, img_y_max = rev_transformer.transform(lon_left, lat_top) + img_x_max, img_y_min = rev_transformer.transform(lon_right, lat_bottom) + + # 6. 이미지 저장 및 메타데이터 작성 + map_img.save(map_png_path, "PNG") + + meta = { + "x_min": img_x_min, + "x_max": img_x_max, + "y_min": img_y_min, + "y_max": img_y_max, + "width_meters": img_x_max - img_x_min, + "height_meters": img_y_max - img_y_min, + "center_x": (img_x_min + img_x_max) / 2.0, + "center_y": (img_y_min + img_y_max) / 2.0, + "lon_min": lon_left, + "lon_max": lon_right, + "lat_min": lat_bottom, + "lat_max": lat_top, + } + meta_json_path.write_text(json.dumps(meta, indent=2), encoding="utf-8") + + return map_png_path diff --git a/B04_wf1_Surface/B04_wf1_Surface_Router.py b/B04_wf1_Surface/B04_wf1_Surface_Router.py index 3df369b..55acf7c 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_Router.py +++ b/B04_wf1_Surface/B04_wf1_Surface_Router.py @@ -9,7 +9,7 @@ from uuid import UUID import aiomysql import numpy as np -from fastapi import APIRouter +from fastapi import APIRouter, HTTPException, Response from fastapi.responses import FileResponse, JSONResponse from B03_FileInput.B03_FileInput_Repository import get_project_storage_relative_path @@ -637,3 +637,202 @@ async def get_surface_model_contour( status_code=500, content={"status": "error", "message": "등고선 파일 조회 중 오류가 발생했습니다."}, ) + + +# VWorld 메타 API +@router.get("/{project_id}/vworld-meta", response_model=None) +async def get_vworld_meta( + project_id: UUID, layer_name: str = "satellite" +) -> dict[str, Any] | JSONResponse: + """VWorld 위성 맵 이미지 매핑 좌표 메타데이터를 반환합니다.""" + pool = get_db_pool() + try: + async with pool.acquire() as connection: + stored_path = await get_project_storage_relative_path(connection, project_id) + project_root = Path(resolve_stored_project_path(stored_path)) + target_dir = project_root / "B04_wf1_Surface" / "processed" + + target_layer = "white" if layer_name.lower() in ["gray", "white"] else layer_name.lower() + meta_name = f"vworld_{target_layer}_meta.json" + meta_path = target_dir / meta_name + + if not meta_path.exists() and target_layer == "satellite": + meta_path = target_dir / "vworld_meta.json" + + if not meta_path.exists(): + return JSONResponse( + status_code=404, + content={ + "status": "error", + "message": f"VWorld {layer_name} 메타데이터를 찾을 수 없습니다.", + }, + ) + return json.loads(meta_path.read_text(encoding="utf-8")) + except Exception as exc: + return JSONResponse(status_code=500, content={"status": "error", "message": str(exc)}) + + +# VWorld 맵 API +@router.get("/{project_id}/vworld-map", response_model=None) +async def get_vworld_map( + project_id: UUID, layer_name: str = "satellite" +) -> FileResponse | JSONResponse: + """배경 지도 레이어 PNG 이미지를 반환합니다.""" + pool = get_db_pool() + try: + async with pool.acquire() as connection: + stored_path = await get_project_storage_relative_path(connection, project_id) + project_root = Path(resolve_stored_project_path(stored_path)) + target_dir = project_root / "B04_wf1_Surface" / "processed" + + target_layer = layer_name.lower() + if target_layer in ["gray", "white"]: + target_layer = "white" + + map_name = f"vworld_{target_layer}.png" + map_path = target_dir / map_name + + if not map_path.exists() and target_layer == "satellite": + map_path = target_dir / "vworld_map.png" + + if not map_path.exists(): + return JSONResponse( + status_code=404, + content={ + "status": "error", + "message": f"VWorld {layer_name} 지도가 존재하지 않습니다.", + }, + ) + return FileResponse(map_path, media_type="image/png") + except Exception as exc: + return JSONResponse(status_code=500, content={"status": "error", "message": str(exc)}) + + +# GeoJSON 조회 API +@router.get("/{project_id}/geojson", response_model=None) +async def get_project_geojson(project_id: UUID, layer: str) -> dict[str, Any] | JSONResponse: + """저장된 프로젝트의 특정 GeoJSON 레이어 데이터를 반환합니다.""" + pool = get_db_pool() + try: + async with pool.acquire() as connection: + stored_path = await get_project_storage_relative_path(connection, project_id) + project_root = Path(resolve_stored_project_path(stored_path)) + target_dir = project_root / "B04_wf1_Surface" / "processed" + + layer_mapping = { + "지적도": "연속지적도_bounds.geojson", + "용도지역": "용도지역도_bounds.geojson", + "행정구역_시군구": "행정구역_시군구_bounds.geojson", + "행정구역_읍면동": "행정구역_읍면동_bounds.geojson", + "수계망": "수계망_물줄기_bounds.geojson", + "등고선": "등고선_bounds.geojson", + "산사태": "산사태위험등급_bounds.geojson", + } + + filename = layer_mapping.get(layer) + if not filename: + return JSONResponse( + status_code=400, + content={"status": "error", "message": "유효하지 않은 레이어명입니다."}, + ) + + filepath = target_dir / filename + if not filepath.exists(): + return JSONResponse( + status_code=404, + content={ + "status": "error", + "message": f"요청한 레이어({layer}) 파일이 존재하지 않습니다.", + }, + ) + + if layer == "등고선": + simplified_filepath = target_dir / "등고선_bounds_simplified.geojson" + if simplified_filepath.exists(): + try: + return json.loads(simplified_filepath.read_text(encoding="utf-8")) + except Exception: + pass + + try: + import geopandas as gpd + + gdf = gpd.read_file(filepath) + gdf["geometry"] = gdf["geometry"].simplify( + tolerance=0.00003, preserve_topology=True + ) + simplified_filepath.write_text(gdf.to_json(), encoding="utf-8") + return json.loads(simplified_filepath.read_text(encoding="utf-8")) + except Exception as e: + logger.warning("등고선 단순화 처리 실패 (원본 전송): %s", e) + + return json.loads(filepath.read_text(encoding="utf-8")) + except Exception as exc: + return JSONResponse(status_code=500, content={"status": "error", "message": str(exc)}) + + +# 별도 tiles_router 정의 (prefix 없음) +tiles_router = APIRouter(tags=["B04 MVT Tiles"]) + + +@tiles_router.get("/tiles/{project_id}/{layer}/{z}/{x}/{y}.pbf", response_model=None) +async def get_vector_tile(project_id: UUID, layer: str, z: int, x: int, y: int) -> Response: + """프로젝트의 특정 레이어에 대한 정밀 벡터 타일(MVT) 조각을 동적으로 렌더링하여 반환합니다.""" + pool = get_db_pool() + try: + async with pool.acquire() as connection: + stored_path = await get_project_storage_relative_path(connection, project_id) + project_root = Path(resolve_stored_project_path(stored_path)) + target_dir = project_root / "B04_wf1_Surface" / "processed" + + layer_mapping = { + "지적도": "연속지적도_bounds.geojson", + "용도지역": "용도지역도_bounds.geojson", + "행정구역_시군구": "행정구역_시군구_bounds.geojson", + "행정구역_읍면동": "행정구역_읍면동_bounds.geojson", + "수계망": "수계망_물줄기_bounds.geojson", + "등고선": "등고선_bounds.geojson", + "산사태": "산사태위험등급_bounds.geojson", + "임도노선": "임도노선.geojson", + } + + filename = layer_mapping.get(layer) + if not filename: + raise HTTPException(status_code=400, detail="유효하지 않은 레이어명입니다.") + + filepath = target_dir / filename + + if layer == "임도노선" and not filepath.exists(): + from config.config_system import PROJECT_ROOT + + road_shp_candidates = list(PROJECT_ROOT.glob("samples/**/*_Polyline.shp")) + if road_shp_candidates: + try: + import geopandas as gpd + + gdf = gpd.read_file(road_shp_candidates[0]) + gdf = gdf.to_crs(epsg=4326) + filepath.write_text(gdf.to_json(), encoding="utf-8") + except Exception: + pass + + if not filepath.exists(): + import mapbox_vector_tile + + empty_tile = mapbox_vector_tile.encode([]) if mapbox_vector_tile else b"" + return Response(content=empty_tile, media_type="application/x-protobuf") + + cache_key = f"{project_id}_{layer}" + from B04_wf1_Surface.B04_wf1_Surface_Engine_MvtHelper import generate_mvt_tile + + mvt_bytes = generate_mvt_tile(filepath, cache_key, z, x, y, layer_name=layer) + return Response( + content=mvt_bytes, + media_type="application/x-protobuf", + headers={"Content-Encoding": "identity"}, + ) + except Exception: + import mapbox_vector_tile + + empty_tile = mapbox_vector_tile.encode([]) if mapbox_vector_tile else b"" + return Response(content=empty_tile, media_type="application/x-protobuf") diff --git a/B04_wf1_Surface/B04_wf1_Surface_UI_Page.ts b/B04_wf1_Surface/B04_wf1_Surface_UI_Page.ts index 7678109..9959e75 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_UI_Page.ts +++ b/B04_wf1_Surface/B04_wf1_Surface_UI_Page.ts @@ -11,8 +11,9 @@ * 텍스트는 ui_template_locale에 선(先) 등록 후 참조 (frontend.md §3). * ========================================================================== */ -import { CURRENT_PROJECT_ID_KEY } from "@config/config_frontend"; +import { CURRENT_PROJECT_ID_KEY, ROUTES, type RoutePath } from "@config/config_frontend"; import { currentLanguageIndex, ui_locales } from "@ui/ui_template_locale"; +import { navigateTo } from "../A00_Common/router"; import { createButton, createTag, @@ -32,7 +33,7 @@ import { type SurfaceModelSummary, type SurfaceStatusResponse, } from "./B04_wf1_Surface_Api_Fetch"; -import { createWorkflowLayout } from "@ui/ui_template_workflow_layout"; +import { createWorkflowLayout, type WorkflowStage } from "@ui/ui_template_workflow_layout"; import { createSurfacePointCloudViewer } from "./B04_wf1_Surface_UI_Viewer"; import { createSurfaceTerrainViewer } from "./B04_wf1_Surface_UI_TerrainViewer"; import "./B04_wf1_Surface_UI_Style.css"; @@ -91,7 +92,7 @@ function buildInfoLine(label: string, value: unknown): HTMLElement { return row; } -export function renderB04Surface(root: HTMLElement): void { +export async function renderB04Surface(root: HTMLElement): Promise { let selectedInputFile: SurfaceInputFileSummary | null = null; let inputFiles: SurfaceInputFileSummary[] = []; @@ -190,12 +191,44 @@ export function renderB04Surface(root: HTMLElement): void { bottom.append(statsSection, modelsSection); workspace.append(topbar, viewer.root, terrainViewer.root, bottom); + const workflowRoutes = [ + 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, + ]; + + let workflowStages: WorkflowStage[] = []; + const layoutProjectId = localStorage.getItem(CURRENT_PROJECT_ID_KEY); + if (layoutProjectId) { + try { + const res = await fetch(`/api/projects/${layoutProjectId}/workflow-state`); + if (res.ok) { + const data = await res.json(); + workflowStages = data.workflow_state?.stages ?? data.stages ?? []; + } + } catch { + /* 실패 시 빈 배열 → activeStep 기준 폴백으로 이동 허용 */ + } + } + const layout = createWorkflowLayout({ title: L("B04_Surface_Title"), steps: workflowSteps(), activeStep: 1, leftPanel: panel, mainContent: workspace, + stages: workflowStages, + routes: workflowRoutes, + onStepClick: (_stepIndex, route) => { + if (layoutProjectId) { + localStorage.setItem(CURRENT_PROJECT_ID_KEY, layoutProjectId); + navigateTo(route as RoutePath); + } + }, }); function getProjectId(): string | null { diff --git a/B04_wf1_Surface/B04_wf1_Surface_UI_TerrainViewer.ts b/B04_wf1_Surface/B04_wf1_Surface_UI_TerrainViewer.ts index 62d4b47..ef4595d 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_UI_TerrainViewer.ts +++ b/B04_wf1_Surface/B04_wf1_Surface_UI_TerrainViewer.ts @@ -3,11 +3,13 @@ import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js"; import { PLYLoader } from "three/examples/jsm/loaders/PLYLoader.js"; import type { SurfaceModelSummary } from "./B04_wf1_Surface_Api_Fetch"; -import { API_BASE_URL } from "@config/config_frontend"; +import { fetchVWorldMeta, getVWorldMapUrl, fetchGisGeoJson } from "./B04_wf1_Surface_Api_Fetch"; export interface SurfaceTerrainViewer { root: HTMLElement; render: (projectId: string, models: readonly SurfaceModelSummary[]) => void; + updateBgMap: (projectId: string, bgLayer: string) => void; + updateGisLayer: (projectId: string, gisLayer: string) => void; dispose: () => void; } @@ -263,6 +265,46 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { scaleBar.append(scaleLabel); viewerArea.append(scaleBar); + // Elevation bounds legend bar overlay (I-403) + const legendBar = document.createElement("div"); + legendBar.style.position = "absolute"; + legendBar.style.top = "16px"; + legendBar.style.right = "16px"; + legendBar.style.background = "rgba(255, 255, 255, 0.9)"; + legendBar.style.border = "1px solid #cbd5e1"; + legendBar.style.borderRadius = "6px"; + legendBar.style.padding = "8px"; + legendBar.style.width = "50px"; + legendBar.style.display = "none"; // hidden until contours are loaded + legendBar.style.flexDirection = "column"; + legendBar.style.alignItems = "center"; + legendBar.style.zIndex = "10"; + legendBar.style.boxShadow = "0 2px 6px rgba(0,0,0,0.08)"; + legendBar.style.pointerEvents = "none"; + + const maxValSpan = document.createElement("span"); + maxValSpan.style.fontSize = "10px"; + maxValSpan.style.fontWeight = "bold"; + maxValSpan.style.color = "#b91c1c"; + maxValSpan.style.marginBottom = "4px"; + + const gradientDiv = document.createElement("div"); + gradientDiv.style.width = "12px"; + gradientDiv.style.height = "120px"; + gradientDiv.style.background = + "linear-gradient(to bottom, #d60000 0%, #ff5100 25%, #e6a100 50%, #228b22 75%, #3a85ff 100%)"; + gradientDiv.style.borderRadius = "2px"; + gradientDiv.style.border = "1px solid #94a3b8"; + + const minValSpan = document.createElement("span"); + minValSpan.style.fontSize = "10px"; + minValSpan.style.fontWeight = "bold"; + minValSpan.style.color = "#1d4ed8"; + minValSpan.style.marginTop = "4px"; + + legendBar.append(maxValSpan, gradientDiv, minValSpan); + viewerArea.append(legendBar); + // Three.js context variables let currentProjectId = ""; let currentModelsList: readonly SurfaceModelSummary[] = []; @@ -324,6 +366,7 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { } labelElements.forEach((el) => el.remove()); labelElements.length = 0; + legendBar.style.display = "none"; } const getFitParams = (object: THREE.Object3D) => { @@ -376,8 +419,7 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { const match = currentModelsList.find((m) => { const typeMatches = m.model_type.toLowerCase() === activeMethod.toLowerCase(); const pathContainsFilter = - m.model_file_path && - m.model_file_path.toLowerCase().includes(activeFilter.toLowerCase()); + m.model_file_path && m.model_file_path.toLowerCase().includes(activeFilter.toLowerCase()); return typeMatches && pathContainsFilter; }); @@ -471,7 +513,13 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { }); }; + let minH = Infinity; + let maxH = -Infinity; + data.contours.forEach((c: any) => { + if (c.level < minH) minH = c.level; + if (c.level > maxH) maxH = c.level; + const points = transform(c.coordinates); if (points.length < 2) return; @@ -531,8 +579,18 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { labelElements.push(labelDiv); } }); + + if (minH !== Infinity && maxH !== -Infinity) { + const nearestMin10 = Math.round(minH / 10) * 10; + const nearestMax10 = Math.round(maxH / 10) * 10; + maxValSpan.textContent = `${nearestMax10}m`; + minValSpan.textContent = `${nearestMin10}m`; + legendBar.style.display = "flex"; + } else { + legendBar.style.display = "none"; + } } catch (e) { - // Contour loading failed or silent fail + legendBar.style.display = "none"; } } @@ -652,6 +710,12 @@ export function createSurfaceTerrainViewer(): SurfaceTerrainViewer { currentModelsList = models; updateSelectedModel(); }, + updateBgMap(projectId, bgLayer) { + // 포인트클라우드 뷰어와 인터페이스 조화를 위해 빈 껍데기 함수 정의 + }, + updateGisLayer(projectId, gisLayer) { + // 포인트클라우드 뷰어와 인터페이스 조화를 위해 빈 껍데기 함수 정의 + }, dispose() { cancelAnimationFrame(animationFrameId); resizeObserver.disconnect(); diff --git a/B04_wf1_Surface/B04_wf1_Surface_UI_Viewer.ts b/B04_wf1_Surface/B04_wf1_Surface_UI_Viewer.ts index 2ac9fb0..f42d381 100644 --- a/B04_wf1_Surface/B04_wf1_Surface_UI_Viewer.ts +++ b/B04_wf1_Surface/B04_wf1_Surface_UI_Viewer.ts @@ -1,7 +1,12 @@ import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; import { RENDER_OPTIONS } from "@config/config_frontend"; -import type { SurfacePointCloudSampleResponse } from "./B04_wf1_Surface_Api_Fetch"; +import { + fetchVWorldMeta, + getVWorldMapUrl, + fetchGisGeoJson, + type SurfacePointCloudSampleResponse, +} from "./B04_wf1_Surface_Api_Fetch"; export interface SurfacePointCloudViewer { root: HTMLElement; @@ -9,6 +14,8 @@ export interface SurfacePointCloudViewer { optionsGroup: HTMLElement; statusSpan: HTMLElement; render: (data: SurfacePointCloudSampleResponse | null) => void; + updateBgMap: (projectId: string, bgLayer: string) => void; + updateGisLayer: (projectId: string, gisLayer: string) => void; dispose: () => void; } @@ -85,7 +92,53 @@ export function createSurfacePointCloudViewer(): SurfacePointCloudViewer { densityInput.value = "10"; densityLabel.append(densityInput); - optionsDiv.append(sizeLabel, densityLabel); + const bgLabel = document.createElement("label"); + bgLabel.textContent = "배경 지도 "; + bgLabel.style.display = "flex"; + bgLabel.style.flexDirection = "column"; + bgLabel.style.gap = "var(--spacing-4)"; + bgLabel.style.marginTop = "var(--spacing-8)"; + const bgSelect = document.createElement("select"); + bgSelect.className = "b04-surface__select"; + const bgOptions = [ + { value: "none", label: "없음" }, + { value: "satellite", label: "위성사진" }, + { value: "hybrid", label: "하이브리드 지도" }, + { value: "white", label: "백지도" }, + ]; + bgOptions.forEach((opt) => { + const o = document.createElement("option"); + o.value = opt.value; + o.textContent = opt.label; + bgSelect.append(o); + }); + bgLabel.append(bgSelect); + + const gisLabel = document.createElement("label"); + gisLabel.textContent = "국가 GIS 레이어 "; + gisLabel.style.display = "flex"; + gisLabel.style.flexDirection = "column"; + gisLabel.style.gap = "var(--spacing-4)"; + gisLabel.style.marginTop = "var(--spacing-8)"; + const gisSelect = document.createElement("select"); + gisSelect.className = "b04-surface__select"; + const gisOptions = [ + { value: "none", label: "없음" }, + { value: "지적도", label: "연속지적도" }, + { value: "수계망", label: "수계망" }, + { value: "산사태", label: "산사태위험등급" }, + { value: "행정구역_시군구", label: "시군구 경계" }, + { value: "행정구역_읍면동", label: "읍면동 경계" }, + ]; + gisOptions.forEach((opt) => { + const o = document.createElement("option"); + o.value = opt.value; + o.textContent = opt.label; + gisSelect.append(o); + }); + gisLabel.append(gisSelect); + + optionsDiv.append(sizeLabel, densityLabel, bgLabel, gisLabel); const optionsGroup = document.createElement("section"); optionsGroup.className = "b04-surface__group"; @@ -151,6 +204,8 @@ export function createSurfacePointCloudViewer(): SurfacePointCloudViewer { scene.add(axes); let pointsObject: THREE.Points | null = null; + let bgPlane: THREE.Mesh | null = null; + let gisObjects: THREE.Object3D[] = []; let animationFrame = 0; let currentData: SurfacePointCloudSampleResponse | null = null; @@ -343,15 +398,204 @@ export function createSurfacePointCloudViewer(): SurfacePointCloudViewer { statusSpan.textContent = ` ${renderPoints.length.toLocaleString()}개 점 표시 중 [높이범위: ~${nearestMin10}m ... ${nearestMax10}m~]`; } + function clearBgMap(): void { + if (bgPlane) { + bgPlane.geometry.dispose(); + if (Array.isArray(bgPlane.material)) { + bgPlane.material.forEach((mat) => mat.dispose()); + } else { + bgPlane.material.dispose(); + } + scene.remove(bgPlane); + bgPlane = null; + } + } + + function clearGisLayers(): void { + gisObjects.forEach((obj) => { + if (obj instanceof THREE.Line) { + obj.geometry.dispose(); + if (Array.isArray(obj.material)) { + obj.material.forEach((mat) => mat.dispose()); + } else { + obj.material.dispose(); + } + } + scene.remove(obj); + }); + gisObjects = []; + } + + function updateBgMap(projectId: string, bgLayer: string): void { + clearBgMap(); + if (bgLayer === "none" || !currentData) return; + + const bounds = currentData.bounds; + const xMin = bounds.x_min ?? 0; + const xMax = bounds.x_max ?? 0; + const yMin = bounds.y_min ?? 0; + const yMax = bounds.y_max ?? 0; + const zMin = bounds.z_min ?? 0; + const zMax = bounds.z_max ?? 0; + + const xMid = (xMin + xMax) / 2; + const yMid = (yMin + yMax) / 2; + const zMid = (zMin + zMax) / 2; + + const xSpan = Math.max(xMax - xMin, 1e-9); + const ySpan = Math.max(yMax - yMin, 1e-9); + const zSpan = Math.max(zMax - zMin, 1e-9); + const scale = 180 / Math.max(xSpan, ySpan, zSpan); + + const targetLayer = bgLayer === "gray" ? "white" : bgLayer; + + fetchVWorldMeta(projectId, targetLayer) + .then((meta) => { + const planeW = meta.width_meters * scale; + const planeH = meta.height_meters * scale; + const planeGeo = new THREE.PlaneGeometry(planeW, planeH); + + const textureLoader = new THREE.TextureLoader(); + textureLoader.load(getVWorldMapUrl(projectId, targetLayer), (texture) => { + const planeMat = new THREE.MeshBasicMaterial({ + map: texture, + side: THREE.DoubleSide, + transparent: true, + opacity: 0.85, + }); + bgPlane = new THREE.Mesh(planeGeo, planeMat); + bgPlane.rotation.x = -Math.PI / 2; + + const planeCenterX = (meta.center_x - xMid) * scale; + const planeCenterY = -(meta.center_y - yMid) * scale; + const planeCenterZ = (zMin - zMid) * scale - 0.5; + + bgPlane.position.set(planeCenterX, planeCenterZ, planeCenterY); + scene.add(bgPlane); + }); + }) + .catch((e) => console.log("VWorld 배경 로드 실패:", e.message)); + } + + function updateGisLayer(projectId: string, gisLayer: string): void { + clearGisLayers(); + if (gisLayer === "none" || !currentData) return; + + const bounds = currentData.bounds; + const xMin = bounds.x_min ?? 0; + const xMax = bounds.x_max ?? 0; + const yMin = bounds.y_min ?? 0; + const yMax = bounds.y_max ?? 0; + const zMin = bounds.z_min ?? 0; + const zMax = bounds.z_max ?? 0; + + const xMid = (xMin + xMax) / 2; + const yMid = (yMin + yMax) / 2; + const zMid = (zMin + zMax) / 2; + + const xSpan = Math.max(xMax - xMin, 1e-9); + const ySpan = Math.max(yMax - yMin, 1e-9); + const zSpan = Math.max(zMax - zMin, 1e-9); + const scale = 180 / Math.max(xSpan, ySpan, zSpan); + + Promise.all([fetchGisGeoJson(projectId, gisLayer), fetchVWorldMeta(projectId, "white")]) + .then(([geoData, meta]) => { + const lonRange = meta.lon_max - meta.lon_min; + const latRange = meta.lat_max - meta.lat_min; + const xRange = meta.x_max - meta.x_min; + const yRange = meta.y_max - meta.y_min; + + const toLocal = (lon: number, lat: number): [number, number] => { + const localX_m = meta.x_min + ((lon - meta.lon_min) / lonRange) * xRange; + const localY_m = meta.y_min + ((lat - meta.lat_min) / latRange) * yRange; + return [(localX_m - xMid) * scale, -(localY_m - yMid) * scale]; + }; + + const features = geoData.features || []; + const colors: Record = { + 지적도: 0xff5500, + 수계망: 0x00aaff, + 산사태: 0xff0055, + 행정구역_시군구: 0x333333, + 행정구역_읍면동: 0x666666, + }; + const layerColor = colors[gisLayer] || 0x00aa00; + const groundZ = (zMin - zMid) * scale + 0.1; + + features.forEach((feat: any) => { + const geom = feat.geometry; + if (!geom) return; + + const drawRing = (ring: number[][]) => { + const pts: THREE.Vector3[] = ring.map((pt) => { + const [lx, ly] = toLocal(pt[0], pt[1]); + return new THREE.Vector3(lx, groundZ, ly); + }); + if (pts.length === 0) return; + const lineGeo = new THREE.BufferGeometry().setFromPoints(pts); + const lineMat = new THREE.LineBasicMaterial({ color: layerColor }); + const line = new THREE.Line(lineGeo, lineMat); + scene.add(line); + gisObjects.push(line); + }; + + const drawCoordinates = (coords: any[], type: string) => { + if (type === "Polygon") { + coords.forEach((ring: number[][]) => drawRing(ring)); + } else if (type === "MultiPolygon") { + coords.forEach((poly: any[]) => drawCoordinates(poly, "Polygon")); + } else if (type === "LineString") { + drawRing(coords as number[][]); + } else if (type === "MultiLineString") { + (coords as number[][][]).forEach((line) => drawRing(line)); + } + }; + + drawCoordinates(geom.coordinates, geom.type); + }); + }) + .catch((err) => console.error("GIS 벡터 로드 실패:", err)); + } + + const getProjectIdLocal = () => { + return localStorage.getItem("current_project_id"); + }; + + bgSelect.addEventListener("change", () => { + const projId = getProjectIdLocal(); + if (projId) { + updateBgMap(projId, bgSelect.value); + } + }); + + gisSelect.addEventListener("change", () => { + const projId = getProjectIdLocal(); + if (projId) { + updateGisLayer(projId, gisSelect.value); + } + }); + function render(data: SurfacePointCloudSampleResponse | null): void { currentData = data; clearPoints(); + clearBgMap(); + clearGisLayers(); if (!data) { statusSpan.textContent = "데이터가 존재하지 않습니다."; return; } renderPointCloudInternal(data); setCameraView("top"); + + const projId = getProjectIdLocal(); + if (projId) { + if (bgSelect.value !== "none") { + updateBgMap(projId, bgSelect.value); + } + if (gisSelect.value !== "none") { + updateGisLayer(projId, gisSelect.value); + } + } } // Event Listeners @@ -377,6 +621,11 @@ export function createSurfacePointCloudViewer(): SurfacePointCloudViewer { if (valSpan) valSpan.textContent = `${val * 10}%`; if (currentData) { renderPointCloudInternal(currentData); + const projId = getProjectIdLocal(); + if (projId) { + if (bgSelect.value !== "none") updateBgMap(projId, bgSelect.value); + if (gisSelect.value !== "none") updateGisLayer(projId, gisSelect.value); + } } }); @@ -388,9 +637,13 @@ export function createSurfacePointCloudViewer(): SurfacePointCloudViewer { optionsGroup, statusSpan, render, + updateBgMap, + updateGisLayer, dispose: () => { cancelAnimationFrame(animationFrame); clearPoints(); + clearBgMap(); + clearGisLayers(); controls.dispose(); renderer.dispose(); }, diff --git a/B05_wf2_Route/B05_wf2_Route_UI_Page.ts b/B05_wf2_Route/B05_wf2_Route_UI_Page.ts index d63257f..e791845 100644 --- a/B05_wf2_Route/B05_wf2_Route_UI_Page.ts +++ b/B05_wf2_Route/B05_wf2_Route_UI_Page.ts @@ -71,7 +71,7 @@ function parseNumber(value: string): number | null { return Number.isFinite(parsed) ? parsed : null; } -export function renderB05Route(root: HTMLElement): void { +export async function renderB05Route(root: HTMLElement): Promise { /* ---- 좌측: 경로 제어점 ---- */ const pointsGroup = document.createElement("fieldset"); pointsGroup.className = "b05-route__group"; @@ -333,14 +333,15 @@ export function renderB05Route(root: HTMLElement): void { let workflowStages: WorkflowStage[] = []; const projectId = localStorage.getItem(CURRENT_PROJECT_ID_KEY); if (projectId) { - fetch(`/api/projects/${projectId}/workflow-state`) - .then((res) => res.json()) - .then((data) => { - workflowStages = data.stages || []; - }) - .catch(() => { - /* silently fail */ - }); + try { + const res = await fetch(`/api/projects/${projectId}/workflow-state`); + if (res.ok) { + const data = await res.json(); + workflowStages = data.workflow_state?.stages ?? data.stages ?? []; + } + } catch { + /* 실패 시 빈 배열 → activeStep 기준 폴백으로 이동 허용 */ + } } const layout = createWorkflowLayout({ diff --git a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts index 190b759..e6c81db 100644 --- a/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts +++ b/B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts @@ -54,7 +54,7 @@ function parseNumber(value: string): number | null { return Number.isFinite(parsed) ? parsed : null; } -export function renderB06ProfileCross(root: HTMLElement): void { +export async function renderB06ProfileCross(root: HTMLElement): Promise { let currentRouteId: number | null = null; /* ---- 좌측: 대상 경로 ---- */ @@ -255,14 +255,15 @@ export function renderB06ProfileCross(root: HTMLElement): void { let workflowStages: WorkflowStage[] = []; const projectId = localStorage.getItem(CURRENT_PROJECT_ID_KEY); if (projectId) { - fetch(`/api/projects/${projectId}/workflow-state`) - .then((res) => res.json()) - .then((data) => { - workflowStages = data.stages || []; - }) - .catch(() => { - /* silently fail */ - }); + try { + const res = await fetch(`/api/projects/${projectId}/workflow-state`); + if (res.ok) { + const data = await res.json(); + workflowStages = data.workflow_state?.stages ?? data.stages ?? []; + } + } catch { + /* 실패 시 빈 배열 → activeStep 기준 폴백으로 이동 허용 */ + } } const layout = createWorkflowLayout({ diff --git a/CLAUDE.md b/CLAUDE.md index b2dd1e8..f31cf54 120000 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,181 +1,94 @@ -# 프로젝트 행동지침 및 기술 스택 명세 (CLAUDE.md) +# Aislo 프로젝트 AI 행동 지침서 (CLAUDE.md) + +이 문서는 **Claude Code** 및 관련 클로드 어시스턴트가 프로젝트 수행 시 반드시 준수해야 하는 행동 지침 및 아키텍처 명세입니다. 본 가이드라인은 불필요한 토큰 소모를 방지하고 설계 정합성을 유지하기 위해 강제 적용됩니다. --- -## 🚀 빠른 시작 (Quick Start - 항상 읽기!) +## 1. 3중 역할 분담 협업 체계 (3-Role System) -### 웹앱 실행 (전체 스택) -```bash -# 1. 프로젝트 루트에서만 작업 -cd d:\02_Software_Prog\임도설계\ 및\ 견적자동화\ 프로그램\ 개발 +AI는 작업 단계에 따라 다음 3가지 역할 중 하나로만 명확하게 작동해야 하며, 각 단계의 작업물은 엄격하게 분리됩니다. -# 2. Python 가상환경 활성화 -.\venv\Scripts\activate - -# 3. 웹서버 실행 (백엔드 + 프론트엔드 동시 시작) -python main.py - -# 브라우저: http://localhost:8000 -``` - -### 중요 구조 -- **빌드 설정**: 루트(`package.json`, `tsconfig.json`, `vite.config.ts`) — 유일한 빌드 설정 -- **프론트엔드 소스**: `A00_Common/` (진입점), `A0*/`, `B0*/` (페이지들) -- **프론트엔드 공유 자산**: `ui_template/`, `config/` (TypeScript 설정용) -- **백엔드**: `main.py`, `common_util/`, `config/` (Python 설정) -- **DB**: `db_management/` (마이그레이션 SQL) - -### 주의사항 -- ❌ `config/` 폴더에 빌드 설정 파일 두지 말 것 (루트만 사용) -- ❌ `npm run build`는 프로젝트 루트에서만 실행 -- ✅ `python main.py`로 전체 스택 자동 시작 (프론트엔드 빌드 포함) -- ✅ 코더 AI는 `.agent/CODER_HANDOFF.md` 참고 - ---- - -## 프로젝트 & DB 정보 - -### 📌 프로그램명 -**Aislo (아이슬로)** -- **의미**: AI (인공지능) + Slotti (핀란드어: 임도/산림 도로) -- **콘셉트**: 산림의 미래를 열어가는 인공지능 경로 설계 솔루션 - ---- - -## 1. 기술 환경 및 기본 스택 (Technical Stack Baseline) -프로젝트의 코드를 작성, 테스트 또는 검증할 환경 명확화 및 호환 기준 제시. - -### A. 백엔드 프레임워크 (Python) -* **Runtime:** Python v3.12 or v3.13.7 -* **Framework:** FastAPI / Pydantic -* **Geometry/GIS Engine:** Trimesh, Whitebox, Geopandas, Shapely, Rasterio, Laspy - -### B. 데이터베이스 (MariaDB) -* **DBMS:** MariaDB v10.6+ -* **Character Set:** utf8mb4 (한글 완벽 지원) -* **Collation:** utf8mb4_unicode_ci -* **DB Driver (비동기):** `aiomysql` (순수 Python, Windows 호환. asyncmy는 Cython 빌드 필요로 미채택) -* **쿼리 방식:** Raw SQL (ORM 사용 금지) -* **공간 데이터:** JSON 기반 저장 (MariaDB는 PostGIS 미지원) - -### C. 프론트엔드 & WebCAD (TypeScript & WebGL) -* **Language/Runtime:** TypeScript / Node.js -* **Rendering:** HTML5 Canvas 및 WebGL 기반 WebCAD 시스템 구현 - -### D. 인코딩 및 다국어 표준 -* **인코딩:** 텍스트 파일은 UTF-8 표준으로 통일 - ---- - -## 2. 문맥 라우팅 및 문서 구조 (Context Routing) -코드 작성 및 기술 검증 시 문서 우선순위에 따른 계층적 레퍼런스 필수 읽기. - -* **1단계 (필수):** `.agent/structure.md` 읽기 후 신규 폴더 생성 기준 분석. -* **2단계 (선택 읽기):** 프로젝트 구현에 필요한 세부 기술 명세 읽기. - * **그룹 A (UI, 스타일, 컴포넌트, WebCAD):** `.agent/frontend.md` 필수 추가 읽기. - * **그룹 B (알고리즘, 저장, DB, MariaDB 값 제어):** `.agent/backend.md` 필수 추가 읽기. - * **그룹 C (DB 구조 변경):** DB 구조 변경 시 `.agent/db_schema.md` 선택적 읽기. - ---- - -## 3. 코드 작성 기본 제약 (Constraints) -* **구조 준수:** `.agent/structure.md` 트리 구조 엄격 준수. -* **700줄 제한:** 단일 파일 코드 작성/수정 시 700줄 이상이 될 경우 사전 공지. 기능별 파일 분할 후 `structure.md` 갱신 필수. -* **안전 보관:** 백엔드 작업 시 보안 저장소 경로 명시 및 임의 삭제 방지 필수. -* **경로 활용:** 단계별 페이지 기반 폴더 구조(B03~B09)와 DB 경로 열의 기준은 `.agent/db_schema_simple.md`의 「파일시스템 경로와 DB 링크」를 따른다. -* **일관성 검증:** 설계 단계에서부터 DB 설계, 파일 경로, API 라우팅이 모두 동일한 워크플로우 기준으로 통일되어야 한다. (불일치 발생 시 설계 단계에서 재논의 필수) -* **코드 포맷팅 (자동화 도구):** 프로젝트의 코드 작성이 완료되는 시, 반드시 프로젝트 루트에서 각 언어별 포맷터를 재실행하여 스타일을 통일해야 한다. - * *Python 포맷팅 명령어:* `ruff format [파일명]` 및 `ruff check --fix [파일명]` 실행 - * *TypeScript/CSS 포맷팅 명령어:* `npx prettier --write [파일명]` 실행 -* **외부 라이브러리 활용:** 외부 라이브러리 활용 시 프로젝트에 맞춰 호환 라이브러리 선정하고, 불필요한 함수는 작성하지 않도록 최소화. - ---- - -## 4. 데이터베이스 상세 명세 (Database Specification) - -### 4.1 스키마 기본 정보 -- **DB 명:** `aislo_db` -- **DBMS:** MariaDB v10.6+ -- **인코딩:** utf8mb4_unicode_ci -- **테이블 수:** 18개 -- **드라이버:** aiomysql (비동기) - -### 4.2 파일 경로 추적 (Path Tracking) -**모든 중간 산출물의 파일 경로를 DB에 기록:** -- `input_files.raw_file_path` — 원본 입력 파일 -- `processed_point_cloud.converted_file_path` — 변환된 포인트클라우드 -- `surface_models.model_file_path` — 지표면 모델 -- `routes.route_data_path` — 경로 데이터 -- `longitudinal_sections.longitudinal_file_path` — 종단면 -- `cross_sections.cross_section_file_path` — 횡단면 -- `structures.structure_data_path` — 구조물 배치 -- `quantity_items.quantity_data_path` — 수량 항목 -- `outputs.outputs_directory_path` — 산출물 폴더 -- `output_files.output_file_path` — 개별 산출 파일 - -### 4.3 저장소 구조 (Workflow-based Folder Structure) -``` -storage/{company_slug}/{user_slug}/{project_id}/ -├── B03_FileInput/input/ (WF0: 원본 입력) -├── B04_wf1_Surface/processed/ (WF1: 변환된 포인트클라우드 & 모델) -├── B05_wf2_Route/route/ (WF2: 경로 설계) -├── B06_wf3_ProfileCross/ (WF3: 종단면 & 횡단면) -├── B07_wf4_DesignDetail/structures/ (WF4: 구조물 배치) -├── B08_wf5_Quantity/quantities/ (WF5: 수량 산출) -└── B09_wf6_Estimation/v1,v2,.../ (WF6: 최종 산출물) -``` - -### 4.4 공간 데이터 처리 (MariaDB 특성) -- **지하형 기하 데이터:** GEOMETRY 타입 미지원 → JSON으로 저장 -- **좌표 저장 예:** `{"type": "Point", "coordinates": [127.5, 37.5]}` -- **경로 저장 예:** `{"type": "LineString", "coordinates": [[127.5, 37.5], [127.6, 37.6]]}` -- **애플리케이션 처리:** Python의 Shapely, Geopandas에서 JSON 파싱 후 기하 연산 - ---- - -## 5. 워크플로우 6단계 (6-Stage Workflow) +### 🎭 단계별 역할 정의 ``` -WF0: B03_FileInput (파일 입력) - ↓ (LAS, TIF, TFW, PRJ, DXF 업로드) -WF1: B04_wf1_Surface (지표면 분석) - ↓ (DEM, TIN, 포인트클라우드 변환) -WF2: B05_wf2_Route (경로 설계) - ↓ (최적 경로 계산) -WF3: B06_wf3_ProfileCross (종횡단 생성) - ↓ (종단면, 횡단면 생성) -WF4: B07_wf4_DesignDetail (상세 설계) - ↓ (구조물 배치) -WF5: B08_wf5_Quantity (수량 산출) - ↓ (수량 항목 계산) -WF6: B09_wf6_Estimation (견적·문서) - ↓ (Excel, PDF, DXF 생성) +사용자 요청 ➡️ [1. 기획자] ➡️ 계획 수립 및 PLAN.md 합의 + ⬇️ + [2. 프로그래머] ➡️ 오직 코드 작성 및 수정 (Surgical) + ⬇️ + [3. 코드 검증] ➡️ 검증 및 보고서 작성, 완료 건 아카이빙 ``` ---- +#### 1단계: 기획자 (Planner / Architect) +* **목표**: 최소한의 정보 탐색으로 문제의 핵심을 짚고, 작업 계획을 구체화하여 사용자 합의를 얻는 것. +* **동작**: + 1. 사용자 요구사항을 받으면 전체 코드를 뒤지지 않고, **Skill을 통해 graphify를 능동적으로 사용**하여 `docs/wiki/` 폴더의 설계 지식을 조회합니다. (graphify query/explain으로 작업 대상 파일과 이력 신속 식별) + 2. 영향을 받는 파일 범위와 수정 방향을 분석하여 `docs/raw/PLAN.md`에 계획서와 구체적인 구현 체크리스트를 작성합니다. + 3. `PLAN.md`에 작성된 계획서 내용에 대해 사용자의 Proceed 승인을 받습니다. -## 6. 주요 문서 참고 순서 +#### 2단계: 코딩 프로그래머 (Coder) +* **목표**: 오직 코드 작성 및 수정에만 집중하여 고품질의 구현물을 만드는 것. +* **동작**: + 1. 기획 단계에서 합의된 `docs/raw/PLAN.md`에 명시된 스펙과 대상 파일만 접근하여 수정합니다. (Spec 외의 오버엔지니어링 절대 금지) + 2. PLAN.md의 정보가 충분하지 않으면, 실제 코드를 읽어보고 설계 의도를 파악합니다. + 3. 그래도 모호하면 기획자(사용자)에게 피드백을 요청합니다. + 4. 수정 시 **Surgical Changes(정밀 수정) 원칙**을 지켜 주변 코드나 서식을 손대지 않습니다. + 5. 수정이 끝나면 프로그래머는 계획서의 구현 체크리스트에 스스로 완료 표시를 합니다. + 6. *주의*: graphify는 실행하지 않습니다. (기획자가 `docs/wiki/` 기반 정보를 이미 수집했으므로 PLAN.md로 충분) -1. **구조 설계:** `.agent/structure.md` 읽기 -2. **프론트 구현:** `.agent/frontend.md` 읽기 (대시보드 관리 UI: `.agent/plan_dashboard_management.md` 병행) -3. **백엔드 구현:** `.agent/backend.md` 읽기 (대시보드 관리 API: `.agent/plan_dashboard_management.md` 병행) -4. **마이그레이션:** `.agent/migration_plan.md` 읽기 -5. **DB 스키마:** `.agent/db_schema_simple.md` 읽기 -6. **프로젝트 정보:** `.agent/project_info.md` 읽기 +#### 3단계: 코드 검증 (Verifier / QA) +* **목표**: 구현된 코드가 실무 기준에 맞는지 정밀 검증하고 설계 지식을 현행화하는 것. +* **동작**: + 1. 코드가 작성되면 오직 수정한 코드만을 대조하여 실무 적합성 및 기술 검증을 수행합니다. + 2. 검증 결과를 바탕으로 `docs/raw/verification/{YYYY-MM-DD}_verify_{기능명}.md` 보고서를 작성합니다. + 3. `docs/raw/PLAN.md`에서 완료된 항목을 잘라내어(Cut) `docs/raw/plans/{YYYY-MM-DD}_plan_{기능명}.md` 파일로 이관하고, `PLAN.md`에서는 제거합니다. + 4. 관련 `docs/wiki/` 문서를 현행화(`status: stable` 전환)합니다. + 5. **Lint를 실행**하여 `docs/wiki/` 폴더 전체를 검사합니다. (graphify 호출 없음) + 6. 발견된 모든 문제점을 해결한 후, **Skill을 통해 graphify update를 최종 1회만 실행**합니다. --- -## 7. 요약 +## 2. 작업 관리 표준 (Live-PLAN 및 아카이빙) -| 항목 | 값 | -|------|-----| -| **프로그램명** | Aislo (아이슬로) | -| **DB 명** | aislo_db | -| **DBMS** | MariaDB v10.6+ | -| **인코딩** | utf8mb4_unicode_ci | -| **Backend** | Python 3.12+ / FastAPI | -| **Frontend** | TypeScript / Node.js | -| **드라이버** | aiomysql | -| **워크플로우** | 6단계 (WF0~WF6) | -| **테이블 수** | 18개 | -| **폴더 구조** | 워크플로우 기반 (B03~B09) | +* **현재 작업판 (`docs/raw/PLAN.md`)**: + * 현재 개발해야 할 신규 작업, 활성 작업 체크리스트, 미결 사항(Backlog)만 남겨놓는 살아있는 유일한 계획서입니다. + * 이 파일에 적힌 백로그가 완전히 비워지면 프로젝트가 최종 완료된 것으로 판단합니다. +* **완료 이력 백업 (`docs/raw/plans/`)**: + * 검증이 완료된 작업은 `PLAN.md`에서 즉시 삭제되고, `{YYYY-MM-DD}_plan_{기능명}.md` 문서로 이관 보관됩니다. +* **세션 종료 전 2중 검증**: + * **Ingest**: `docs/raw/guidelines/`, `docs/raw/plans/`, `docs/raw/verification/` 폴더의 신규 파일을 `docs/wiki/`에 반영합니다. + * **Lint**: `docs/wiki/` 폴더를 탐색하여 데이터 모순, 누락, 포맷 오류 등을 점검합니다. + +--- + +## 3. 기술 환경 및 제약 조건 (Baseline Constraints) + +### 📌 기본 기술 스택 +* **Backend**: Python v3.12.7 / FastAPI / Pydantic (aiomysql 비동기 드라이버 사용, ORM 금지, Raw SQL 쿼리) +* **Frontend**: TypeScript / Node.js / HTML5 Canvas 및 WebGL (WebGL WebCAD) +* **Database**: MariaDB v10.6+ (공간 데이터는 GEOMETRY 미지원으로 인해 JSON 포맷 저장) +* **GIS Engine**: Trimesh, Whitebox, Geopandas, Shapely, Rasterio, Laspy + +### 📌 코딩 규칙 +* **700줄 제한**: 단일 소스코드 파일은 700줄을 초과할 수 없습니다. 초과할 경우 기능별로 파일을 분리해야 합니다. +* **Surgical Edit**: 변경해야 할 최소한의 라인만 정확하게 수정합니다. +* **포맷팅 적용**: 작업 완료 시 해당 언어의 포맷터(Python: `ruff format`, TS/CSS: `prettier`)를 반드시 실행합니다. + +### 📌 지식 그래프(graphify) 운영 규칙 + +* **분석 대상 범위**: `docs/wiki/` 폴더만을 대상으로 합니다. + * 검색 범위: `docs/wiki/` 하위 모든 마크다운 파일 + * 업데이트 범위: `docs/wiki/` 폴더만 + * 따라서 프로그래머는 PLAN.md의 정보(wiki 기반)를 신뢰하고 코드 작성에만 집중 가능 + +* **Skill 기반 호출** (외부 cmd 명령 제거): + * 기획자: `Skill` 도구로 graphify를 능동적으로 호출하여 정보 수집 + * 검증자: `Skill` 도구로 graphify update 실행 + * 조회 옵션: + * `graphify query "질문 내용"` - 구조 기반 질문 + * `graphify path "개념A" "개념B"` - 노드 관계 추적 + * `graphify explain "개념명"` - 개별 개념 상세 설명 + +* **실행 권한 및 타이밍**: + * **기획자(1단계)**: graphify query/explain/path 언제든 실행 가능 (계획 수립 시) + * **프로그래머(2단계)**: graphify 실행 금지 (PLAN.md로 충분) + * **검증자(3단계)**: graphify update는 문서 갱신 후 최종 1회만 실행 diff --git a/check_db.py b/check_db.py deleted file mode 100644 index f47725c..0000000 --- a/check_db.py +++ /dev/null @@ -1,82 +0,0 @@ -"""DB 상태 확인 스크립트.""" - -import asyncio -import aiomysql - - -async def check_db(): - """DB 테이블 목록 및 구조 확인.""" - conn = await aiomysql.connect( - host="dsm.chemifactory.com", - port=53306, - user="ctnt_root", - password="Umsang6595!!", - db="aislo_db", - charset="utf8mb4", - ) - - try: - async with conn.cursor() as cur: - # 1. 테이블 목록 - print("=" * 60) - print("【존재하는 테이블】") - print("=" * 60) - await cur.execute("SHOW TABLES") - tables = await cur.fetchall() - for (table_name,) in tables: - print(f" - {table_name}") - - # 2. upload_sessions 테이블 확인 - print("\n" + "=" * 60) - print("【upload_sessions 테이블 구조】") - print("=" * 60) - try: - await cur.execute("DESCRIBE upload_sessions") - columns = await cur.fetchall() - for row in columns: - print(f" {row}") - except Exception as e: - print(f" ❌ 테이블 없음: {e}") - - # 3. upload_chunks 테이블 확인 - print("\n" + "=" * 60) - print("【upload_chunks 테이블 구조】") - print("=" * 60) - try: - await cur.execute("DESCRIBE upload_chunks") - columns = await cur.fetchall() - for row in columns: - print(f" {row}") - except Exception as e: - print(f" ❌ 테이블 없음: {e}") - - # 4. input_files 테이블 확인 - print("\n" + "=" * 60) - print("【input_files 테이블 구조】") - print("=" * 60) - try: - await cur.execute("DESCRIBE input_files") - columns = await cur.fetchall() - for row in columns: - print(f" {row}") - except Exception as e: - print(f" ❌ 테이블 없음: {e}") - - # 5. projects 테이블 확인 - print("\n" + "=" * 60) - print("【projects 테이블 구조】") - print("=" * 60) - try: - await cur.execute("DESCRIBE projects") - columns = await cur.fetchall() - for row in columns: - print(f" {row}") - except Exception as e: - print(f" ❌ 테이블 없음: {e}") - - finally: - conn.close() - - -if __name__ == "__main__": - asyncio.run(check_db()) diff --git a/docs/.agents/rules/graphify.md b/docs/.agents/rules/graphify.md new file mode 100644 index 0000000..0fc7864 --- /dev/null +++ b/docs/.agents/rules/graphify.md @@ -0,0 +1,14 @@ +--- +trigger: always_on +description: Consult the graphify knowledge graph at graphify-out/ for codebase and architecture questions. +--- + +## graphify + +This project has a graphify knowledge graph at graphify-out/. + +Rules: +- For codebase or architecture questions, when `graphify-out/graph.json` exists, first run `graphify query ""` (CLI) or `query_graph` (MCP). Use `graphify path "" ""` / `shortest_path` for relationships and `graphify explain ""` / `get_node` for focused concepts. These return a scoped subgraph, usually much smaller than `GRAPH_REPORT.md` or raw grep output. +- If graphify-out/wiki/index.md exists, navigate it instead of reading raw files +- Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context +- After modifying code files in this session, run `graphify update .` to keep the graph current (AST-only, no API cost) diff --git a/docs/.agents/workflows/graphify.md b/docs/.agents/workflows/graphify.md new file mode 100644 index 0000000..c57bdf1 --- /dev/null +++ b/docs/.agents/workflows/graphify.md @@ -0,0 +1,10 @@ +--- +name: graphify +description: Turn any folder of files into a navigable knowledge graph +--- + +# Workflow: graphify + +Follow the graphify skill installed at ~/.gemini/config/skills/graphify/SKILL.md to run the full pipeline. + +If no path argument is given, use `.` (current directory). diff --git a/docs/.claude/settings.json b/docs/.claude/settings.json new file mode 100644 index 0000000..167d865 --- /dev/null +++ b/docs/.claude/settings.json @@ -0,0 +1,24 @@ +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { + "type": "command", + "command": "C:\\Users\\umsan\\AppData\\Local\\Programs\\Python\\Python312\\Scripts\\graphify.EXE hook-guard search" + } + ] + }, + { + "matcher": "Read|Glob", + "hooks": [ + { + "type": "command", + "command": "C:\\Users\\umsan\\AppData\\Local\\Programs\\Python\\Python312\\Scripts\\graphify.EXE hook-guard read" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/docs/.codex/hooks.json b/docs/.codex/hooks.json new file mode 100644 index 0000000..d87c474 --- /dev/null +++ b/docs/.codex/hooks.json @@ -0,0 +1,15 @@ +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { + "type": "command", + "command": "C:\\Users\\umsan\\AppData\\Local\\Programs\\Python\\Python312\\Scripts\\graphify.EXE hook-check" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/docs/.obsidian/app.json b/docs/.obsidian/app.json new file mode 100644 index 0000000..e609a07 --- /dev/null +++ b/docs/.obsidian/app.json @@ -0,0 +1,3 @@ +{ + "promptDelete": false +} \ No newline at end of file diff --git a/wiki/설계자동화/.obsidian/appearance.json b/docs/.obsidian/appearance.json similarity index 100% rename from wiki/설계자동화/.obsidian/appearance.json rename to docs/.obsidian/appearance.json diff --git a/docs/.obsidian/community-plugins.json b/docs/.obsidian/community-plugins.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/docs/.obsidian/community-plugins.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/wiki/설계자동화/.obsidian/core-plugins.json b/docs/.obsidian/core-plugins.json similarity index 100% rename from wiki/설계자동화/.obsidian/core-plugins.json rename to docs/.obsidian/core-plugins.json diff --git a/wiki/설계자동화/.obsidian/graph.json b/docs/.obsidian/graph.json similarity index 61% rename from wiki/설계자동화/.obsidian/graph.json rename to docs/.obsidian/graph.json index 42a46ec..aee24be 100644 --- a/wiki/설계자동화/.obsidian/graph.json +++ b/docs/.obsidian/graph.json @@ -1,22 +1,22 @@ { - "collapse-filter": true, + "collapse-filter": false, "search": "", "showTags": false, "showAttachments": false, "hideUnresolved": false, "showOrphans": true, - "collapse-color-groups": true, + "collapse-color-groups": false, "colorGroups": [], - "collapse-display": true, + "collapse-display": false, "showArrow": false, "textFadeMultiplier": 0, "nodeSizeMultiplier": 1, "lineSizeMultiplier": 1, - "collapse-forces": true, - "centerStrength": 0.518713248970312, + "collapse-forces": false, + "centerStrength": 0.390625, "repelStrength": 10, "linkStrength": 1, "linkDistance": 250, - "scale": 1, - "close": true + "scale": 0.5359795996225794, + "close": false } \ No newline at end of file diff --git a/wiki/설계자동화/.obsidian/workspace.json b/docs/.obsidian/workspace.json similarity index 59% rename from wiki/설계자동화/.obsidian/workspace.json rename to docs/.obsidian/workspace.json index d81755a..030322c 100644 --- a/wiki/설계자동화/.obsidian/workspace.json +++ b/docs/.obsidian/workspace.json @@ -1,34 +1,14 @@ { "main": { - "id": "5482fab4a11d4532", + "id": "99c9496f9af0d35f", "type": "split", "children": [ { - "id": "01bcd28ddd3397b5", + "id": "030658548bffdd02", "type": "tabs", "children": [ { - "id": "c255da74576ceb2c", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "환영합니다!.md", - "mode": "source", - "source": false - }, - "icon": "lucide-file", - "title": "환영합니다!" - } - } - ] - }, - { - "id": "e295692769be8451", - "type": "tabs", - "children": [ - { - "id": "a238438c95e4e2cb", + "id": "c66e6631a498571e", "type": "leaf", "state": { "type": "graph", @@ -43,15 +23,15 @@ "direction": "vertical" }, "left": { - "id": "d0795a7b37943326", + "id": "1fdf49368d0b8d12", "type": "split", "children": [ { - "id": "bb2e823296bd288b", + "id": "286216e41ef17318", "type": "tabs", "children": [ { - "id": "7c387a260a093866", + "id": "bf4a66eeb6ba12b7", "type": "leaf", "state": { "type": "file-explorer", @@ -64,7 +44,7 @@ } }, { - "id": "787034934986e2ac", + "id": "d69b070685f35c13", "type": "leaf", "state": { "type": "search", @@ -81,7 +61,7 @@ } }, { - "id": "39a684c30291c459", + "id": "f48a2962a3eee224", "type": "leaf", "state": { "type": "bookmarks", @@ -94,23 +74,22 @@ } ], "direction": "horizontal", - "width": 300 + "width": 439.5 }, "right": { - "id": "3876a6eb1b7177fb", + "id": "47e841f62a2c8446", "type": "split", "children": [ { - "id": "26ead9768de2588b", + "id": "ed0c1ac6b73a8ced", "type": "tabs", "children": [ { - "id": "5a31669d02d19deb", + "id": "9eee98dc05d3fde2", "type": "leaf", "state": { "type": "backlink", "state": { - "file": "환영합니다!.md", "collapseAll": false, "extraContext": false, "sortOrder": "alphabetical", @@ -120,25 +99,24 @@ "unlinkedCollapsed": true }, "icon": "links-coming-in", - "title": "환영합니다! 의 백링크" + "title": "백링크" } }, { - "id": "e68e588bf0592627", + "id": "1e0ba87b26453941", "type": "leaf", "state": { "type": "outgoing-link", "state": { - "file": "환영합니다!.md", "linksCollapsed": false, "unlinkedCollapsed": true }, "icon": "links-going-out", - "title": "환영합니다! 의 나가는 링크" + "title": "나가는 링크" } }, { - "id": "a0d807bfcc441861", + "id": "aea498d48aaa60a0", "type": "leaf", "state": { "type": "tag", @@ -153,7 +131,7 @@ } }, { - "id": "8e88569af2439683", + "id": "dde952791b603350", "type": "leaf", "state": { "type": "all-properties", @@ -167,40 +145,78 @@ } }, { - "id": "bae3874c44778d37", + "id": "2daeda4e90730082", "type": "leaf", "state": { "type": "outline", "state": { - "file": "환영합니다!.md", "followCursor": false, "showSearch": false, "searchQuery": "" }, "icon": "lucide-list", - "title": "환영합니다! 의 개요" + "title": "개요" } } ] } ], "direction": "horizontal", - "width": 300, - "collapsed": true + "width": 300 }, "left-ribbon": { "hiddenItems": { - "switcher:빠른 전환기 열기": false, - "graph:그래프 뷰 열기": false, "canvas:새 캔버스 만들기": false, + "graph:그래프 뷰 열기": false, + "switcher:빠른 전환기 열기": false, "daily-notes:오늘의 일일 노트 열기": false, "templates:템플릿 삽입": false, "command-palette:명령어 팔레트 열기": false, - "bases:새 베이스 생성하기": false + "bases:새 베이스 생성하기": false, + "terminal:Open terminal": false } }, - "active": "c255da74576ceb2c", + "active": "c66e6631a498571e", "lastOpenFiles": [ - "환영합니다!.md" + "raw/guidelines/backend.md", + "raw/AGENTS.md", + "wiki/pages/B02_ProjRegister/B02_backend.md", + "무제.canvas", + "raw/plans/plan_workflow_state_management.md", + "raw/PLAN.md.tmp.23164.6d84a6365004", + "wiki/graphify-out/graph.html", + "wiki/graphify-out/manifest.json", + "wiki/graphify-out/GRAPH_REPORT.md", + "wiki/graphify-out/graph.json", + "wiki/graphify-out/cache/stat-index.json", + "wiki/graphify-out/cache/ast/v0.9.12/9691ebb53407e479750a796e82774905fe22139f5b049c3f7dc0ad6534c378cf.json", + "wiki/graphify-out/cache/ast/v0.9.12/2808d040f080236ab87ff5d059ee801796b07a63f6a114bd2a2109e0b5806e12.json", + "wiki/graphify-out/cache/ast/v0.9.12/1b226e5d018fc38a72090165fa26143b93b6e1c0a7e1073d8c15e0cdddbeb171.json", + "wiki/graphify-out/cache/ast/v0.9.12/e5a0d7854dc5f172c997de38f2c4dc21dc761794e098626c17dfffe673b47711.json", + "wiki/graphify-out/cache/ast/v0.9.12/2be5bc2fd35d20f0f1eb7c1c707e58347f2b10bcc8843f04fffa74fbdca4d2a7.json", + "wiki/pages/B08_wf5_Quantity/B08_db.md", + "wiki/concepts/db_schema/unconfirmed/README.md", + "wiki/concepts/ui_templates.md", + "wiki/concepts/workflow_state.md", + "wiki/concepts/storage_paths.md", + "wiki/concepts/common_util.md", + "wiki/concepts/auth_rbac.md", + "wiki/concepts/dependencies.md", + "wiki/concepts/api_common.md", + "raw/PLAN.md", + "raw/plans/2026-07-12_plan_add_phase4_role.md", + "raw/verification/2026-07-12_verify_add_phase4_role.md", + "raw/guidelines/frontend.md", + "wiki/index.md", + "wiki/pages/A02_ProgDetail/A02_components.md", + "wiki/pages/A02_ProgDetail/A02_frontend.md", + "wiki/pages/A03_CompDetail/A03_frontend.md", + "wiki/pages/A01_Home/A01_components.md", + "wiki/pages/A01_Home/A01_frontend.md", + "wiki/concepts/db_schema/route_profile.md", + "무제 3.canvas", + "무제 2.canvas", + "무제 1.canvas", + "graphify-out/2026-07-12/GRAPH_REPORT.md" ] } \ No newline at end of file diff --git a/docs/AGENTS.md b/docs/AGENTS.md new file mode 100644 index 0000000..2d6ea29 --- /dev/null +++ b/docs/AGENTS.md @@ -0,0 +1,111 @@ +## 나는 누구인가 +- 이름: +- 하는 일: 임도설계 실무자. Aislo(라이다 데이터 기반 임도 설계·견적 자동화 웹앱) 프로젝트의 기획·설계자. +- 핵심 가치: 코드를 직접 작성하거나 깊이 이해하지는 못하지만, 도메인 전문성을 바탕으로 결과물(화면, 산출물)을 보고 실무적으로 맞는지 검증할 수 있다. 이 검증력을 근거로 AI에게 방향성과 구체적 지시를 내린다. + +## 나의 역할들 + +### 임도설계 실무자 (도메인 전문가) +- 하는 일: 임도 설계 실무 지식을 바탕으로 요구사항을 정의하고, AI가 만든 결과물이 실무 기준에 맞는지 검증한다. +- 주요 관심사: 결과물의 실무적 타당성, 설계 로직의 정확성. + +### 프로젝트 기획·설계자 +- 하는 일: AI 코드 어시스턴트에게 방향성과 지시를 제공하고, 계획서 작성과 검토를 주도한다. +- 주요 관심사: AI와의 소통 효율, 문서·컨텍스트 구조화, 반복되는 방향성 이탈 방지. + +## 나의 비전과 목표 +- 이루고자 하는 것: 라이다 데이터를 활용해 임도 설계를 자동화하는 웹앱(Aislo)을 완성한다. 동시에, 개발 과정에서 문서(백엔드/프론트엔드/DB/구조/계획서/검증보고서)가 비대해져 컨텍스트·토큰을 낭비하지 않도록, 페이지 단위로 구조화·연결된 위키 체계를 구축한다. +- 타겟 독자/고객: + - 1차: AI 코드 어시스턴트 자신 — 코드 작성 전후로 필요한 부분만 효율적으로 찾아 읽는 용도. + - 2차: 6개월~1년 후의 AI 세션 및 팀원 — 프로젝트 구조, 설계 이유, 사용된 함수·변수, DB 정보를 스스로 파악해 개선하거나 인수인계받는 용도. (본인이 직접 위키를 다시 찾아볼 일은 거의 없음) + +## AI에게 기대하는 것 +- 코드 작성 전후로 관련된 위키·계획서만 효율적으로 찾아 읽고, 문서 전체를 뒤지지 않기. +- 계획서 작성 → 코드 작업 → 계획서 체크리스트 점검 → 코드 검증 → 검증보고서 작성 → 계획서 업데이트의 흐름을 주기적으로 관리하기. +- 같은 실수나 배경 설명을 반복하지 않기 — 이전 결정사항과 컨텍스트를 유지하기. +- 함수·변수 단위, DB 컬럼 단위까지 추적 가능하도록 문서화하기. + +## 작업 규칙 +- 톤: 간결하고 명확하게. 불필요한 수식어 없이 핵심만 +- 언어: 한국어 기본 +- 결과물 형태: 계획서와 검증보고서는 각각 하나의 파일로 구성하여 지속 업데이트한다. 문서는 비대해지지 않도록 페이지 단위로 구조화하고, 하위에 관련 백엔드·프론트엔드·DB·API·의존성 정보를 연결한다. + +--- + +## Wiki Schema (위키 운영 규칙) + +> 이 규칙은 `docs/` 볼트에만 적용된다. 프로젝트 루트의 docs 폴더 상위의 `.agent/` 폴더(실제 코딩 라우팅용)와는 완전히 독립적이며, 서로 건드리지 않는다. 위키가 충분히 성숙하면 그때 `.agent`를 대체할지 판단한다. + +### 레이어 구조 +- **raw/** — 불변 원본. 계획서·검증보고서·행동지침 등을 유형별로 넣는다. AI는 이 폴더를 절대 수정하지 않는다. +- **wiki/** — AI가 raw를 읽고 편집·유지하는 산출물. 페이지(B01~B09) 기준 폴더 + 개념(concepts) 폴더로 구성. +- **output/** — 최종 결과물(보고서, 슬라이드 등). + +### 위키 관리자(Librarian) 역할 +AI는 이 볼트에서 "위키 관리자"로 행동한다. 단순 챗봇이 아니라, raw를 읽고 wiki를 지속적으로 편집·정리·연결하는 책임을 진다. wiki는 사용자가 아니라 AI가 쓰고 관리한다. + +### 운영 방식 +- **Ingest** (원본 반영): raw/에 새 파일이 들어오면 → 내용을 읽고 핵심을 파악 → 관련된 `wiki/pages/B0x_*/`와 `wiki/concepts/*.md`를 갱신 → `wiki/index.md` 갱신 → `wiki/log.md`에 기록. +- **Query** (질의 응답): 코드 작업 전후로 질문을 받으면 → `wiki/index.md`를 먼저 확인 → 관련 페이지만 열어서 답변 → raw/는 위키에 없는 정보가 필요할 때만 최후 수단으로 참조. 답변 중 새로 정리된 내용(비교, 분석 등)은 대화에 흘려보내지 말고 관련 wiki 페이지에 다시 파일링한다. +- **Lint** (건강 점검): 요청 시 위키 전체를 점검 — 페이지 간 모순, 오래된 내용(최근 raw로 갱신되지 않은 부분), 고아 페이지(연결 없음), 빠진 크로스링크를 찾아 보고한다. + +### 위키 규칙 +1. **raw/는 절대 수정 금지** (불변 원본) +2. wiki 페이지 생성·삭제 시 **index.md 필수 업데이트** +3. 모든 오퍼레이션마다 **log.md에 기록** +4. 내부 참조는 **위키링크(`[[페이지명]]`)** 형식 사용 +5. 모든 wiki 페이지에 **YAML frontmatter** 작성. `status`는 반드시 아래 3개 값 중 하나만 사용: + - `draft` — 계획서만 반영됨, 아직 검증 안 됨 + - `stable` — 검증보고서로 확인된 내용까지 반영됨 + - `stale` — raw에 새 자료가 들어왔는데 아직 이 페이지에 반영 못함 (Lint 시 최우선 처리 대상) + 그 외 `related_pages`, `last_updated`도 함께 기록한다. **`wiki/pages/B0x_이름/`, `wiki/pages/A0x_이름/` 하위 파일은 다음 규칙을 따른다:** + - **파일명 형식:** `{page_id}_{기능명}.md` (예: `A01_frontend.md`, `B05_backend.md`, `B03_db.md`) + - **frontmatter에 `page_id` 필드 필수:** `page_id: A01_Home` 또는 `page_id: B05_wf2_Route` — 폴더 밖에서 파일 하나만 봐도 어느 페이지 소속인지 식별 가능해야 한다. + - concepts 페이지에는 이 규칙을 적용하지 않는다(페이지 단위가 아니므로). +6. 모순 발견 시 **양쪽 소스 모두 인용**하고 어느 쪽이 최신인지 명시. **계획서와 검증보고서가 충돌하면 검증보고서를 채택한다** (검증보고서 = 실제 코드가 검증된 상태, 계획서 = 그 시점의 의도). 계획서 쪽 내용은 지우지 말고 "계획 당시 의도"로 표시해 남긴다. +7. 소스 요약은 사실만 기록, 해석·종합은 concepts 페이지에서 +8. 질의 시 **index.md 먼저**, raw/는 마지막 수단 +9. **새 페이지 생성보다 기존 페이지 업데이트를 우선** +10. index 항목은 한 줄, 120자 이내로 요약 +11. **공유 자원은 1차 정의를 concepts에만 둔다.** 공유 자원이란 두 페이지 이상이 함께 쓰는 것 전부를 말한다 — DB 테이블·컬럼, 공통 함수(`common_util_*`), API 엔드포인트, Pydantic 요청/응답 스키마, 외부 라이브러리(의존성), workflow 상태 등. 페이지의 `db.md`/`backend.md`/`api.md`/`dependencies.md`에는 정의를 복사하지 않고, "이 페이지가 무슨 용도로 쓰는지" + `[[concepts/해당개념#항목명]]` 위키링크만 남긴다. +12. **concepts 페이지에는 사용처(역참조) 목록을 직접 적는다.** 예: `db_schema.md`의 "routes 테이블" 항목 아래에 `사용처: [[B05_wf2_Route]], [[B06_wf3_ProfileCross]]`. 새 페이지가 그 자원을 쓰게 되면 concepts 쪽 사용처 목록도 함께 갱신한다 (Obsidian 자동 백링크에만 의존하지 않음). +13. **함수·API·테이블 등 개별 항목은 표 형식으로만 기록한다** (서술문 금지). 최소 컬럼: `항목 | 위치(파일:줄번호) | 역할`. 코드 AI가 grep 없이 바로 해당 위치로 이동할 수 있어야 한다. + + | 항목 | 위치 | 역할 | + |---|---|---| + | `generate_dem()` | `B04_wf1_Surface/B04_wf1_Surface_Engine.py:142` | 포인트클라우드 → DEM 변환 | + +14. **페이지 하나(파일 하나)는 100줄을 넘지 않는다.** 넘으면 즉시 하위 주제별로 분할한다 (예: `concepts/db_schema.md` → `concepts/db_schema/routes.md`, `concepts/db_schema/input_files.md` ...). 분할 시 상위 페이지는 하위 페이지로 가는 링크 목록만 남기고, `index.md`도 함께 갱신한다. + +### 폴더 구조 +``` +docs/ +├── raw/ (불변 원본) +│ ├── plans/ 계획서 +│ ├── verification/ 검증보고서 +│ └── guidelines/ 행동지침 +├── wiki/ +│ ├── index.md 전체 카탈로그 (카테고리별 한 줄 목록) +│ ├── log.md 연대기 로그 (append-only) +│ ├── pages/ 페이지(B01~B09) 기준 — 프로젝트 구조의 B01~B09 폴더와 1:1 대응 +│ │ └── B0x_이름/ +│ │ ├── frontend.md +│ │ ├── backend.md +│ │ ├── db.md +│ │ ├── api.md +│ │ └── dependencies.md +│ └── concepts/ 페이지를 관통하는 공통 개념 (DB 스키마, 인증/RBAC, 저장 경로 규칙, 공통 유틸, API 공통, 의존성, 공통 스키마, workflow 상태 등) +└── output/ 최종 산출물 +``` +- 페이지 하위 파일은 raw 반영 시 **필요한 것만 생성**한다 (5개를 미리 다 만들지 않음). +- `wiki/pages/`의 카테고리는 프로젝트의 실제 B01~B09 폴더명과 항상 일치시킨다. + +## graphify + +This project has a knowledge graph at graphify-out/ with god nodes, community structure, and cross-file relationships. + +Rules: +- For codebase questions, first run `graphify query ""` when graphify-out/graph.json exists. Use `graphify path "" ""` for relationships and `graphify explain ""` for focused concepts. These return a scoped subgraph, usually much smaller than GRAPH_REPORT.md or raw grep output. +- If graphify-out/wiki/index.md exists, use it for broad navigation instead of raw source browsing. +- Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context. +- After modifying code, run `graphify update .` to keep the graph current (AST-only, no API cost). diff --git a/docs/CLAUDE.md b/docs/CLAUDE.md new file mode 100644 index 0000000..2d6ea29 --- /dev/null +++ b/docs/CLAUDE.md @@ -0,0 +1,111 @@ +## 나는 누구인가 +- 이름: +- 하는 일: 임도설계 실무자. Aislo(라이다 데이터 기반 임도 설계·견적 자동화 웹앱) 프로젝트의 기획·설계자. +- 핵심 가치: 코드를 직접 작성하거나 깊이 이해하지는 못하지만, 도메인 전문성을 바탕으로 결과물(화면, 산출물)을 보고 실무적으로 맞는지 검증할 수 있다. 이 검증력을 근거로 AI에게 방향성과 구체적 지시를 내린다. + +## 나의 역할들 + +### 임도설계 실무자 (도메인 전문가) +- 하는 일: 임도 설계 실무 지식을 바탕으로 요구사항을 정의하고, AI가 만든 결과물이 실무 기준에 맞는지 검증한다. +- 주요 관심사: 결과물의 실무적 타당성, 설계 로직의 정확성. + +### 프로젝트 기획·설계자 +- 하는 일: AI 코드 어시스턴트에게 방향성과 지시를 제공하고, 계획서 작성과 검토를 주도한다. +- 주요 관심사: AI와의 소통 효율, 문서·컨텍스트 구조화, 반복되는 방향성 이탈 방지. + +## 나의 비전과 목표 +- 이루고자 하는 것: 라이다 데이터를 활용해 임도 설계를 자동화하는 웹앱(Aislo)을 완성한다. 동시에, 개발 과정에서 문서(백엔드/프론트엔드/DB/구조/계획서/검증보고서)가 비대해져 컨텍스트·토큰을 낭비하지 않도록, 페이지 단위로 구조화·연결된 위키 체계를 구축한다. +- 타겟 독자/고객: + - 1차: AI 코드 어시스턴트 자신 — 코드 작성 전후로 필요한 부분만 효율적으로 찾아 읽는 용도. + - 2차: 6개월~1년 후의 AI 세션 및 팀원 — 프로젝트 구조, 설계 이유, 사용된 함수·변수, DB 정보를 스스로 파악해 개선하거나 인수인계받는 용도. (본인이 직접 위키를 다시 찾아볼 일은 거의 없음) + +## AI에게 기대하는 것 +- 코드 작성 전후로 관련된 위키·계획서만 효율적으로 찾아 읽고, 문서 전체를 뒤지지 않기. +- 계획서 작성 → 코드 작업 → 계획서 체크리스트 점검 → 코드 검증 → 검증보고서 작성 → 계획서 업데이트의 흐름을 주기적으로 관리하기. +- 같은 실수나 배경 설명을 반복하지 않기 — 이전 결정사항과 컨텍스트를 유지하기. +- 함수·변수 단위, DB 컬럼 단위까지 추적 가능하도록 문서화하기. + +## 작업 규칙 +- 톤: 간결하고 명확하게. 불필요한 수식어 없이 핵심만 +- 언어: 한국어 기본 +- 결과물 형태: 계획서와 검증보고서는 각각 하나의 파일로 구성하여 지속 업데이트한다. 문서는 비대해지지 않도록 페이지 단위로 구조화하고, 하위에 관련 백엔드·프론트엔드·DB·API·의존성 정보를 연결한다. + +--- + +## Wiki Schema (위키 운영 규칙) + +> 이 규칙은 `docs/` 볼트에만 적용된다. 프로젝트 루트의 docs 폴더 상위의 `.agent/` 폴더(실제 코딩 라우팅용)와는 완전히 독립적이며, 서로 건드리지 않는다. 위키가 충분히 성숙하면 그때 `.agent`를 대체할지 판단한다. + +### 레이어 구조 +- **raw/** — 불변 원본. 계획서·검증보고서·행동지침 등을 유형별로 넣는다. AI는 이 폴더를 절대 수정하지 않는다. +- **wiki/** — AI가 raw를 읽고 편집·유지하는 산출물. 페이지(B01~B09) 기준 폴더 + 개념(concepts) 폴더로 구성. +- **output/** — 최종 결과물(보고서, 슬라이드 등). + +### 위키 관리자(Librarian) 역할 +AI는 이 볼트에서 "위키 관리자"로 행동한다. 단순 챗봇이 아니라, raw를 읽고 wiki를 지속적으로 편집·정리·연결하는 책임을 진다. wiki는 사용자가 아니라 AI가 쓰고 관리한다. + +### 운영 방식 +- **Ingest** (원본 반영): raw/에 새 파일이 들어오면 → 내용을 읽고 핵심을 파악 → 관련된 `wiki/pages/B0x_*/`와 `wiki/concepts/*.md`를 갱신 → `wiki/index.md` 갱신 → `wiki/log.md`에 기록. +- **Query** (질의 응답): 코드 작업 전후로 질문을 받으면 → `wiki/index.md`를 먼저 확인 → 관련 페이지만 열어서 답변 → raw/는 위키에 없는 정보가 필요할 때만 최후 수단으로 참조. 답변 중 새로 정리된 내용(비교, 분석 등)은 대화에 흘려보내지 말고 관련 wiki 페이지에 다시 파일링한다. +- **Lint** (건강 점검): 요청 시 위키 전체를 점검 — 페이지 간 모순, 오래된 내용(최근 raw로 갱신되지 않은 부분), 고아 페이지(연결 없음), 빠진 크로스링크를 찾아 보고한다. + +### 위키 규칙 +1. **raw/는 절대 수정 금지** (불변 원본) +2. wiki 페이지 생성·삭제 시 **index.md 필수 업데이트** +3. 모든 오퍼레이션마다 **log.md에 기록** +4. 내부 참조는 **위키링크(`[[페이지명]]`)** 형식 사용 +5. 모든 wiki 페이지에 **YAML frontmatter** 작성. `status`는 반드시 아래 3개 값 중 하나만 사용: + - `draft` — 계획서만 반영됨, 아직 검증 안 됨 + - `stable` — 검증보고서로 확인된 내용까지 반영됨 + - `stale` — raw에 새 자료가 들어왔는데 아직 이 페이지에 반영 못함 (Lint 시 최우선 처리 대상) + 그 외 `related_pages`, `last_updated`도 함께 기록한다. **`wiki/pages/B0x_이름/`, `wiki/pages/A0x_이름/` 하위 파일은 다음 규칙을 따른다:** + - **파일명 형식:** `{page_id}_{기능명}.md` (예: `A01_frontend.md`, `B05_backend.md`, `B03_db.md`) + - **frontmatter에 `page_id` 필드 필수:** `page_id: A01_Home` 또는 `page_id: B05_wf2_Route` — 폴더 밖에서 파일 하나만 봐도 어느 페이지 소속인지 식별 가능해야 한다. + - concepts 페이지에는 이 규칙을 적용하지 않는다(페이지 단위가 아니므로). +6. 모순 발견 시 **양쪽 소스 모두 인용**하고 어느 쪽이 최신인지 명시. **계획서와 검증보고서가 충돌하면 검증보고서를 채택한다** (검증보고서 = 실제 코드가 검증된 상태, 계획서 = 그 시점의 의도). 계획서 쪽 내용은 지우지 말고 "계획 당시 의도"로 표시해 남긴다. +7. 소스 요약은 사실만 기록, 해석·종합은 concepts 페이지에서 +8. 질의 시 **index.md 먼저**, raw/는 마지막 수단 +9. **새 페이지 생성보다 기존 페이지 업데이트를 우선** +10. index 항목은 한 줄, 120자 이내로 요약 +11. **공유 자원은 1차 정의를 concepts에만 둔다.** 공유 자원이란 두 페이지 이상이 함께 쓰는 것 전부를 말한다 — DB 테이블·컬럼, 공통 함수(`common_util_*`), API 엔드포인트, Pydantic 요청/응답 스키마, 외부 라이브러리(의존성), workflow 상태 등. 페이지의 `db.md`/`backend.md`/`api.md`/`dependencies.md`에는 정의를 복사하지 않고, "이 페이지가 무슨 용도로 쓰는지" + `[[concepts/해당개념#항목명]]` 위키링크만 남긴다. +12. **concepts 페이지에는 사용처(역참조) 목록을 직접 적는다.** 예: `db_schema.md`의 "routes 테이블" 항목 아래에 `사용처: [[B05_wf2_Route]], [[B06_wf3_ProfileCross]]`. 새 페이지가 그 자원을 쓰게 되면 concepts 쪽 사용처 목록도 함께 갱신한다 (Obsidian 자동 백링크에만 의존하지 않음). +13. **함수·API·테이블 등 개별 항목은 표 형식으로만 기록한다** (서술문 금지). 최소 컬럼: `항목 | 위치(파일:줄번호) | 역할`. 코드 AI가 grep 없이 바로 해당 위치로 이동할 수 있어야 한다. + + | 항목 | 위치 | 역할 | + |---|---|---| + | `generate_dem()` | `B04_wf1_Surface/B04_wf1_Surface_Engine.py:142` | 포인트클라우드 → DEM 변환 | + +14. **페이지 하나(파일 하나)는 100줄을 넘지 않는다.** 넘으면 즉시 하위 주제별로 분할한다 (예: `concepts/db_schema.md` → `concepts/db_schema/routes.md`, `concepts/db_schema/input_files.md` ...). 분할 시 상위 페이지는 하위 페이지로 가는 링크 목록만 남기고, `index.md`도 함께 갱신한다. + +### 폴더 구조 +``` +docs/ +├── raw/ (불변 원본) +│ ├── plans/ 계획서 +│ ├── verification/ 검증보고서 +│ └── guidelines/ 행동지침 +├── wiki/ +│ ├── index.md 전체 카탈로그 (카테고리별 한 줄 목록) +│ ├── log.md 연대기 로그 (append-only) +│ ├── pages/ 페이지(B01~B09) 기준 — 프로젝트 구조의 B01~B09 폴더와 1:1 대응 +│ │ └── B0x_이름/ +│ │ ├── frontend.md +│ │ ├── backend.md +│ │ ├── db.md +│ │ ├── api.md +│ │ └── dependencies.md +│ └── concepts/ 페이지를 관통하는 공통 개념 (DB 스키마, 인증/RBAC, 저장 경로 규칙, 공통 유틸, API 공통, 의존성, 공통 스키마, workflow 상태 등) +└── output/ 최종 산출물 +``` +- 페이지 하위 파일은 raw 반영 시 **필요한 것만 생성**한다 (5개를 미리 다 만들지 않음). +- `wiki/pages/`의 카테고리는 프로젝트의 실제 B01~B09 폴더명과 항상 일치시킨다. + +## graphify + +This project has a knowledge graph at graphify-out/ with god nodes, community structure, and cross-file relationships. + +Rules: +- For codebase questions, first run `graphify query ""` when graphify-out/graph.json exists. Use `graphify path "" ""` for relationships and `graphify explain ""` for focused concepts. These return a scoped subgraph, usually much smaller than GRAPH_REPORT.md or raw grep output. +- If graphify-out/wiki/index.md exists, use it for broad navigation instead of raw source browsing. +- Read graphify-out/GRAPH_REPORT.md only for broad architecture review or when query/path/explain do not surface enough context. +- After modifying code, run `graphify update .` to keep the graph current (AST-only, no API cost). diff --git a/docs/output/AGENTS.md b/docs/output/AGENTS.md new file mode 100644 index 0000000..0f67d15 --- /dev/null +++ b/docs/output/AGENTS.md @@ -0,0 +1,7 @@ +# output/ 폴더 규칙 + +wiki/ 내용을 바탕으로 생성한 최종 산출물(보고서, 슬라이드, 요약 문서 등)을 둔다. + +## 규칙 +- 여기 있는 파일은 wiki/의 특정 시점 스냅샷이다. 원본이 아니므로, 내용 갱신이 필요하면 wiki/를 먼저 갱신한 뒤 다시 생성한다. +- 파일명에 생성 날짜를 포함해 버전을 구분한다. diff --git a/docs/output/CLAUDE.md b/docs/output/CLAUDE.md new file mode 100644 index 0000000..0f67d15 --- /dev/null +++ b/docs/output/CLAUDE.md @@ -0,0 +1,7 @@ +# output/ 폴더 규칙 + +wiki/ 내용을 바탕으로 생성한 최종 산출물(보고서, 슬라이드, 요약 문서 등)을 둔다. + +## 규칙 +- 여기 있는 파일은 wiki/의 특정 시점 스냅샷이다. 원본이 아니므로, 내용 갱신이 필요하면 wiki/를 먼저 갱신한 뒤 다시 생성한다. +- 파일명에 생성 날짜를 포함해 버전을 구분한다. diff --git a/docs/raw/AGENTS.md b/docs/raw/AGENTS.md new file mode 100644 index 0000000..fe25fc8 --- /dev/null +++ b/docs/raw/AGENTS.md @@ -0,0 +1,15 @@ +# raw/ 폴더 규칙 + +이 폴더는 불변 원본 저장소다. 계획서, 검증보고서, 행동지침 등 사용자가 넣거나 세션 중 생성된 원본 자료를 유형별로 보관한다. + +## 제약 +- **절대 수정하지 않는다.** 이 폴더의 파일은 읽기 전용 소스로만 취급한다. 오탈자나 오래된 내용이 있어도 여기서 고치지 않고, wiki/ 쪽에서 반영·정정한다. +- 파일을 삭제하지 않는다. + +## 하위 폴더 +- `plans/` — 계획서 +- `verification/` — 검증보고서. **계획서와 내용이 충돌하면 이쪽을 채택한다** (실제 코드가 검증된 상태이므로). +- `guidelines/` — 행동지침 + +## 이 폴더가 업데이트되면 +`docs/CLAUDE.md`의 Wiki Schema에 따라 Ingest 절차를 수행한다: 새 파일을 읽고 → 관련 `wiki/pages/`, `wiki/concepts/` 갱신 → `wiki/index.md` 갱신 → `wiki/log.md`에 기록. diff --git a/docs/raw/CLAUDE.md b/docs/raw/CLAUDE.md new file mode 100644 index 0000000..fe25fc8 --- /dev/null +++ b/docs/raw/CLAUDE.md @@ -0,0 +1,15 @@ +# raw/ 폴더 규칙 + +이 폴더는 불변 원본 저장소다. 계획서, 검증보고서, 행동지침 등 사용자가 넣거나 세션 중 생성된 원본 자료를 유형별로 보관한다. + +## 제약 +- **절대 수정하지 않는다.** 이 폴더의 파일은 읽기 전용 소스로만 취급한다. 오탈자나 오래된 내용이 있어도 여기서 고치지 않고, wiki/ 쪽에서 반영·정정한다. +- 파일을 삭제하지 않는다. + +## 하위 폴더 +- `plans/` — 계획서 +- `verification/` — 검증보고서. **계획서와 내용이 충돌하면 이쪽을 채택한다** (실제 코드가 검증된 상태이므로). +- `guidelines/` — 행동지침 + +## 이 폴더가 업데이트되면 +`docs/CLAUDE.md`의 Wiki Schema에 따라 Ingest 절차를 수행한다: 새 파일을 읽고 → 관련 `wiki/pages/`, `wiki/concepts/` 갱신 → `wiki/index.md` 갱신 → `wiki/log.md`에 기록. diff --git a/docs/raw/PLAN.md b/docs/raw/PLAN.md new file mode 100644 index 0000000..38ef1aa --- /dev/null +++ b/docs/raw/PLAN.md @@ -0,0 +1,45 @@ +# PLAN: 위키 린트(Lint) 결과 조치 및 건강도 개선 + +본 계획은 위키 린트 결과 발견된 구조적 문제들을 정밀 수정(Surgical Edit)하여 위키 건강도 및 무결성을 회복하는 것을 목표로 합니다. + +## 작업 대상 및 조치 계획 + +### 1. frontmatter status 누락 조치 +* **대상 파일**: `docs/wiki/concepts/db_schema/unconfirmed/README.md` +* **조치 내용**: YAML frontmatter를 추가하고 `status: draft`를 명시하여 상태 관리 정합성을 맞춥니다. + +### 2. 파일 줄 수 제한 초과 조치 (100줄 이내 축소) +* **대상 파일**: `docs/wiki/concepts/db_schema/logs_monitoring.md` +* **조치 내용**: 현재 103줄로 100줄 제한을 약간 초과한 상태입니다. 하단부의 사용처 설명 단락의 개행을 정리하여 파일 크기를 100줄 이하로 최적화합니다. + +### 3. 고아 페이지(Orphaned Pages) 연결 보완 ✅ 완료 +* **대상 파일**: 4개의 의존성(`dependencies.md`) 페이지들 + - `pages/B01_Dashboard/B01_dependencies.md` + - `pages/B03_FileInput/B03_dependencies.md` + - `pages/B05_wf2_Route/B05_dependencies.md` + - `pages/B06_wf3_ProfileCross/B06_dependencies.md` +* **조치 내용**: 각 폴더의 메인 문서(예: `B01_backend.md`, `B03_backend.md` 등) frontmatter의 `related_pages` 리스트에 해당 의존성 문서 링크(예: `"[[B01_Dashboard/B01_dependencies]]"`)를 추가하여, 고아 상태를 해제하고 문서 간 유기적 연결을 형성합니다. + +### 4. 위키 링크 정비 (Broken Links 교정) +* **대상 파일**: `docs/wiki/AGENTS.md` 및 `docs/wiki/CLAUDE.md` +* **조치 내용**: 문서 내 특수문자나 인코딩으로 인해 비정상적으로 생성된 깨진 위키링크(`[[]]` 등)를 확인하여 삭제하거나 정상화합니다. + +### 5. support_requests 컬럼 불일치 확인 및 동기화 +* **대상**: `[[A08_Support/A08_backend]]`, `[[db_schema/logs_monitoring]]`, 실 DB +* **조치 내용**: 계획서 vs 실 코드 vs 실 DB의 컬럼 정의를 맞춘다. + - 계획서: user_id/title/priority/status + - 실 코드: company_id/company_name/user_name/user_email/user_phone/subject/message + +### 6. A07/A09 구버전 코드 정리 +* **대상**: `A07_Register_UI_Page.ts` (구버전 잔재), `A09_Security_Api_Fetch.ts` (미연동) +* **조치 내용**: 불필요한 코드 제거 및 wiki 문서 갱신 + +### 7. B04 레거시 코드 명확화 +* **대상**: `B04_wf1_Surface_Router.py:412-427`, `B04_wf1_Surface_Router.py:76` +* **조치 내용**: `projects.status` 문자열 비교의 의도(폴백 vs 구형) 명확화 및 `update_project_status()` 호출처 추적 + +--- + +## 검증 계획 +1. 수정 완료 후 `wiki_lint.py`를 다시 실행하여 린트 오류가 모두 제거(또는 정상 수준으로 감소)되었는지 확인합니다. +2. 검증이 완료되면 `verify` 보고서를 작성하고 `PLAN.md`를 초기화합니다. diff --git a/docs/raw/guidelines/agent.md b/docs/raw/guidelines/agent.md new file mode 100644 index 0000000..56f275f --- /dev/null +++ b/docs/raw/guidelines/agent.md @@ -0,0 +1,200 @@ +# 프로젝트 행동지침 및 기술 스택 명세 (agent.md) + +## 프로젝트 & DB 정보 + +### 📌 프로그램명 +**Aislo (아이슬로)** +- **의미**: AI (인공지능) + Slotti (핀란드어: 임도/산림 도로) +- **콘셉트**: 산림의 미래를 열어가는 인공지능 경로 설계 솔루션 + +--- + +## 1. 기술 환경 및 기본 스택 (Technical Stack Baseline) +프로젝트의 코드를 작성, 테스트 또는 검증할 환경 명확화 및 호환 기준 제시. + +### A. 백엔드 프레임워크 (Python) +* **Runtime:** Python v3.12.7 +* **Framework:** FastAPI / Pydantic +* **Geometry/GIS Engine:** Trimesh, Whitebox, Geopandas, Shapely, Rasterio, Laspy + +### B. 데이터베이스 (MariaDB) +* **DBMS:** MariaDB v10.6+ +* **Character Set:** utf8mb4 (한글 완벽 지원) +* **Collation:** utf8mb4_unicode_ci +* **DB Driver (비동기):** `aiomysql` (순수 Python, Windows 호환. asyncmy는 Cython 빌드 필요로 미채택) +* **쿼리 방식:** Raw SQL (ORM 사용 금지) +* **공간 데이터:** JSON 기반 저장 (MariaDB는 PostGIS 미지원) + +### C. 프론트엔드 & WebCAD (TypeScript & WebGL) +* **Language/Runtime:** TypeScript / Node.js +* **Rendering:** HTML5 Canvas 및 WebGL 기반 WebCAD 시스템 구현 + +### D. 인코딩 및 다국어 표준 +* **인코딩:** 텍스트 파일은 UTF-8 표준으로 통일 + +--- + +## 2. 문맥 라우팅 및 문서 구조 (Context Routing) +코드 작성 및 기술 검증 시 문서 우선순위에 따른 계층적 레퍼런스 필수 읽기. + +* **1단계 (필수):** `.agent/structure.md` 읽기 후 신규 폴더 생성 기준 분석. +* **2단계 (선택 읽기):** 프로젝트 구현에 필요한 세부 기술 명세 읽기. + * **그룹 A (UI, 스타일, 컴포넌트, WebCAD):** `.agent/frontend.md` 필수 추가 읽기. + * **그룹 B (알고리즘, 저장, DB, MariaDB 값 제어):** `.agent/backend.md` 필수 추가 읽기. + * **그룹 C (DB 구조 변경):** DB 구조 변경 시 `.agent/db_schema.md` 선택적 읽기. + +--- + +## 3. 코드 작성 기본 제약 (Constraints) +* **구조 준수:** `.agent/structure.md` 트리 구조 엄격 준수. +* **700줄 제한:** 단일 파일 코드 작성/수정 시 700줄 이상이 될 경우 사전 공지. 기능별 파일 분할 후 `structure.md` 갱신 필수. +* **안전 보관:** 백엔드 작업 시 보안 저장소 경로 명시 및 임의 삭제 방지 필수. +* **경로 활용:** 단계별 페이지 기반 폴더 구조(B03~B09)와 DB 경로 열의 기준은 `.agent/db_schema_simple.md`의 「파일시스템 경로와 DB 링크」를 따른다. +* **일관성 검증:** 설계 단계에서부터 DB 설계, 파일 경로, API 라우팅이 모두 동일한 워크플로우 기준으로 통일되어야 한다. (불일치 발생 시 설계 단계에서 재논의 필수) +* **코드 포맷팅 (자동화 도구):** 프로젝트의 코드 작성이 완료되는 시, 반드시 프로젝트 루트에서 각 언어별 포맷터를 재실행하여 스타일을 통일해야 한다. + * *Python 포맷팅 명령어:* `ruff format [파일명]` 및 `ruff check --fix [파일명]` 실행 + * *TypeScript/CSS 포맷팅 명령어:* `npx prettier --write [파일명]` 실행 +* **외부 라이브러리 활용:** 외부 라이브러리 활용 시 프로젝트에 맞춰 호환 라이브러리 선정하고, 불필요한 함수는 작성하지 않도록 최소화. +* **서버실행은 사용자가 실행:** 필요한 경우 의존성 설치까지는 OK, 단 서버실행은 사용자가 진행 + +--- + +## 4. 데이터베이스 상세 명세 (Database Specification) + +### 4.1 스키마 기본 정보 +- **DB 명:** `aislo_db` +- **DBMS:** MariaDB v10.6+ +- **인코딩:** utf8mb4_unicode_ci +- **테이블 수:** 18개 +- **드라이버:** aiomysql (비동기) + +### 4.2 파일 경로 추적 (Path Tracking) +**모든 중간 산출물의 파일 경로를 DB에 기록:** +- `input_files.raw_file_path` — 원본 입력 파일 +- `processed_point_cloud.converted_file_path` — 변환된 포인트클라우드 +- `surface_models.model_file_path` — 지표면 모델 +- `routes.route_data_path` — 경로 데이터 +- `longitudinal_sections.longitudinal_file_path` — 종단면 +- `cross_sections.cross_section_file_path` — 횡단면 +- `structures.structure_data_path` — 구조물 배치 +- `quantity_items.quantity_data_path` — 수량 항목 +- `outputs.outputs_directory_path` — 산출물 폴더 +- `output_files.output_file_path` — 개별 산출 파일 + +### 4.3 저장소 구조 (Workflow-based Folder Structure) +``` +storage/{company_slug}/{user_slug}/{project_id}/ +├── B03_FileInput/input/ (WF0: 원본 입력) +├── B04_wf1_Surface/processed/ (WF1: 변환된 포인트클라우드 & 모델) +├── B05_wf2_Route/route/ (WF2: 경로 설계) +├── B06_wf3_ProfileCross/ (WF3: 종단면 & 횡단면) +├── B07_wf4_DesignDetail/structures/ (WF4: 구조물 배치) +├── B08_wf5_Quantity/quantities/ (WF5: 수량 산출) +└── B09_wf6_Estimation/v1,v2,.../ (WF6: 최종 산출물) +``` + +### 4.4 공간 데이터 처리 (MariaDB 특성) +- **지하형 기하 데이터:** GEOMETRY 타입 미지원 → JSON으로 저장 +- **좌표 저장 예:** `{"type": "Point", "coordinates": [127.5, 37.5]}` +- **경로 저장 예:** `{"type": "LineString", "coordinates": [[127.5, 37.5], [127.6, 37.6]]}` +- **애플리케이션 처리:** Python의 Shapely, Geopandas에서 JSON 파싱 후 기하 연산 + +### 4.5 역할 기반 접근 제어 (RBAC - Role-Based Access Control) + +**3가지 사용자 역할:** + +| 역할 | 영문 | 설명 | 접근 권한 | +|------|------|------|---------| +| 시스템 관리자 | SYSTEM_ADMIN | 최고 관리자 | 전체 회사/사용자/프로젝트 조회 및 관리 | +| 회사 관리자 | ADMIN | 회사의 주요 아이디 (초기 로그인) | 회사 내 팀원/프로젝트 관리, 가입 요청 승인 | +| 일반 사용자 | USER | 팀원 | 개인 프로젝트 생성/수정, 워크플로우 진행 | + +**회사 마스터 (is_master) 플래그:** +- TRUE: 회사 생성자 또는 ADMIN 역할 (팀원 승인/거부 권한) +- FALSE: 일반 팀원 + +**사용자 상태 생명주기:** +``` +PENDING_EMAIL (임시) + ↓ (이메일 인증) +NO_COMPANY (로그인 가능, 회사 미연결) + ↓ (회사 생성 또는 참여 신청) +PENDING (승인 대기) 또는 ACTIVE (회사 연결 완료) + ↓ +ACTIVE (모든 기능 접근) + ↓ (퇴사/비활성화) +INACTIVE 또는 REJECTED +``` + +--- + +## 5. 워크플로우 6단계 (6-Stage Workflow) + +``` +WF0: B03_FileInput (파일 입력) + ↓ (LAS, TIF, TFW, PRJ, DXF 업로드) +WF1: B04_wf1_Surface (지표면 분석) + ↓ (DEM, TIN, 포인트클라우드 변환) +WF2: B05_wf2_Route (경로 설계) + ↓ (최적 경로 계산) +WF3: B06_wf3_ProfileCross (종횡단 생성) + ↓ (종단면, 횡단면 생성) +WF4: B07_wf4_DesignDetail (상세 설계) + ↓ (구조물 배치) +WF5: B08_wf5_Quantity (수량 산출) + ↓ (수량 항목 계산) +WF6: B09_wf6_Estimation (견적·문서) + ↓ (Excel, PDF, DXF 생성) +``` + +--- + +## 6. 주요 문서 참고 순서 + +1. **계획서 읽기:** 구현 전 반드시 읽을 문서 + - `.agent/plan_register_split.md` — B01_Dashboard 설계 및 역할별 기능 + - `.agent/plan_register_split_validation.md` — 검증 항목 및 테스트 체크리스트 + +2. **구조 설계:** `.agent/structure.md` 읽기 + - 폴더/파일 명명 규칙 + - 전체 디렉토리 트리 구조 + +3. **DB 스키마:** `.agent/db_schema.md` 읽기 + - 사용자/회사/조직 테이블 (5개) + - 프로젝트 및 워크플로우 테이블 + - 테이블 관계도 + +4. **백엔드 구현:** `.agent/backend.md` 읽기 + - 아키텍처 및 라우팅 + - DB 및 MariaDB 설정 + - 인증 시스템 (로그인/역할/인가) + - 역할 기반 접근 제어 (RBAC) + +5. **프론트 구현:** `.agent/frontend.md` 읽기 + - UI 요소 및 레이아웃 제약 + - 인증 및 라우팅 가드 + - 역할 기반 대시보드 렌더링 + +6. **마이그레이션:** `.agent/migration_plan.md` 읽기 (필요 시) + +7. **프로젝트 정보:** `.agent/project_info.md` 읽기 (필요 시) + +--- + +## 7. 요약 + +| 항목 | 값 | +|------|-----| +| **프로그램명** | Aislo (아이슬로) | +| **DB 명** | aislo_db | +| **DBMS** | MariaDB v10.6+ | +| **인코딩** | utf8mb4_unicode_ci | +| **Backend** | Python 3.12+ / FastAPI | +| **Frontend** | TypeScript / Node.js | +| **드라이버** | aiomysql | +| **워크플로우** | 6단계 (WF0~WF6) | +| **테이블 수** | 23개 (조직/인증 5개 포함) | +| **폴더 구조** | 워크플로우 기반 (B03~B09) | +| **인증 방식** | HttpOnly Secure 세션 쿠키 | +| **사용자 역할** | SYSTEM_ADMIN, ADMIN, USER (3가지) | +| **대시보드** | B01_Dashboard (역할별 동적 렌더링) | diff --git a/docs/raw/guidelines/backend.md b/docs/raw/guidelines/backend.md new file mode 100644 index 0000000..1598afc --- /dev/null +++ b/docs/raw/guidelines/backend.md @@ -0,0 +1,300 @@ +# 백엔드 제어 명세서 (backend.md) + +## 1. 아키텍처 및 라우팅 (Architecture) +* **수직 통합:** 백엔드 로직은 페이지 폴더(`A01_`, `B01_` 등)별로 격리. 거대 단일 모듈 금지. +* **파일 분할:** 파일 수 제한 없음. 코드 집중 방지를 위해 기능별 분할 자율화. +* **파일명 규칙:** `[폴더명]_Router.py`, `[폴더명]_Engine.py`, `[폴더명]_Schema.py` 형태 준수. +* **루트 main.py:** 라우터 등록(`include_router`)만 수행. 비즈니스 로직 작성 금지. + +--- + +## 2. DB 및 MariaDB (Database) +* **비동기 통신:** `async/await` 및 `aiomysql` 드라이버 사용 강제. (asyncmy는 Cython 빌드 필요로 Windows 환경 미채택) +* **쿼리 방식:** ORM 사용 금지. **Raw SQL** 작성 원칙. 파라미터 바인딩은 `%s` 플레이스홀더 사용. +* **커넥션/트랜잭션:** 풀에서 `pool.acquire()`로 커넥션 확보 후 `connection.cursor()`로 커서 생성. 다건 쓰기는 `connection.begin()` → `commit()` / 예외 시 `rollback()`. +* **자동 증가 ID:** `INSERT` 후 `cursor.lastrowid`로 조회 (PostgreSQL의 `RETURNING id` 미지원). +* **공간 데이터:** GEOMETRY 타입 미지원. 좌표, 다각형, 경로 등은 JSON 형식으로 저장 후 애플리케이션에서 처리. + +--- + +## 3. 설정 및 저장소 (Config & Storage) +* **하드코딩 금지:** 제어 변수/파라미터 하드코딩 금지. `config/config_system.py`에서 `import` 필수. +* **물리 파일 격리:** 포인트 클라우드, 분석 중간 파일, 메쉬, 임시 커서는 DB 저장 금지. +* **저장 경로:** `storage/[고객사명]/[사용자명]/[프로젝트ID]/`에 물리 파일 저장 후 DB에는 경로만 기록. +* **단계별 루트 강제:** 프로젝트 저장소 내부는 실제 워크플로우 페이지명과 동일한 `B03_FileInput/` ~ `B09_wf6_Estimation/` 폴더로 분리한다. `raw/`, `processed/`, `computed/`를 프로젝트 루트의 공용 폴더로 만들지 않는다. +* **경로 정의 우선순위:** 단계별 세부 폴더와 DB 경로 열의 기준은 `.agent/db_schema_simple.md`의 「파일시스템 경로와 DB 링크」를 따른다. +* **경로 생성 책임:** 페이지별 백엔드는 자기 단계 폴더만 생성·수정한다. 다른 단계의 산출물을 직접 삭제하거나 덮어쓰지 않고 stale 상태를 통해 재계산 필요성을 전파한다. +* **DB 저장 형식:** DB에는 프로젝트 루트 기준 상대 경로를 기록하고, 실제 파일 접근 시 설정의 저장소 루트와 안전하게 결합한다. 사용자 입력 경로를 직접 결합하거나 절대 경로를 DB에 저장하지 않는다. +* **MariaDB 특성:** + - 공간 기하 데이터(좌표, 폴리곤, 경로 등)는 GEOMETRY 타입 미지원 → JSON 또는 TEXT로 저장 + - 예: `{"type": "Point", "coordinates": [127.5, 37.5]}` (GeoJSON 형식) + - 애플리케이션(Python)에서 JSON 파싱 후 기하 연산 처리 + +--- + +## 4. 검증 및 예외 처리 (Error Handling) +* **데이터 검증:** 모든 JSON 요청은 라우터 진입 전 Pydantic 모델로 타입/범위 필수 검증. +* **예외 포획:** 모든 지형/메쉬 연산은 `try-except` 필수 처리. +* **반환 포맷:** 에러 발생 시 `{"status": "error", "message": "원인"}` 표준 포맷 반환. + +--- + +## 5. 워크플로우 상태 동기화 (Workflow State Sync) + +### 5.1 다중 브라우저 동시 작업 원칙 +* **브라우저 독립성:** 같은 계정/프로젝트를 여러 브라우저에서 동시 접근 가능. 각 브라우저는 서버 데이터 기반 독립 작동. +* **클라이언트 상태 격리:** `localStorage`는 브라우저별 격리(도메인 단위 공유). 공유 데이터는 항상 서버 영구저장소 우선. +* **영구저장소 설계:** 계산 결과는 `.agent/db_schema_simple.md`에 정의된 페이지별 단계 폴더에 저장한다. + * `B03_FileInput/` — 원본 입력 및 파일 메타데이터 + * `B04_wf1_Surface/` — 변환 포인트클라우드, 지표면 모델 및 분석 결과 + * `B05_wf2_Route/` — 경로, 경로점 및 설계 파라미터 + * `B06_wf3_ProfileCross/` — 종단·횡단 결과 및 인덱스 +* **워크플로우 상태:** 여러 단계가 공유하는 `workflow.json`의 실제 위치는 저장소 경로 유틸에서 단일하게 정의하며, 원자적 쓰기를 적용한다. 단계별 결과 파일의 위치를 프로젝트 루트의 `result_*.json` 이름으로 추정하지 않는다. + +### 5.2 Stale 상태 감지 및 전파 +* **workflow.json 구조:** + ```json + { + "current_stage": "route", + "completed": ["scan", "surface"], + "stale_from": "route", + "stage1_confirmed": {...} + } + ``` +* **Stale 발생 조건:** + * 상위 단계(예: surface) 재계산 → 하위 단계(route, section) 자동으로 `stale_from` 설정 + * 다른 브라우저에서 변경 감지 → 기존 결과 무효화 +* **상태 업데이트 함수:** + ```python + def _patch_workflow_stale(project_id: str, stale_from: str | None) -> None: + """workflow.json의 stale_from 필드만 원자적 업데이트""" + wf_path = get_project_workflow_path(project_id) + # 기존 상태 유지하며 stale_from만 변경 + ``` + +### 5.3 클라이언트 폴링 패턴 (Polling) +* **주기:** GET `/api/projects/{project_id}/workflow` — 3초마다 호출 +* **응답:** workflow.json 전체 반환 (현재 단계, 완료 이력, stale 상태 포함) +* **클라이언트 동작:** + 1. stale 감지 → 사용자에게 선택지 제시 + 2. "계속하기" → 기존 결과 유지 (위험 경고) + 3. "재계산하기" → 상위 단계 재실행 (모든 하위 결과 초기화) +* **구현 예시:** + ```typescript + setInterval(async () => { + const workflow = await fetch(`/api/projects/${projectId}/workflow`); + if (workflow.stale_from && workflow.stale_from !== currentStage) { + handleStaleness(workflow.stale_from); // 사용자에게 알림 + } + }, 3000); + ``` + +### 5.4 WebSocket 확장 (미래 선택사항) +* **실시간 알림:** 폴링 대신 WebSocket으로 업그레이드 가능 (응답성 향상) +* **전송 메시지:** + ```json + { + "type": "workflow_changed", + "project_id": "...", + "stale_from": "route", + "changed_by": "other_browser" + } + ``` +* **마이그레이션 시기:** 사용자 수 증가 또는 실시간성 요구 시 적용 + +--- + +## 6. 로그인 및 인증 시스템 (Authentication & Authorization) + +### 6.1 이메일 기반 OTP 인증 (Email OTP) +* **OTP 생성:** 6자리 난수 (000000~999999) +* **저장 방식:** DB에 bcrypt/PBKDF2 해시값 저장 (평문 절대 금지) +* **유효 시간:** 5분 (config에서 설정 가능) +* **발송:** Google SMTP (개발) → AWS SES (상용화) 전환 예정 +* **재시도 로직:** 최대 3회 (지수 백오프: 2초, 4초, 8초) + +### 6.2 비밀번호 정책 (Password Policy) +* **최소 길이:** 8자 이상 +* **권장 구성:** 대문자/소문자/숫자/특수문자 (강제 아님, Google 기준) +* **해시 알고리즘:** bcrypt (라운드 12 이상) 또는 PBKDF2 +* **저장 방식:** 해시값만 DB에 저장 (평문 절대 금지) + +### 6.3 세션 관리 (Session Management) - 확정: Secure HttpOnly 세션 쿠키 + +* **방식:** Secure HttpOnly 세션 쿠키 (JWT 아님) +* **쿠키 이름:** `session_id` +* **유효 시간:** 12시간 +* **Secure 플래그:** true (HTTPS만 전송, 개발 환경 localhost에서는 false) +* **HttpOnly 플래그:** true (JavaScript 접근 불가) +* **SameSite:** Lax (CSRF 방지) +* **저장소:** MariaDB `sessions` 테이블 +* **활동 감지:** 마지막 요청으로부터 4시간 (파일 업로드 등 장시간 작업 고려) +* **세션 만료 판정:** + ```python + if (current_time - last_activity_at > 4시간) or (current_time - created_at > 12시간): + → 세션 자동 만료 + ``` +* **만료 처리:** 프론트엔드는 만료 5분 전 알림, 만료 후 모든 요청 거부 (401 Unauthorized) +* **DB 풀 설정:** `autocommit=True` (pooled 커넥션의 트랜잭션 스냅샷 문제 방지 — 새 세션 INSERT 후 다른 커넥션에서 즉시 조회 가능) + +### 6.4 로그인 이력 기록 (Audit Log) +* **기록 항목:** + - `user_id`, `email`, `login_timestamp`, `user_agent` (브라우저/OS), `status` (SUCCESS/FAILURE) +* **보관 기간:** 1년 (자동 삭제) +* **무차별 대입 방지:** 5회 이상 실패 시 계정 15분 잠금 +* **IP 주소:** 법적 이슈로 수집하지 않음 (권장) + +### 6.4.1 사용자 상태 생명주기 (User Status Lifecycle) +* **PENDING_EMAIL:** 회원가입 후 이메일 인증 전 (임시) +* **NO_COMPANY:** 이메일 인증 완료, 회사 미연결 (로그인 가능, B01_Dashboard 접근 가능, B02~B11 워크플로우 차단) +* **PENDING:** 회사 참여 신청 후 ADMIN 승인 대기 (로그인 가능, B01_Dashboard 접근 가능, B02~B11 워크플로우 차단) +* **ACTIVE:** 회사 연결 완료, 모든 기능 접근 가능 (B01_Dashboard + B02~B11) +* **INACTIVE:** 퇴사/계정 휴활성화 +* **REJECTED:** 회사 참여 신청 거부 + +### 6.5 회사 연결 필수화 (Mandatory Company Linking) +* **접근 제어:** + - B02~B11 워크플로우 라우터에 `Depends(require_company)` 의존성 추가 + - `session["company_id"] is None` 이면 403 Forbidden 반환 (`"회사 연결이 필요합니다."`) +* **라우팅 가드 (프론트):** + - B02~B11 진입 시 `fetchSessionUser()` → `company_id` 확인 + - 없으면 B01_ACCOUNT로 리다이렉트 +* **회사 생성/연결:** + - `POST /api/account/company/create`: 신규 회사 생성 후 사용자를 MASTER로 자동 연결 (status='ACTIVE') + - `POST /api/account/company/join`: 기존 회사 참여 신청 (status='PENDING', 마스터 승인 필요) + +### 6.6 권한 체크 (Authorization) +* **마스터 권한:** + - 팀원 목록 조회, 승인/거부, 내보내기 + - 회사 정보 수정, 구독 관리 + - 마스터 대시보드 접근 +* **팀원 권한:** + - 프로젝트 생성/수정/조회 + - 워크플로우 실행 (B03~B09) + - 개인 프로필 수정 +* **시스템관리자 권한:** + - 모든 회사/사용자 데이터 접근 (슈퍼유저) + - 회사/사용자 생성/수정/삭제 + - 관리자 대시보드 (모니터링, Q&A 관리) +* **검증 방식:** 라우터 진입 전 JWT/토큰 검증, 필요시 데이터베이스에서 권한 확인 + +### 6.7 로그인 기반 인증 갱신 (Login-based Auth Renewal) +* **목적:** 활성 사용자의 인증 유지, 비활성 사용자 자동 차단 +* **방식:** 로그인 시 인증 유효 기간 자동 연장 (3개월) +* **구현:** + - `users.last_login` → 마지막 로그인 시간 업데이트 + - `users.auth_expires_at` → 매 로그인 시 NOW() + 3개월로 설정 +* **인증 확인:** + - auth_expires_at > NOW() → 인증 유효 (바로 대시보드 이동) + - auth_expires_at <= NOW() → 재인증 모달 표시 +* **장점:** + - 활동적인 사용자: 지속적으로 인증 유지 + - 휴면 사용자: 자동으로 재인증 요구 + - 일관된 정책: 고정 3개월이 아닌 활동 기반 연장 + +### 6.8 역할 기반 접근 제어 (Role-Based Access Control) + +**사용자 역할 (users.role)** +- `SYSTEM_ADMIN`: 시스템 관리자 (최고 권한) +- `ADMIN`: 회사 관리자 (회사 내 관리권 한정) +- `USER`: 일반 사용자 + +### 6.9 대시보드 권한 검증 및 감시 로깅 (B01_Dashboard Authorization & Audit) +* **권한 검증 헬퍼 필수:** `.agent/plan_dashboard_management.md` 섹션 9의 Python 헬퍼 함수 구현 + - `can_edit_project(user, project)` - 프로젝트 수정 권한 + - `can_delete_project(user)` - 프로젝트 삭제 권한 (SYSTEM_ADMIN만) + - `can_change_role(user, target_user, new_role)` - 역할 변경 권한 + - ADMIN이 SYSTEM_ADMIN으로 변경 시도 시 즉시 False 반환 + - ADMIN은 USER ↔ ADMIN만 변경 가능 (같은 회사만) + - `can_manage_automation(user, automation)` - 자동화 로직 관리 권한 (USER 차단) + - `is_last_admin(company_id, exclude_user_id)` - 회사의 마지막 ADMIN 확인 + +* **백엔드 권한 재검증 필수:** 모든 수정/삭제/역할변경 API에서 권한 재검증 + - 클라이언트 UI 신뢰 금지 (프론트엔드는 UI만 제어) + - 권한 없는 사용자가 API 직접 호출 시도 → 403 Forbidden + - 권한 오류 메시지: `{"status": "error", "message": "Access denied"}` + +* **감시 로깅 (audit_logs):** 다음 행동들을 기록 + - 프로젝트 삭제: `action="DELETE_PROJECT"`, `resource_type="project"` + - 사용자 역할 변경: `action="CHANGE_ROLE_TO_{NEW_ROLE}"`, `resource_type="user"` + - 사용자 삭제: `action="DELETE_USER"`, `resource_type="user"` + - 자동화 로직 삭제: `action="DELETE_AUTOMATION"`, `resource_type="automation"` + +* **USER 자동화 조회 권한 차단:** `/api/projects/{pid}/automations` GET + - 요청 사용자의 role이 USER인 경우 403 Forbidden 반환 + - 메시지: `"Automation logic viewing is not allowed for users"` + +* **마지막 ADMIN 보호:** 사용자 삭제 API에서 체크 + - `is_last_admin(company_id, exclude_user_id=user_id)` 호출 + - True 반환 시 400 Bad Request: `"Cannot delete the last admin of the company"` + - 역할 변경 API에서도 동일 로직 적용 + +**마스터 플래그 (users.is_master)** +- `TRUE`: 회사 생성자 또는 ADMIN 역할 (팀원 승인/거부 권한) +- `FALSE`: 일반 팀원 + +**접근 제어 규칙:** + +| 기능 | SYSTEM_ADMIN | ADMIN | USER | +|------|-------------|-------|------| +| 전체 회사 조회 | ✅ | ✗ | ✗ | +| 전체 사용자 조회 | ✅ | ✗ | ✗ | +| 사용자 역할 변경 | ✅ | ✗ | ✗ | +| 회사 생성 | ✅ | ✅ | ✅ | +| 회사 팀원 관리 | ✅ | ✅ (자신 회사만) | ✗ | +| 가입 요청 승인 | ✅ | ✅ (자신 회사만) | ✗ | +| 시스템 로그 조회 | ✅ | ✗ | ✗ | +| 프로젝트 생성 | ✅ | ✅ | ✅ | +| 프로젝트 조회 | ✅ (전체) | ✅ (회사별) | ✅ (개인) | + +### 6.9 이메일 발송 (Email Infrastructure) +* **SMTP 설정:** + - **개발:** Google Gmail SMTP (umsangdon@gmail.com) + - **상용화:** Google Workspace 또는 AWS SES로 전환 +* **발송 유형:** + - OTP 인증 코드 + - 가입 확인 메일 + - 팀원 가입 승인 요청 (ADMIN 수신) + - 팀원 승인/거부 결과 (사용자에게) + - 회사 참여 신청 알림 (SYSTEM_ADMIN 수신) + - 로그인 기반 인증 갱신 알림 +* **구현:** `common_util/common_util_email.py` 모듈 + - 비동기 발송 (asyncio.create_task) + - 재시도 로직 (최대 3회) + - 템플릿 렌더링 (common_util_email_templates.py) +* **자세한 내용:** `.agent/email_infrastructure_plan.md` 참고 + +--- + +## 7. 시스템 리소스 모니터링 (System Resource Monitoring) + +### 7.1 계측 백그라운드 태스크 +* **구현:** `common_util/common_util_resource_monitor.py`의 `sample_resources_loop()` +* **등록:** `main.py` lifespan에서 `asyncio.create_task`로 시작, 종료 시 cancel (기존 `cleanup_expired_sessions` 패턴과 동일) +* **계측 주기:** 2분 (`config_system.RESOURCE_SAMPLE_INTERVAL_SEC = 120`) +* **계측 항목:** CPU(`psutil.cpu_percent`), 메모리(`psutil.virtual_memory().percent`), 디스크(`shutil.disk_usage`) +* **방어:** 계측 예외는 로깅 후 무시하여 앱 안정성 유지 + +### 7.2 이중 기록 (DB + 로그 파일) +* **DB 기록:** `system_resources` 테이블에 INSERT (활성 세션/프로젝트 수 포함) — 대시보드 그래프 조회 소스 +* **로그 파일:** 루트 `log/system_resources.log` 단일 파일에 탭 구분 1줄 append + - 형식: `\tcpu=\tmem=\tdisk=\tstorage_mb=` + - `log/`는 `.gitignore` 처리 (런타임 생성물) + +### 7.3 1개월 롤링 보관 (Retention) +* **보관 기간:** 30일 (`config_system.RESOURCE_LOG_RETENTION_DAYS = 30`) +* **DB:** 매 계측 시 `timestamp < NOW() - 30일` 행 DELETE +* **로그 파일:** 매 계측 시 30일 경과 줄 제거 후 새 줄 추가(오래된 줄 삭제 + 신규 줄 추가 방식) → 파일 크기 무한 증가 방지 + +### 7.4 리소스 API +* **엔드포인트:** `GET /api/dashboard/admin/resources?days=30` (SYSTEM_ADMIN 전용, 범위 1~90일) +* **응답:** + - `current`: 요청 시점 실시간 계측값 (그래프 미저장) + - `history`: `system_resources` 테이블의 최근 N일 시계열 (그래프 렌더링용, **다운샘플링 적용**) + - `stats`: 활성 사용자/프로젝트/저장소 지표 +* **다운샘플링 (조회 시):** + - 30일 원본은 약 21,600점(2분 간격) → 그대로 전송 시 페이로드 과다(~4MB) + - SQL에서 시간버킷 평균으로 축소: `bucket = max(120초, days*86400 / 300)` → 최대 약 300점 + - `GROUP BY FLOOR(UNIX_TIMESTAMP(timestamp) / bucket)` + `AVG(...)`로 집계 + - 계측 간격(2분)보다 버킷이 작으면 원본 해상도 유지 (하루 이하 조회 시) + - 효과: 30일 조회 페이로드 ~4MB → ~55KB 수준 diff --git a/docs/raw/guidelines/db_schema.md b/docs/raw/guidelines/db_schema.md new file mode 100644 index 0000000..5c6cace --- /dev/null +++ b/docs/raw/guidelines/db_schema.md @@ -0,0 +1,851 @@ +# DB 스키마 (테이블 및 열 목록) + +**최종 업데이트:** 2026-07-10 +**DB 명:** `aislo_db` (MariaDB v10.6+, utf8mb4_unicode_ci) +**총 테이블 수:** 34개 (33개 현재 운영 + 1개 향후 사용) + +--- + +## 1. 사용자 & 인증 & 조직 그룹 + +### 1-1. users 테이블 +``` +users +├── id (INT, PK) — 사용자 고유 번호 +├── email (VARCHAR(255), UNIQUE) — 로그인 이메일 +├── password_hash (VARCHAR(255)) — 비밀번호 암호화 저장 +├── name (VARCHAR(255)) — 사용자 이름 +├── position (VARCHAR(100), NULL) — 직급 (예: 과장, 대리, 사원) +├── department (VARCHAR(100), NULL) — 부서명 (예: 설계팀, 영업팀) +├── phone (VARCHAR(20), NULL) — 연락처 (예: 010-1234-5678) +├── company_id (INT, FK → companies.id, NULL) — 소속 회사 +├── role (ENUM) — 역할: SYSTEM_ADMIN, ADMIN, USER (기본값: USER) +├── is_master (TINYINT(1)) — 회사 마스터 여부 (기본값: 0) +├── status (ENUM) — 상태: PENDING_EMAIL, NO_COMPANY, PENDING, ACTIVE, INACTIVE, REJECTED (기본값: PENDING_EMAIL) +├── last_login (DATETIME, NULL) — 마지막 로그인 시간 +├── auth_expires_at (DATETIME, NULL) — 인증 유효 만료 시간 (3개월 주기) +├── last_email_verified_at (TIMESTAMP, NULL) — 마지막 이메일 인증 시간 +├── login_failures (INT) — 연속 로그인 실패 횟수 (기본값: 0, 보안) +├── last_failed_at (TIMESTAMP, NULL) — 마지막 로그인 실패 시간 +├── account_locked_until (TIMESTAMP, NULL) — 계정 잠금 해제 시간 +├── created_at (TIMESTAMP) — 가입일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +**상태 생명주기:** +- PENDING_EMAIL: 회원가입 후 이메일 인증 전 +- NO_COMPANY: 이메일 인증 완료, 회사 미연결 (로그인 가능, B02~B11 차단) +- PENDING: 회사 참여 신청 후 관리자 승인 대기 +- ACTIVE: 회사 연결 완료, 모든 기능 접근 가능 +- INACTIVE: 퇴사/계정 비활성화 +- REJECTED: 회사 참여 신청 거부 + +### 1-2. companies 테이블 +``` +companies +├── id (INT, PK) — 회사 고유 번호 +├── name (VARCHAR(255), UNIQUE) — 회사명 +├── business_registration_number (VARCHAR(20), UNIQUE, NULL) — 사업자등록번호 +├── business_address (VARCHAR(255), NULL) — 사업장 주소 +├── business_owner (VARCHAR(100), NULL) — 사업주 이름 +├── business_status (VARCHAR(50), NULL) — 기업 상태 +├── company_code (VARCHAR(20), NULL) — 회사 코드 +├── phone_number (VARCHAR(20), NULL) — 회사 연락처 +├── representative_name (VARCHAR(100), NULL) — 대표자명 +├── master_user_id (INT, NULL) — 마스터 사용자 ID +├── status (ENUM) — 상태: ACTIVE, INACTIVE, SUSPENDED (기본값: ACTIVE) +├── subscription_status (ENUM) — 구독 상태: FREE, TRIAL, PAID, EXPIRED (기본값: FREE) +├── created_by (INT, FK → users.id, NULL) — 회사 생성자 +├── created_at (TIMESTAMP) — 생성일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-3. join_requests 테이블 (가입 신청 - 향후 사용) +``` +join_requests +├── id (INT, PK) — 요청 고유 번호 +├── user_id (INT, FK → users.id) — 신청한 사용자 +├── company_id (INT, FK → companies.id) — 신청 대상 회사 +├── requested_at (TIMESTAMP) — 신청 시간 +├── status (ENUM) — 상태: PENDING, APPROVED, REJECTED (기본값: PENDING) +├── reviewed_by (INT, FK → users.id, NULL) — 검토한 관리자 +├── reviewed_at (TIMESTAMP, NULL) — 검토 시간 +├── review_comment (TEXT, NULL) — 검토 의견/거부 사유 +└── UNIQUE KEY (user_id, company_id) — 중복 신청 방지 +``` + +**동작 (향후 구현 예정):** +- 사용자 가입 신청 → status = PENDING 생성 +- 관리자 승인 → status = APPROVED, users.status = ACTIVE, users.company_id 세팅 +- 관리자 거부 → status = REJECTED, review_comment에 거부 사유 기록, 이메일 발송 + +### 1-5. email_otps 테이블 (이메일 인증) +``` +email_otps +├── id (INT, PK) — OTP 고유 번호 +├── email (VARCHAR(255)) — 이메일 주소 +├── otp_code (VARCHAR(10)) — OTP 코드 +├── purpose (VARCHAR(50)) — 목적: REGISTRATION, PASSWORD_RESET, EMAIL_VERIFICATION +├── expires_at (TIMESTAMP) — 만료 시간 +├── verified_at (TIMESTAMP, NULL) — 인증 시간 +├── created_at (TIMESTAMP) — 생성일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-6. sessions 테이블 (세션 관리) +``` +sessions +├── id (INT, PK) — 세션 고유 번호 +├── user_id (INT, FK → users.id) — 사용자 ID +├── session_token (VARCHAR(255), UNIQUE) — 세션 토큰 +├── expires_at (TIMESTAMP) — 세션 만료 시간 +├── created_at (TIMESTAMP) — 생성일 +├── last_accessed_at (TIMESTAMP, NULL) — 마지막 접근 시간 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-7. trusted_devices 테이블 (장치 신뢰 관리) +``` +trusted_devices +├── id (INT, PK) — 장치 고유 번호 +├── user_id (INT, FK → users.id) — 사용자 ID +├── device_fingerprint (VARCHAR(255)) — 장치 지문 +├── device_name (VARCHAR(100), NULL) — 장치명 +├── ip_address (VARCHAR(50)) — IP 주소 +├── user_agent (TEXT) — 브라우저/OS 정보 +├── trusted_until (TIMESTAMP, NULL) — 신뢰 만료 시간 +├── created_at (TIMESTAMP) — 생성일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-8. user_consents 테이블 (사용자 동의 관리) +``` +user_consents +├── id (INT, PK) — 동의 고유 번호 +├── user_id (INT, FK → users.id) — 사용자 ID +├── consent_type (VARCHAR(100)) — 동의 종류: TERMS, PRIVACY, MARKETING, etc +├── consented (TINYINT(1)) — 동의 여부 (1 = 동의, 0 = 미동의) +├── consent_version (VARCHAR(20)) — 약관 버전 +├── created_at (TIMESTAMP) — 생성일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-9. login_logs 테이블 (로그인 로그) +``` +login_logs +├── id (INT, PK) — 로그 고유 번호 +├── user_id (INT, FK → users.id, NULL) — 사용자 ID +├── email (VARCHAR(255), NULL) — 로그인 시도 이메일 +├── status (VARCHAR(50)) — 상태: SUCCESS, FAILURE, LOCKED +├── ip_address (VARCHAR(50), NULL) — IP 주소 +├── user_agent (TEXT, NULL) — 브라우저/OS 정보 +├── reason (TEXT, NULL) — 실패 사유 +├── created_at (TIMESTAMP) — 기록 시간 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-10. activity_logs 테이블 (활동 로그) +``` +activity_logs +├── id (INT, PK) — 로그 고유 번호 +├── user_id (INT, FK → users.id, NULL) — 사용자 ID +├── action (VARCHAR(100)) — 행동: LOGIN, LOGOUT, FILE_UPLOAD, PROJECT_CREATE, etc +├── entity_type (VARCHAR(100), NULL) — 대상 타입: project, file, route, etc +├── entity_id (VARCHAR(50), NULL) — 대상 ID +├── description (TEXT, NULL) — 행동 설명 +├── ip_address (VARCHAR(50), NULL) — IP 주소 +├── created_at (TIMESTAMP) — 기록 시간 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-11. audit_logs 테이블 (감시 로그 - 보안) +``` +audit_logs +├── id (INT, PK) — 로그 고유 번호 +├── user_id (INT, FK → users.id) — 행동 수행자 +├── action (VARCHAR(100)) — 행동: CREATE, READ, UPDATE, DELETE, EXPORT, DOWNLOAD +├── entity_type (VARCHAR(100)) — 대상 타입: projects, routes, structures, outputs +├── entity_id (VARCHAR(50)) — 대상 ID +├── details (LONGTEXT, NULL) — 상세 정보 (JSON 형식) +├── ip_address (VARCHAR(50), NULL) — IP 주소 +├── timestamp (TIMESTAMP) — 기록 시간 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 1-12. system_audit_logs 테이블 (시스템 감시) +``` +system_audit_logs +├── id (INT, PK) — 로그 고유 번호 +├── user_id (INT, FK → users.id) — 행동 수행자 +├── action (VARCHAR(50)) — 행동: LOGIN, LOGOUT, USER_CREATE, COMPANY_CREATE, ROLE_CHANGE +├── resource_type (VARCHAR(50)) — 대상 타입: user, company, project, join_request +├── resource_id (INT, NULL) — 대상 ID +├── ip_address (VARCHAR(50), NULL) — IP 주소 +├── user_agent (TEXT, NULL) — 브라우저/OS 정보 +├── timestamp (TIMESTAMP) — 기록 시간 +└── INDEX (timestamp, user_id) — 성능 최적화 +``` + +### 1-13. system_resources 테이블 (시스템 리소스 모니터링) +``` +system_resources +├── id (INT, PK) — 기록 고유 번호 +├── cpu_usage_percent (FLOAT, NULL) — CPU 사용률 (%) +├── memory_usage_percent (FLOAT, NULL) — 메모리 사용률 (%) +├── disk_usage_percent (FLOAT, NULL) — 디스크 사용률 (%) +├── active_user_count (INT, NULL) — 활성 사용자 수 +├── active_project_count (INT, NULL) — 활성 프로젝트 수 +├── total_storage_mb (FLOAT, NULL) — 전체 저장소 사용량 (MB) +├── timestamp (TIMESTAMP) — 기록 시간 +└── INDEX (timestamp) — 시계열 조회 최적화 +``` + +**리소스 측정 방식:** +- **현재값 실측:** 요청 시점 실시간 측정 (DB 저장 없이 응답에 포함) +- **이력 조회:** `system_resources` 테이블에서 기본 30일치 시계열 조회 +- **활성 지표:** active_user_count는 유효 세션 수, active_project_count는 미삭제 프로젝트 수 실시간 집계 + +### 1-14. support_requests 테이블 (고객 지원) +``` +support_requests +├── id (INT, PK) — 요청 고유 번호 +├── user_id (INT, FK → users.id) — 신청자 +├── title (VARCHAR(255)) — 제목 +├── description (LONGTEXT) — 설명 +├── category (VARCHAR(100), NULL) — 카테고리 +├── priority (VARCHAR(50), NULL) — 우선순위: LOW, MEDIUM, HIGH, URGENT +├── status (VARCHAR(50)) — 상태: OPEN, IN_PROGRESS, RESOLVED, CLOSED +├── assigned_to (INT, FK → users.id, NULL) — 담당자 +├── resolution (LONGTEXT, NULL) — 해결 내용 +├── created_at (TIMESTAMP) — 생성일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 2. 프로젝트 그룹 + +### 2-1. projects 테이블 +``` +projects +├── id (CHAR(36), PK) — 프로젝트 고유 ID (UUID) +├── user_id (INT, FK → users.id) — 프로젝트 소유자 +├── company_id (INT, FK → companies.id) — 소속 회사 +├── name (VARCHAR(255)) — 프로젝트명 (예: "2025년 산불진화임도") +├── region (VARCHAR(100), NULL) — 지역명 (예: "울진군 금강송면") +├── road_type (VARCHAR(100), NULL) — 임도 종류: 간선임도, 지선임도, 산불진화임도, 계류보전 +├── project_year (INT, NULL) — 사업 연도 (예: 2025) +├── estimated_length_m (FLOAT, NULL) — 추정 연장 (미터) +├── memo (TEXT, NULL) — 비고/메모 +├── status (VARCHAR(50), NULL) — 상태: NEW, FILE_UPLOADED, WF1_ANALYZING, WF1_COMPLETE, ... (기본값: NEW) +├── crs_epsg (INT, NULL) — 좌표계 (예: 5178 = 한국 표준, 기본값: 5178) +├── storage_path (VARCHAR(500), NULL) — 파일시스템 경로 (예: "storage/company/user/project_uuid") +├── created_at (TIMESTAMP) — 생성일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 2-2. project_versions 테이블 (프로젝트 버전 관리) +``` +project_versions +├── id (INT, PK) — 버전 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── version_num (INT) — 버전 번호 (1, 2, 3, ...) +├── status (VARCHAR(50), NULL) — 저장된 상태 +├── data (LONGTEXT, NULL) — 설계 데이터 스냅샷 (JSON 형식) +├── snapshot_at (TIMESTAMP) — 스냅샷 시점 +└── created_at (TIMESTAMP) — 생성일 +``` + +### 2-3. project_automations 테이블 (프로젝트 자동화 규칙) +``` +project_automations +├── id (INT, PK) — 자동화 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── name (VARCHAR(100)) — 자동화 규칙명 +├── logic_type (VARCHAR(50)) — 로직 타입: trigger_on_stage_complete, auto_notify, etc +├── config_json (LONGTEXT) — 자동화 설정 (JSON) +├── status (ENUM) — 상태: DRAFT, ACTIVE, INACTIVE (기본값: DRAFT) +├── created_by (INT, FK → users.id) — 생성자 +├── updated_by (INT, FK → users.id, NULL) — 마지막 수정자 +├── last_executed_at (DATETIME, NULL) — 마지막 실행 시간 +├── created_at (TIMESTAMP) — 생성일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 3. 파일 & 업로드 관리 그룹 + +### 3-1. upload_sessions 테이블 (파일 업로드 세션) +``` +upload_sessions +├── id (INT, PK) — 업로드 세션 고유 번호 +├── user_id (INT, FK → users.id) — 업로드자 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── session_id (VARCHAR(255), UNIQUE) — 세션 ID +├── file_name (VARCHAR(255)) — 파일명 +├── file_size_mb (FLOAT) — 파일 크기 +├── chunk_count (INT) — 청크 개수 +├── uploaded_chunks (INT) — 업로드된 청크 수 +├── status (VARCHAR(50)) — 상태: PENDING, IN_PROGRESS, COMPLETED, FAILED (기본값: PENDING) +├── started_at (TIMESTAMP) — 시작 시간 +├── completed_at (TIMESTAMP, NULL) — 완료 시간 +└── expires_at (TIMESTAMP) — 세션 만료 시간 +``` + +### 3-2. upload_chunks 테이블 (파일 청크 관리) +``` +upload_chunks +├── id (INT, PK) — 청크 고유 번호 +├── upload_session_id (INT, FK → upload_sessions.id) — 업로드 세션 ID +├── chunk_index (INT) — 청크 순서 +├── chunk_size_mb (FLOAT) — 청크 크기 +├── checksum (VARCHAR(255), NULL) — 체크섬 (무결성 검사) +├── status (VARCHAR(50)) — 상태: PENDING, UPLOADED, VERIFIED (기본값: PENDING) +├── uploaded_at (TIMESTAMP, NULL) — 업로드 시간 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 3-3. input_files 테이블 (원본 입력 파일) +``` +input_files +├── id (INT, PK) — 파일 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 속한 프로젝트 +├── file_type (VARCHAR(50), NULL) — 파일 종류: las, tif, tfw, prj, dxf, dwg, other +├── original_filename (VARCHAR(255)) — 원래 파일명 (예: "cloud_merged.las") +├── raw_file_path (VARCHAR(500)) — 원본 저장 경로 (예: "storage/.../raw/las/cloud_merged.las") +├── file_size_mb (FLOAT, NULL) — 파일 크기 (MB) +├── upload_by (INT, FK → users.id, NULL) — 업로드한 사용자 +├── upload_at (TIMESTAMP) — 업로드 날짜 +├── crs_epsg (INT, NULL) — 파일 좌표계 (예: 5178) +├── metadata (LONGTEXT, NULL) — 파일 메타데이터 (JSON) +├── status (VARCHAR(50), NULL) — 상태: UPLOADED, PROCESSED, ARCHIVED (기본값: UPLOADED) +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 4. 지표면 분석 & 처리 그룹 + +### 4-1. processed_point_cloud 테이블 (변환된 포인트클라우드) +``` +processed_point_cloud +├── id (INT, PK) — 변환 데이터 고유 번호 +├── input_file_id (INT, FK → input_files.id) — 원본 LAS 파일 참조 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── process_type (VARCHAR(50), NULL) — 변환 방식: filtered, sampled, classified +├── processed_file_path (VARCHAR(500), NULL) — 변환된 파일 경로 +├── converted_format (VARCHAR(50), NULL) — 변환 포맷: las, ply, laz 등 +├── converted_file_path (VARCHAR(500), NULL) — 변환 포맷 저장 경로 +├── point_count (INT, NULL) — 포인트 개수 +├── min_z (FLOAT, NULL) — 최저 높이 +├── max_z (FLOAT, NULL) — 최고 높이 +├── mean_z (FLOAT, NULL) — 평균 높이 +├── x_min (FLOAT, NULL) — 최소 경도 +├── x_max (FLOAT, NULL) — 최대 경도 +├── y_min (FLOAT, NULL) — 최소 위도 +├── y_max (FLOAT, NULL) — 최대 위도 +├── density_per_sqm (FLOAT, NULL) — 단위 면적당 포인트 밀도 +├── classification_summary (LONGTEXT, NULL) — 분류 요약 (JSON) +├── processing_params (LONGTEXT, NULL) — 변환 파라미터 (JSON) +├── processed_at (TIMESTAMP) — 변환 완료 날짜 +├── status (VARCHAR(50), NULL) — 상태: PROCESSING, COMPLETE, FAILED (기본값: PROCESSING) +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 4-2. surface_models 테이블 (지표면 모델) +``` +surface_models +├── id (INT, PK) — 지표면 모델 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── model_type (VARCHAR(50), NULL) — 모델 종류: dem_grid, tin, mesh_triangulated, contour_lines +├── source_file_id (INT, FK → input_files.id, NULL) — 원본 LAS 파일 +├── processed_cloud_id (INT, FK → processed_point_cloud.id, NULL) — 변환된 포인트클라우드 참조 +├── status (VARCHAR(50), NULL) — 상태: PROCESSING, COMPLETE, FAILED (기본값: PROCESSING) +├── crs_epsg (INT, NULL) — 좌표계 +├── resolution_m (FLOAT, NULL) — 해상도 (래스터인 경우) +├── model_file_path (VARCHAR(500), NULL) — 모델 저장 경로 (예: "storage/.../surface/dem.tif") +├── generation_params (LONGTEXT, NULL) — 생성 파라미터 (JSON) +├── created_at (TIMESTAMP) — 생성일 +├── completed_at (TIMESTAMP, NULL) — 완료 시간 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 4-3. terrain_layers 테이블 (지형 레이어) +``` +terrain_layers +├── id (INT, PK) — 레이어 고유 번호 +├── surface_model_id (INT, FK → surface_models.id) — 지표면 모델 참조 +├── layer_name (VARCHAR(100), NULL) — 레이어명 (예: "지표", "제1층", "제2층") +├── geometry_type (VARCHAR(50), NULL) — 기하 종류: POINTCLOUD, GRID, MESH, CONTOUR +├── layer_file_path (VARCHAR(500), NULL) — 레이어 파일 저장 경로 +├── file_format (VARCHAR(50), NULL) — 파일 형식: geojson, geotiff, ply, obj 등 +├── file_size_mb (FLOAT, NULL) — 파일 크기 +├── statistics (LONGTEXT, NULL) — 통계 (JSON) +├── created_at (TIMESTAMP) — 생성일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 5. 경로 & 설계 그룹 + +### 5-1. routes 테이블 (경로 설계) +``` +routes +├── id (INT, PK) — 경로 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── surface_model_id (INT, FK → surface_models.id, NULL) — 기반 지표면 모델 +├── status (VARCHAR(50), NULL) — 상태: DRAFT, CONFIRMED, ARCHIVED (기본값: DRAFT) +├── start_chainage_m (FLOAT, NULL) — 시작점 측점 (m) +├── end_chainage_m (FLOAT, NULL) — 종료점 측점 (m) +├── total_length_m (FLOAT, NULL) — 총 연장 (m) +├── grade_percent (LONGTEXT, NULL) — 각 구간 종단 경사도 (JSON array) +├── constraints (LONGTEXT, NULL) — 설계 제약조건 (JSON) +├── algorithm_params (LONGTEXT, NULL) — 알고리즘 파라미터 (JSON) +├── route_data_path (VARCHAR(500), NULL) — 경로 데이터 저장 경로 (GeoJSON) +├── computed_at (TIMESTAMP, NULL) — 계산 완료 날짜 +├── created_at (TIMESTAMP) — 생성일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +**참고:** 경로 좌표는 JSON 형식으로 `route_data_path` 파일에 저장됨 (GeoJSON LineString) + +### 5-2. route_points 테이블 (경로 샘플 포인트) +``` +route_points +├── id (INT, PK) — 포인트 고유 번호 +├── route_id (INT, FK → routes.id) — 경로 ID +├── chainage_m (FLOAT, NULL) — 측점 (m) +├── elevation_m (FLOAT, NULL) — 높이 +├── slope_percent (FLOAT, NULL) — 경사도 (%) +├── sequence_num (INT, NULL) — 순서번호 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 5-3. route_statistics 테이블 (경로 통계) +``` +route_statistics +├── id (INT, PK) — 통계 고유 번호 +├── route_id (INT, FK → routes.id) — 경로 ID +├── min_slope (FLOAT, NULL) — 최소 경사도 (%) +├── max_slope (FLOAT, NULL) — 최대 경사도 (%) +├── mean_slope (FLOAT, NULL) — 평균 경사도 (%) +├── cut_volume_m3 (FLOAT, NULL) — 절토량 (m³) +├── fill_volume_m3 (FLOAT, NULL) — 성토량 (m³) +├── tree_cutting_volume (FLOAT, NULL) — 목재 절감 추정량 +└── cost_score (FLOAT, NULL) — 알고리즘 점수 +``` + +--- + +## 6. 종단면 & 횡단면 그룹 + +### 6-1. longitudinal_sections 테이블 (종단면) +``` +longitudinal_sections +├── id (INT, PK) — 종단면 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── route_id (INT, FK → routes.id) — 경로 ID +├── status (VARCHAR(50), NULL) — 상태: DRAFT, CONFIRMED (기본값: DRAFT) +├── data (LONGTEXT, NULL) — 상세 데이터 (JSON) +│ ├── chainages (측점 배열, m) +│ ├── elevations (지표 표고 배열) +│ ├── grades (경사도 배열, %) +│ └── design_elevations (설계 표고 배열) +├── longitudinal_file_path (VARCHAR(500), NULL) — 저장 경로 (JSON) +├── computed_at (TIMESTAMP, NULL) — 계산 날짜 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 6-2. cross_sections 테이블 (횡단면) +``` +cross_sections +├── id (INT, PK) — 횡단면 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── route_id (INT, FK → routes.id) — 경로 ID +├── chainage_m (FLOAT, NULL) — 측점 (예: 0, 20, 40, ... m) +├── sequence_num (INT, NULL) — 횡단면 순번 (1, 2, ...) +├── status (VARCHAR(50), NULL) — 상태: DRAFT, CONFIRMED (기본값: DRAFT) +├── data (LONGTEXT, NULL) — 상세 데이터 (JSON) +│ ├── left_slope (좌측 사면 경사, %) +│ ├── right_slope (우측 사면 경사, %) +│ ├── width_m (노폭) +│ ├── cut_volume_m3 (절토량) +│ ├── fill_volume_m3 (성토량) +│ ├── structures (이 단면 내 구조물 ID 배열) +│ └── notes (메모) +├── cross_section_file_path (VARCHAR(500), NULL) — 저장 경로 (JSON) +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 7. 구조물 & 수량 그룹 + +### 7-1. structures 테이블 (구조물) +``` +structures +├── id (INT, PK) — 구조물 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── cross_section_id (INT, FK → cross_sections.id, NULL) — 횡단면 ID +├── structure_type (VARCHAR(100), NULL) — 종류: 낙석방지책, 돌붙임, 계간수로, 낙차공 등 +├── chainage_m (FLOAT, NULL) — 측점 (m) +├── location (VARCHAR(50), NULL) — 위치: LEFT, CENTER, RIGHT +├── length_m (FLOAT, NULL) — 길이 +├── width_m (FLOAT, NULL) — 폭 +├── height_m (FLOAT, NULL) — 높이 +├── material (VARCHAR(100), NULL) — 재료: 강재, 콘크리트, 목재, 돌 등 +├── quantity (INT, NULL) — 개수 +├── unit_price (FLOAT, NULL) — 단가 +├── design_notes (LONGTEXT, NULL) — 설계 노트 (JSON) +├── structure_data_path (VARCHAR(500), NULL) — 구조물 데이터 저장 경로 +├── last_modified_by (INT, FK → users.id, NULL) — 마지막 수정자 +├── created_at (TIMESTAMP) — 생성일 +├── updated_at (TIMESTAMP) — 수정일 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 7-2. quantity_items 테이블 (수량 항목) +``` +quantity_items +├── id (INT, PK) — 수량 항목 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── category (VARCHAR(100), NULL) — 대분류: 토공, 구조물, 포장, 배수, 녹화, 안전시설 +├── item_name (VARCHAR(255), NULL) — 항목명 (예: "절토 일반", "낙석방지책 설치") +├── unit (VARCHAR(50), NULL) — 단위: m3, 개, m, m2 +├── quantity_design (FLOAT, NULL) — 설계 수량 +├── quantity_actual (FLOAT, NULL) — 실제 수량 (사용자 수정 가능) +├── unit_price (FLOAT, NULL) — 단가 +├── total_price (FLOAT, NULL) — 소계 (quantity_actual × unit_price) +├── standard_reference (VARCHAR(255), NULL) — 기준 참고 자료 +├── quantity_data_path (VARCHAR(500), NULL) — 수량 데이터 저장 경로 +├── data (LONGTEXT, NULL) — 계산 과정 메모 (JSON) +│ ├── formula (계산식) +│ ├── source (데이터 출처) +│ └── ... +├── computed_at (TIMESTAMP, NULL) — 계산 날짜 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 8. 산출물 & 문서 그룹 + +### 8-1. outputs 테이블 (최종 산출물 세트) +``` +outputs +├── id (INT, PK) — 산출물 세트 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── output_type (VARCHAR(100), NULL) — 종류: estimation_excel, drawing_dxf, report_pdf, all_bundle +├── status (VARCHAR(50), NULL) — 상태: GENERATING, COMPLETE, FAILED (기본값: GENERATING) +├── generated_by (INT, FK → users.id, NULL) — 생성자 +├── generated_at (TIMESTAMP) — 생성 날짜 +├── version (INT, NULL) — 버전 (기본값: 1) +├── outputs_directory_path (VARCHAR(500), NULL) — 산출물 저장 폴더 (예: "storage/.../outputs/v1/") +├── metadata (LONGTEXT, NULL) — 메타데이터 (JSON) +│ ├── template_used (사용한 양식) +│ ├── company_name (회사명) +│ ├── project_name (프로젝트명) +│ ├── total_cost (총 비용) +│ └── generation_time_sec (생성 소요 시간) +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +### 8-2. output_files 테이블 (최종 산출 파일) +``` +output_files +├── id (INT, PK) — 파일 고유 번호 +├── output_id (INT, FK → outputs.id) — 산출물 ID +├── file_type (VARCHAR(50), NULL) — 파일 형식: xlsx, pdf, dxf, dwg, json, zip +├── original_filename (VARCHAR(255), NULL) — 파일명 (예: "견적서_v1.xlsx") +├── output_file_path (VARCHAR(500), NULL) — 저장 경로 (예: "storage/.../outputs/v1/견적서.xlsx") +├── file_size_mb (FLOAT, NULL) — 파일 크기 +├── download_count (INT, NULL) — 다운로드 횟수 (기본값: 0) +├── created_at (TIMESTAMP) — 생성 날짜 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 9. 변경 이력 & 감시 그룹 + +### 9-1. change_logs 테이블 (설계 변경 기록) +``` +change_logs +├── id (INT, PK) — 변경 고유 번호 +├── project_id (CHAR(36), FK → projects.id) — 프로젝트 ID +├── changed_by (INT, FK → users.id) — 변경자 +├── changed_at (TIMESTAMP) — 변경 날짜 +├── entity_type (VARCHAR(100)) — 대상 타입: routes, cross_sections, structures, quantity_items +├── entity_id (VARCHAR(50)) — 대상 ID +├── old_value (LONGTEXT, NULL) — 변경 전 값 (JSON) +├── new_value (LONGTEXT, NULL) — 변경 후 값 (JSON) +├── reason (TEXT, NULL) — 변경 사유 +└── deleted_at (TIMESTAMP, NULL) — 삭제일 (soft delete) +``` + +--- + +## 10. 테이블 관계도 + +``` +users (사용자) +├── id (PK) +├── email +├── password_hash +├── role (SYSTEM_ADMIN | ADMIN | USER) +├── is_master +├── status (생명주기) +├── company_id (FK) ──→ companies.id +├── last_login +└── auth_expires_at + +companies (회사) +├── id (PK) +├── name +├── status (ACTIVE | INACTIVE | SUSPENDED) +├── subscription_status (FREE | TRIAL | PAID | EXPIRED) +├── created_by (FK) ──→ users.id +└── created_at + +projects (프로젝트) +├── id (UUID, PK) +├── user_id (FK) ──→ users.id +├── company_id (FK) ──→ companies.id +├── name +├── status +├── crs_epsg +├── storage_path +└── created_at + ↓ + ├─→ input_files (입력 파일) + │ └─→ processed_point_cloud (변환된 포인트클라우드) + │ └─→ surface_models (지표면 모델) + │ └─→ terrain_layers (지형 레이어) + ├─→ routes (경로) + │ ├─→ route_points (경로 포인트) + │ ├─→ route_statistics (경로 통계) + │ ├─→ longitudinal_sections (종단면) + │ └─→ cross_sections (횡단면) + │ └─→ structures (구조물) + ├─→ quantity_items (수량 항목) + ├─→ outputs (산출물) + │ └─→ output_files (산출물 파일) + ├─→ project_versions (프로젝트 버전) + ├─→ project_automations (프로젝트 자동화) + ├─→ audit_logs (감시 로그) + └─→ change_logs (변경 로그) +``` + +--- + +## 11. 파일시스템 경로와 DB 링크 (워크플로우 기반 구조) + +### 파일시스템 구조 (6단계 워크플로우) + +``` +storage/ +├── {company_slug}/ +│ └── {user_slug}/ +│ └── {project_id}/ ← projects.storage_path +│ │ +│ ├── B03_FileInput/ ← WF0: 파일 입력 +│ │ └── input/ (원본 입력 파일들) +│ │ ├── las/ +│ │ │ └── cloud_merged.las ← input_files.raw_file_path +│ │ ├── tif/ +│ │ ├── tfw/ +│ │ ├── prj/ +│ │ └── dxf/ +│ │ +│ ├── B04_wf1_Surface/ ← WF1: 지표면 분석 +│ │ ├── processed/ (변환된 포인트클라우드) +│ │ │ ├── cloud_filtered.las ← processed_point_cloud.processed_file_path +│ │ │ └── cloud_sampled.ply ← processed_point_cloud.converted_file_path +│ │ └── models/ (지표면 모델 & 레이어) +│ │ ├── dem_2m.tif ← surface_models.model_file_path +│ │ ├── tin_mesh.obj +│ │ ├── layer_ground.geojson ← terrain_layers.layer_file_path +│ │ └── layer_1.geojson +│ │ +│ ├── B05_wf2_Route/ ← WF2: 경로 설계 +│ │ └── route/ +│ │ ├── route_main.geojson ← routes.route_data_path +│ │ ├── route_points.json +│ │ └── route_statistics.json +│ │ +│ ├── B06_wf3_ProfileCross/ ← WF3: 종횡단 생성 +│ │ ├── longitudinal/ +│ │ │ └── longitudinal.json ← longitudinal_sections.longitudinal_file_path +│ │ └── cross_sections/ +│ │ ├── cross_0000m.json ← cross_sections.cross_section_file_path +│ │ ├── cross_0020m.json +│ │ └── ... +│ │ +│ ├── B07_wf4_DesignDetail/ ← WF4: 상세 설계 +│ │ └── structures/ +│ │ ├── struct_0020m_001.json ← structures.structure_data_path +│ │ └── ... +│ │ +│ ├── B08_wf5_Quantity/ ← WF5: 수량 산출 +│ │ ├── quantities/ +│ │ │ └── items.json ← quantity_items.quantity_data_path +│ │ └── ... +│ │ +│ └── B09_wf6_Estimation/ ← WF6: 견적·문서 +│ ├── v1/ ← outputs.outputs_directory_path +│ │ ├── 견적서.xlsx ← output_files.output_file_path +│ │ ├── 설계도.dxf +│ │ └── ... +│ └── v2/ +│ └── ... +``` + +**핵심 개념:** +- **B03~B09**: 워크플로우 6단계와 1:1 대응 +- **각 단계의 입력/출력**: 명확히 분리 +- **버전 관리**: B09 단계에서만 (v1, v2, ...) + +--- + +## 12. 핵심 쿼리 예제 + +### 예제 1: 사용자의 모든 프로젝트 조회 +```sql +SELECT p.id, p.name, p.status, p.created_at +FROM projects p +WHERE p.user_id = :user_id AND p.deleted_at IS NULL +ORDER BY p.created_at DESC; +``` + +### 예제 2: 프로젝트의 최신 경로 조회 +```sql +SELECT r.id, r.total_length_m, r.status +FROM routes r +WHERE r.project_id = :project_id AND r.deleted_at IS NULL +ORDER BY r.computed_at DESC +LIMIT 1; +``` + +### 예제 3: 경로의 모든 횡단면 조회 +```sql +SELECT cs.id, cs.chainage_m, cs.data +FROM cross_sections cs +WHERE cs.route_id = :route_id AND cs.deleted_at IS NULL +ORDER BY cs.chainage_m; +``` + +### 예제 4: 프로젝트 총 비용 계산 +```sql +SELECT + SUM(quantity_actual * unit_price) as total_cost, + category +FROM quantity_items +WHERE project_id = :project_id AND deleted_at IS NULL +GROUP BY category; +``` + +### 예제 5: 사용자의 감시 로그 (최근 30일) +```sql +SELECT action, entity_type, timestamp +FROM audit_logs +WHERE user_id = :user_id AND timestamp > DATE_SUB(NOW(), INTERVAL 30 DAY) +ORDER BY timestamp DESC; +``` + +--- + +## 13. 데이터 타입 가이드 + +| 타입 | 설명 | 예제 | +|------|------|------| +| INT | 정수 | 1, 2, 100 | +| FLOAT | 실수 | 1.5, 2.25, 100.75 | +| VARCHAR(n) | 문자열 (고정 길이) | "project_name" | +| TEXT / LONGTEXT | 문자열 (가변, 대용량) | 설명문, JSON 데이터 | +| TIMESTAMP | 날짜 + 시간 (자동 업데이트) | 2025-07-05 15:30:00 | +| DATETIME | 날짜 + 시간 (수동) | 2025-07-05 15:30:00 | +| TINYINT(1) | 참/거짓 (0 또는 1) | 0, 1 | +| ENUM | 열거형 | ACTIVE, INACTIVE | +| CHAR(36) | UUID (고정 36자) | 550e8400-e29b-41d4-a716-446655440000 | + +--- + +## 14. 총 테이블 수 및 분류 + +### 34개 테이블 분류 + +**1. 사용자/회사/조직 (14개)** +- users, companies, join_requests (향후), email_otps, sessions, trusted_devices, user_consents +- login_logs, activity_logs, audit_logs, system_audit_logs, system_resources, support_requests + +**2. 프로젝트 관리 (3개)** +- projects, project_versions, project_automations + +**3. 파일/업로드 (3개)** +- upload_sessions, upload_chunks, input_files + +**4. 지표면 분석 (3개)** +- processed_point_cloud, surface_models, terrain_layers + +**5. 경로 설계 (3개)** +- routes, route_points, route_statistics + +**6. 종횡단 설계 (2개)** +- longitudinal_sections, cross_sections + +**7. 구조물/수량 (2개)** +- structures, quantity_items + +**8. 산출물 (2개)** +- outputs, output_files + +**9. 변경/이력 (1개)** +- change_logs + +--- + +## 15. DB vs 파일시스템 역할 분리 + +| 저장 위치 | 내용 | 예시 | +|----------|------|------| +| **DB (MariaDB)** | 메타데이터 + 경로정보 + 상태 | 파일명, 크기, 좌표계, 상태, 저장경로, 통계 | +| **파일시스템** | 실제 파일 데이터 | LAS, PLY, TIF, DXF, Excel, PDF, JSON 파일들 | + +**설계 원칙:** +- DB에는 "어디에 무엇이 있는가"의 메타정보만 저장 +- 실제 대용량 파일은 파일시스템에 저장 +- 각 워크플로우 단계의 입력/출력 경로를 DB에 기록 +- JSON 형식으로 좌표 및 복잡한 데이터 구조를 저장 + +--- + +## 16. 마이그레이션 상태 + +### ✅ 완료됨 +- [x] 33개 테이블 생성 (MariaDB) +- [x] 관계(FK) 설정 +- [x] Soft delete (deleted_at) 지원 +- [x] 인덱스 추가 (주요 조회 경로) + +### 📋 진행 중 +- [ ] API 라우터에서 파일 경로 저장 로직 추가 + - B03 파일 업로드 → `input_files.raw_file_path` 저장 + - B04 WF1 실행 → `surface_models.model_file_path`, `terrain_layers.layer_file_path` 저장 + - B05 WF2 실행 → `routes.route_data_path` 저장 + - B06 WF3 실행 → `longitudinal_sections.longitudinal_file_path`, `cross_sections.cross_section_file_path` 저장 + - B07 WF4 실행 → `structures.structure_data_path` 저장 + - B08 WF5 실행 → `quantity_items.quantity_data_path` 저장 + - B09 WF6 실행 → `outputs.outputs_directory_path`, `output_files.output_file_path` 저장 + +### 🔮 향후 계획 +- [ ] Python Pydantic 모델 정의 (ORM 대신) +- [ ] API 엔드포인트 보안 감시 강화 +- [ ] 실시간 알림 시스템 (WebSocket) diff --git a/docs/raw/guidelines/design.md b/docs/raw/guidelines/design.md new file mode 100644 index 0000000..eaad144 --- /dev/null +++ b/docs/raw/guidelines/design.md @@ -0,0 +1,445 @@ +# Wiza — Style Reference +> Twilight prospecting observatory bathed in lavender mist + +**Theme:** light + +Wiza operates in a light-mode universe where deep violet ink commands attention against a soft lavender atmosphere. The brand lives between a confident enterprise tool and an approachable consumer product—white surfaces, thin borders, and compact Inter type for dense data interfaces, paired with Britti Sans display headlines that feel geometric and assured. The signature move is the gradient wash: pale lavender backgrounds bleeding white-to-violet-to-peach, making even a sprawling data table feel sunlit. Purple is reserved for authority—headlines, logo, filled actions—while the rest of the UI stays in quiet neutrals, letting contact data breathe. + +## Tokens — Colors + +| Name | Value | Token | Role | +|------|-------|-------|------| +| Deep Iris | `#26114a` | `--color-deep-iris` | Violet supporting accent for decorative details and low-frequency emphasis. Do not promote it to the primary CTA color | +| Plum Velvet | `#312749` | `--color-plum-velvet` | Navigation text, secondary headings, card titles, footer copy — slightly lighter companion to Deep Iris | +| Royal Amethyst | `#3e0079` | `--color-royal-amethyst` | Links, input focus rings, accent strokes, icon highlights — the most saturated violet | +| Mist Violet | `#edecff` | `--color-mist-violet` | Soft highlight washes, tinted section backgrounds, decorative blurs — the lavender atmosphere | +| Lavender Wash | `linear-gradient(90deg, rgb(185, 154, 255), rgb(125, 67, 255) 10%, rgba(125, 67, 255, 0))` | `--color-lavender-wash` | Decorative gradient stops and hero atmosphere | +| Twilight Beam | `linear-gradient(to right, rgb(207, 138, 255), rgb(255, 102, 193), rgb(255, 173, 116), rgb(170, 129, 255))` | `--color-twilight-beam` | Multi-stop decorative gradient for hero glow effects | +| Canvas | `#ffffff` | `--color-canvas` | Page background, card surfaces, input fields, button text on dark fills | +| Paper | `#f6f7fa` | `--color-paper` | Subtle surface lift, table row alternation, secondary card backgrounds | +| Mist | `#e6e2e3` | `--color-mist` | Hairline borders, dividers, subtle separators | +| Smoke | `#c1c7cf` | `--color-smoke` | Disabled states, skeleton placeholders, muted background blocks | +| Ash | `#9491a1` | `--color-ash` | Muted helper text, placeholder copy, secondary metadata | +| Slate | `#615e6e` | `--color-slate` | Secondary body text, descriptions, table metadata | +| Charcoal | `#333333` | `--color-charcoal` | Body text, link text, icon strokes in neutral contexts | +| Carbon | `#222222` | `--color-carbon` | Dark UI elements, near-black accents | +| Ink | `#000000` | `--color-ink` | Maximum contrast text and borders in specific dark UI elements | + +## Tokens — Typography + +### Britti Sans — Display and heading typeface used exclusively at 24–64px, always weight 500. The 1.0 line-height is distinctive — headings sit tight with no leading slack, creating geometric, almost architectural presence. Substitute with Plus Jakarta Sans (500) or General Sans (500) for closest geometric match. · `--font-britti-sans` +- **Substitute:** Plus Jakarta Sans +- **Weights:** 500 +- **Sizes:** 24px, 32px, 40px, 56px, 64px +- **Line height:** 1.00 +- **Role:** Display and heading typeface used exclusively at 24–64px, always weight 500. The 1.0 line-height is distinctive — headings sit tight with no leading slack, creating geometric, almost architectural presence. Substitute with Plus Jakarta Sans (500) or General Sans (500) for closest geometric match. + +### Inter — Workhorse UI and body typeface. Weight 400 for body, 500 for buttons/nav/table headers, 700 for emphasized labels. The tight size range (12–16px) and compact line-heights signal a data-dense product, not a marketing site. Substitute with Inter directly or IBM Plex Sans. · `--font-inter` +- **Substitute:** Inter +- **Weights:** 400, 500, 700 +- **Sizes:** 12px, 14px, 16px +- **Line height:** 1.30–1.50 +- **Role:** Workhorse UI and body typeface. Weight 400 for body, 500 for buttons/nav/table headers, 700 for emphasized labels. The tight size range (12–16px) and compact line-heights signal a data-dense product, not a marketing site. Substitute with Inter directly or IBM Plex Sans. + +### Type Scale + +| Role | Size | Line Height | Letter Spacing | Token | +|------|------|-------------|----------------|-------| +| caption | 12px | 1.3 | — | `--text-caption` | +| body-sm | 14px | 1.4 | — | `--text-body-sm` | +| body | 16px | 1.5 | — | `--text-body` | +| subheading | 24px | 1 | — | `--text-subheading` | +| heading-sm | 32px | 1 | — | `--text-heading-sm` | +| heading | 40px | 1 | — | `--text-heading` | +| heading-lg | 56px | 1 | — | `--text-heading-lg` | +| display | 64px | 1 | — | `--text-display` | + +## Tokens — Spacing & Shapes + +**Base unit:** 8px + +**Density:** compact + +### Spacing Scale + +| Name | Value | Token | +|------|-------|-------| +| 8 | 8px | `--spacing-8` | +| 16 | 16px | `--spacing-16` | +| 24 | 24px | `--spacing-24` | +| 32 | 32px | `--spacing-32` | +| 40 | 40px | `--spacing-40` | +| 48 | 48px | `--spacing-48` | +| 56 | 56px | `--spacing-56` | +| 64 | 64px | `--spacing-64` | +| 96 | 96px | `--spacing-96` | +| 104 | 104px | `--spacing-104` | +| 216 | 216px | `--spacing-216` | + +### Border Radius + +| Element | Value | +|---------|-------| +| cards | 8px | +| icons | 8px | +| large | 24px | +| pills | 1440px | +| inputs | 8px | +| buttons | 8px | + +### Shadows + +| Name | Value | Token | +|------|-------|-------| +| sm | `rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105...` | `--shadow-sm` | +| lg | `rgba(14, 59, 101, 0.06) 0px 32px 24px -12px, rgba(14, 59,...` | `--shadow-lg` | +| lg-2 | `rgba(114, 49, 255, 0.32) 0px -6px 20px 0px inset, rgba(47...` | `--shadow-lg-2` | +| sm-2 | `rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105...` | `--shadow-sm-2` | +| sm-3 | `rgba(47, 1, 151, 0.01) 0px 11px 4px 0px, rgba(47, 1, 151,...` | `--shadow-sm-3` | + +### Layout + +- **Page max-width:** 1200px +- **Section gap:** 64-80px +- **Card padding:** 16-24px +- **Element gap:** 8px + +## Components + +### Filled Brand Button +**Role:** Primary action trigger in hero and CTA blocks + +Background #26114a, text #ffffff, 8px radius, 16px vertical / 24px horizontal padding, Inter 500 at 16px. Carries the brand weight — only used for the most important conversion per screen. + +### Ghost Outlined Button +**Role:** Secondary action paired beside a filled button + +Background transparent, border 1px #26114a, text #26114a, 8px radius, 16px/24px padding, Inter 500 at 16px. Matches the filled button's exact dimensions for optical pairing. + +### Pill Navigation Button +**Role:** Top-level nav items in the floating header + +1440px radius, 8px/16px padding, Inter 500 at 14px, text #312749. Active state may use #edecff background. The full-pill shape is distinctive — not rounded rectangles, but true capsules. + +### Logo Lockup +**Role:** Brand identity in header and footer + +Purple triangular icon mark paired with 'wiza' wordmark in Britti Sans 500 or Inter 700. Icon uses a gradient from #b99aff to #7d43ff. Appears in a white pill container with 8px radius and subtle shadow. + +### Product Screenshot Frame +**Role:** Hero product demonstration and feature illustrations + +White surface with 8px radius, surrounded by the deep layered shadow stack (rgba(14,59,101,0.06) large blur). Floats over the lavender gradient background, creating depth without borders. + +### Data Table Row +**Role:** Contact/prospect list display in product mockups + +Alternating #ffffff and #f6f7fa backgrounds, 1px #e6e2e3 bottom border, 12px/16px cell padding, Inter 400 at 14px for data, Inter 500 for headers. Dense, compact rows with colored status dots. + +### Logo Cloud Bar +**Role:** Social proof — client brand logos + +Monochrome (Charcoal #333333) logo strip on white background, centered, with consistent 40–60px height per logo. No colorful logos — all desaturated for visual calm. + +### Rating Badge Pair +**Role:** Third-party validation scores (G2, Chrome Web Store) + +White pill cards (1440px radius), Inter 500 at 14px for score, 12px for platform name. Star icon in #3e0079 or #f5b800. Displayed in a centered pair with 24px gap. + +### Section Heading Block +**Role:** Intro text for content sections + +Optional pill tag above (Mist Violet #edecff background, Royal Amethyst #3e0079 text, 1440px radius, Inter 500 12px, 4px/12px padding). Main heading in Britti Sans 500 at 40–56px, Deep Iris #26114a. Subtext in Inter 400 at 16–18px, Slate #615e6e. + +### Profile Card (Magic Wand Feature) +**Role:** Contact preview cards in feature illustrations + +White surface, 8px radius, subtle border, 12px/16px padding. Contains circular avatar (32px), name in Inter 500 14px #26114a, title in Inter 400 12px #615e6, company in Inter 400 12px #9491a1. Arranged in 3-column grid with 16px gaps. + +### Floating Navigation Bar +**Role:** Sticky header container + +White background with 8px radius, floats over hero with the layered shadow. Contains logo, nav links (Pill Navigation Button style), and login/signup actions. Max-width contained with side padding. + +### Tag/Badge (Pill) +**Role:** Feature labels, job titles, status indicators + +1440px radius, 4px/12px padding, Inter 500 at 12px. Variants: #edecff bg with #3e0079 text (accent tags), #f6f7fa bg with #615e6 text (neutral tags), or status-specific colors. + +### Input Field +**Role:** Search and form inputs in product UI + +1px #e6e2e3 border, 8px radius, 10px/14px padding, Inter 400 at 14px, placeholder in Ash #9491a1. Focus state uses 2px Royal Amethyst #3e0079 border ring. + +### Feature Icon Tile +**Role:** Small decorative icon containers in section intros + +16px or 24px square tiles with 8px radius, Mist Violet #edecff background, purple stroke icon inside. Used sparingly to mark section types. + +## Do's and Don'ts + +### Do +- Use 8px radius for all rectangular UI surfaces — cards, buttons, inputs, icon containers. The 8px is the signature, not 4px or 12px. +- Use 1440px radius exclusively for pills, tags, and capsule-shaped nav items — never for cards or panels. +- Set Britti Sans headings to line-height 1.0 exactly. The tight leading is what makes the type feel architectural. +- Use Deep Iris #26114a for headlines and filled button backgrounds. Never use it for body text larger than 24px — it overwhelms at small sizes. +- Pair every filled button with an adjacent ghost button of identical dimensions for the hero CTA pattern. +- Anchor section intros with a small pill tag above the heading in Mist Violet + Royal Amethyst. +- Use the Lavender Wash gradient on hero and feature section backgrounds — it defines the atmosphere. +- Keep Inter at 12–16px for all UI text. The compact size range signals a data-dense product. + +### Don't +- Do not use Royal Amethyst #3e0079 for body text — it vibrates uncomfortably at small sizes; reserve it for links, icons, and accent strokes. +- Do not apply 4px or 12px radius to cards — the 8px is non-negotiable for visual consistency. +- Do not use line-height above 1.0 for Britti Sans headings — the tightness is the point. +- Do not introduce new chromatic colors outside the violet family — the palette is deliberately monochromatic-violet. +- Do not use heavy drop shadows. The blue-tinted shadows are subtle (max 32px blur at 6% opacity). +- Do not center body text in multi-line paragraphs — only headlines and short intros get center alignment. +- Do not place dark text directly on the lavender gradient — use a white surface card between them for legibility. +- Do not use rounded images or photos in feature illustrations — the design is iconographic, not photographic. + +## Surfaces + +| Level | Name | Value | Purpose | +|-------|------|-------|---------| +| 0 | Canvas | `#ffffff` | Page background, outermost layer | +| 1 | Paper | `#f6f7fa` | Card surfaces, table containers, subtle lifts | +| 2 | Mist Violet | `#edecff` | Tinted highlight sections, gradient start point | +| 3 | Lavender Glow | `#b99aff` | Hero gradient stops, atmospheric overlays | + +## Elevation + +- **Cards and elevated panels:** `rgba(14, 59, 101, 0.06) 0px 32px 24px -12px, rgba(14, 59, 101, 0.01) 0px 11px 4px 0px, rgba(14, 59, 101, 0.02) 0px 6px 4px 0px, rgba(14, 59, 101, 0.03) 0px 3px 3px 0px, rgba(14, 59, 101, 0.04) 0px 1px 1px 0px` +- **Buttons and nav items:** `rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105, 0.04) 0px 1px 1px 0px, rgba(18, 55, 105, 0.08) 0px 0px 0px 1px` +- **Product feature highlights:** `rgba(114, 49, 255, 0.32) 0px -6px 20px 0px inset, rgba(47, 1, 151, 0.12) 0px 11px 12px 0px, rgba(47, 1, 151, 0.12) 0px 3px 3px 0px, rgba(47, 1, 151, 0.12) 0px 1px 1px 0px, rgba(47, 1, 151, 0.08) 0px 0px 0px 1px` + +## Imagery + +The visual language is almost entirely product-screenshot and iconographic — no lifestyle photography, no stock imagery, no people in context. Product mockups show a contact-prospecting data table with purple status indicators, person avatars, and company logos. Decorative visuals use soft purple gradient washes with floating profile cards arranged in grid patterns. Icons are simple, single-stroke, geometric shapes (a triangle logo, outlined feature icons). Logos in the trust bar are desaturated to monochrome. The overall feel is that of a polished SaaS dashboard screenshot rather than a marketing site with imagery. + +## Layout + +Centered, max-width 1200px container with generous vertical breathing room (64–80px section gaps). The hero is a full-bleed lavender-to-white gradient with a centered headline stack and dual CTA buttons, followed by a floating product screenshot that breaks the container edge slightly. Below the fold, content alternates between white surface sections and light lavender tinted sections. The logo cloud is a single centered row. Feature sections use centered heading blocks followed by 2-column or 3-column card grids. A sticky floating navigation bar (pill-shaped, centered) sits over the hero. + +## Agent Prompt Guide + +primary action: no distinct CTA color +**Quick Color Reference** +- text (primary): #26114a +- text (secondary): #615e6e +- text (muted): #9491a1 +- background: #ffffff +- surface: #f6f7fa +- border: #e6e2e3 +- brand/accent: #3e0079 +- filled button background: #26114a + +**Example Component Prompts** + +1. **Hero Section**: White-to-lavender gradient background (linear-gradient from #ffffff to #edecff). Centered headline 'Find verified emails and phone numbers' in Britti Sans weight 500 at 56px, color #26114a, line-height 1.0. Subtext in Inter 400 at 18px, color #615e6e. Two buttons side by side: filled button (background #26114a, text #ffffff, 8px radius, 16px/24px padding, Inter 500 16px) and ghost button (border 1px #26114a, text #26114a, same dimensions). Below: a product screenshot framed in a white card with 8px radius and the deep blue-tinted shadow. + +2. **Data Table Card**: White surface card, 8px radius, 1px #e6e2e3 border, 16px/24px padding. Table header row in Inter 500 at 12px, color #615e6e, uppercase, with 1px #e6e2e3 bottom border. Data rows alternate #ffffff and #f6f7fa backgrounds, Inter 400 at 14px, color #26114a. Action buttons in each row: small pill tags with 1440px radius, #edecff background, #3e0079 text, Inter 500 at 12px. + +3. **Section Heading with Pill Tag**: Optional pill tag above heading: 1440px radius, #edecff background, #3e0079 text, Inter 500 at 12px, 4px/12px padding. Main heading in Britti Sans 500 at 40px, #26114a, line-height 1.0. Subtext in Inter 400 at 16px, #615e6e. All centered. + +4. **Profile Preview Card**: White surface, 8px radius, 1px #e6e2e3 border, 12px/16px padding. 32px circular avatar at top-left. Name in Inter 500 at 14px, #26114a. Title in Inter 400 at 12px, #615e6e. Company in Inter 400 at 12px, #9491a1. Arranged in 3-column grid with 16px gaps, centered in section. + +5. **Trust Logo Bar**: Single horizontal row of 6 client logos, all rendered in monochrome #333333, centered, each logo 40–50px height. White background, 64px vertical padding above and below. Below: two rating badge pills (1440px radius, white bg, subtle border) with star icon and score in Inter 500 14px, platform name in Inter 400 12px #615e6e. + +## Gradient System + +The lavender atmosphere is built from three gradient layers: +- **Hero wash**: linear-gradient(90deg, #b99aff, #7d43ff 10%, transparent) — fades right, creating a directional glow +- **Decorative multi-stop**: linear-gradient(to right, #cf8aff, #ff66c1, #ffad74, #ff63d1, #aa81ff) — used sparingly for special highlights +- **Section tint**: subtle white-to-#edecff vertical fade for alternating content sections +Gradients should always sit behind white content surfaces — never behind text directly. + +## Similar Brands + +- **Apollo.io** — Same deep-violet brand color, similar data-prospecting product, and comparable lavender gradient hero treatment +- **Lusha** — Shared violet/indigo palette, compact data table UI, and light-mode product-first layout +- **Clearbit** — Similar light-mode SaaS with subtle gradient backgrounds and confident sans-serif display type +- **ZoomInfo** — Enterprise data product with dense tabular UI, compact Inter type, and restrained brand color usage +- **Cognism** — Purple-tinted brand identity with soft gradient hero sections and data-table product showcases + +## Quick Start + +### CSS Custom Properties + +```css +:root { + /* Colors */ + --color-deep-iris: #26114a; + --color-plum-velvet: #312749; + --color-royal-amethyst: #3e0079; + --color-mist-violet: #edecff; + --color-lavender-wash: #b99aff; + --gradient-lavender-wash: linear-gradient(90deg, rgb(185, 154, 255), rgb(125, 67, 255) 10%, rgba(125, 67, 255, 0)); + --color-twilight-beam: #cf8aff; + --gradient-twilight-beam: linear-gradient(to right, rgb(207, 138, 255), rgb(255, 102, 193), rgb(255, 173, 116), rgb(170, 129, 255)); + --color-canvas: #ffffff; + --color-paper: #f6f7fa; + --color-mist: #e6e2e3; + --color-smoke: #c1c7cf; + --color-ash: #9491a1; + --color-slate: #615e6e; + --color-charcoal: #333333; + --color-carbon: #222222; + --color-ink: #000000; + + /* Typography — Font Families */ + --font-britti-sans: 'Britti Sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --font-inter: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Typography — Scale */ + --text-caption: 12px; + --leading-caption: 1.3; + --text-body-sm: 14px; + --leading-body-sm: 1.4; + --text-body: 16px; + --leading-body: 1.5; + --text-subheading: 24px; + --leading-subheading: 1; + --text-heading-sm: 32px; + --leading-heading-sm: 1; + --text-heading: 40px; + --leading-heading: 1; + --text-heading-lg: 56px; + --leading-heading-lg: 1; + --text-display: 64px; + --leading-display: 1; + + /* Typography — Weights */ + --font-weight-regular: 400; + --font-weight-medium: 500; + --font-weight-bold: 700; + + /* Spacing */ + --spacing-unit: 8px; + --spacing-8: 8px; + --spacing-16: 16px; + --spacing-24: 24px; + --spacing-32: 32px; + --spacing-40: 40px; + --spacing-48: 48px; + --spacing-56: 56px; + --spacing-64: 64px; + --spacing-96: 96px; + --spacing-104: 104px; + --spacing-216: 216px; + + /* Layout */ + --page-max-width: 1200px; + --section-gap: 64-80px; + --card-padding: 16-24px; + --element-gap: 8px; + + /* Border Radius */ + --radius-sm: 2px; + --radius-lg: 8px; + --radius-xl: 12px; + --radius-2xl: 16px; + --radius-3xl: 24px; + --radius-3xl-2: 28px; + --radius-3xl-3: 40px; + --radius-full: 56px; + --radius-full-2: 1440px; + + /* Named Radii */ + --radius-cards: 8px; + --radius-icons: 8px; + --radius-large: 24px; + --radius-pills: 1440px; + --radius-inputs: 8px; + --radius-buttons: 8px; + + /* Shadows */ + --shadow-sm: rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105, 0.04) 0px 1px 1px 0px, rgba(18, 55, 105, 0.08) 0px 0px 0px 1px; + --shadow-lg: rgba(14, 59, 101, 0.06) 0px 32px 24px -12px, rgba(14, 59, 101, 0.01) 0px 11px 4px 0px, rgba(14, 59, 101, 0.02) 0px 6px 4px 0px, rgba(14, 59, 101, 0.03) 0px 3px 3px 0px, rgba(14, 59, 101, 0.04) 0px 1px 1px 0px; + --shadow-lg-2: rgba(114, 49, 255, 0.32) 0px -6px 20px 0px inset, rgba(47, 1, 151, 0.12) 0px 11px 12px 0px, rgba(47, 1, 151, 0.12) 0px 3px 3px 0px, rgba(47, 1, 151, 0.12) 0px 1px 1px 0px, rgba(47, 1, 151, 0.08) 0px 0px 0px 1px; + --shadow-sm-2: rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105, 0.04) 0px 1px 1px 0px; + --shadow-sm-3: rgba(47, 1, 151, 0.01) 0px 11px 4px 0px, rgba(47, 1, 151, 0.04) 0px 6px 4px 0px, rgba(47, 1, 151, 0.06) 0px 3px 3px 0px, rgba(47, 1, 151, 0.08) 0px 1px 1px 0px, rgba(47, 1, 151, 0.08) 0px 0px 0px 1px; + + /* Surfaces */ + --surface-canvas: #ffffff; + --surface-paper: #f6f7fa; + --surface-mist-violet: #edecff; + --surface-lavender-glow: #b99aff; +} +``` + +### Tailwind v4 + +```css +@theme { + /* Colors */ + --color-deep-iris: #26114a; + --color-plum-velvet: #312749; + --color-royal-amethyst: #3e0079; + --color-mist-violet: #edecff; + --color-lavender-wash: #b99aff; + --color-twilight-beam: #cf8aff; + --color-canvas: #ffffff; + --color-paper: #f6f7fa; + --color-mist: #e6e2e3; + --color-smoke: #c1c7cf; + --color-ash: #9491a1; + --color-slate: #615e6e; + --color-charcoal: #333333; + --color-carbon: #222222; + --color-ink: #000000; + + /* Typography */ + --font-britti-sans: 'Britti Sans', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --font-inter: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + + /* Typography — Scale */ + --text-caption: 12px; + --leading-caption: 1.3; + --text-body-sm: 14px; + --leading-body-sm: 1.4; + --text-body: 16px; + --leading-body: 1.5; + --text-subheading: 24px; + --leading-subheading: 1; + --text-heading-sm: 32px; + --leading-heading-sm: 1; + --text-heading: 40px; + --leading-heading: 1; + --text-heading-lg: 56px; + --leading-heading-lg: 1; + --text-display: 64px; + --leading-display: 1; + + /* Spacing */ + --spacing-8: 8px; + --spacing-16: 16px; + --spacing-24: 24px; + --spacing-32: 32px; + --spacing-40: 40px; + --spacing-48: 48px; + --spacing-56: 56px; + --spacing-64: 64px; + --spacing-96: 96px; + --spacing-104: 104px; + --spacing-216: 216px; + + /* Border Radius */ + --radius-sm: 2px; + --radius-lg: 8px; + --radius-xl: 12px; + --radius-2xl: 16px; + --radius-3xl: 24px; + --radius-3xl-2: 28px; + --radius-3xl-3: 40px; + --radius-full: 56px; + --radius-full-2: 1440px; + + /* Shadows */ + --shadow-sm: rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105, 0.04) 0px 1px 1px 0px, rgba(18, 55, 105, 0.08) 0px 0px 0px 1px; + --shadow-lg: rgba(14, 59, 101, 0.06) 0px 32px 24px -12px, rgba(14, 59, 101, 0.01) 0px 11px 4px 0px, rgba(14, 59, 101, 0.02) 0px 6px 4px 0px, rgba(14, 59, 101, 0.03) 0px 3px 3px 0px, rgba(14, 59, 101, 0.04) 0px 1px 1px 0px; + --shadow-lg-2: rgba(114, 49, 255, 0.32) 0px -6px 20px 0px inset, rgba(47, 1, 151, 0.12) 0px 11px 12px 0px, rgba(47, 1, 151, 0.12) 0px 3px 3px 0px, rgba(47, 1, 151, 0.12) 0px 1px 1px 0px, rgba(47, 1, 151, 0.08) 0px 0px 0px 1px; + --shadow-sm-2: rgba(18, 55, 105, 0.08) 0px 2px 4px 0px, rgba(18, 55, 105, 0.04) 0px 1px 1px 0px; + --shadow-sm-3: rgba(47, 1, 151, 0.01) 0px 11px 4px 0px, rgba(47, 1, 151, 0.04) 0px 6px 4px 0px, rgba(47, 1, 151, 0.06) 0px 3px 3px 0px, rgba(47, 1, 151, 0.08) 0px 1px 1px 0px, rgba(47, 1, 151, 0.08) 0px 0px 0px 1px; +} +``` diff --git a/docs/raw/guidelines/frontend.md b/docs/raw/guidelines/frontend.md new file mode 100644 index 0000000..c854565 --- /dev/null +++ b/docs/raw/guidelines/frontend.md @@ -0,0 +1,120 @@ +# 인터페이스 및 UI 제어 명세서 (frontend.md) + +## 1. 글로벌 테마 변수 강제 (Theme Constraints) +* **임의 색상 지정 금지:** 하드코딩된 Hex 코드 직접 입력 금지. +* **CSS 변수 필수 참조:** 테마 전환(라이트/다크) 및 일관성을 위해 `ui_template_theme.css` 선언 변수(`var(--color-bg)`, `var(--color-text)` 등)만 사용. +* **신규 컴포넌트/템플릿:** 신규 컴포넌트나 템플릿이 필요한 경우`.agent\design.md` 파일을 참고하여 양식을 `ui_template\ui_template_elements.ts`, `ui_template\ui_template_locale.ts`, `ui_template\ui_template_theme.css` 양식화하여 사용할 것 + +## 2. UI 요소 및 레이아웃 제약 (Layout Constraints) +* **공통 컴포넌트 최우선:** 임의 스타일링 금지. `ui_template_elements.ts` 규격 및 공통 컴포넌트 최우선 상속/참조. +* **3단 기본 레이아웃 준수:** 워크플로우 페이지 기본 배치 강제 (예외 요청 제외) + 1. 상단 영역: 페이지 타이틀 및 현재 진행 단계 상태 + 2. 좌측 패널: 데이터 입력 폼 및 설정 제어 영역 (너비 고정) + 3. 우측 영역: WebCAD 도면 뷰어 또는 결과 데이터 그리드 (나머지 전체 너비) + +### 2.1 공통 컴포넌트 목록 (`ui_template_elements.ts`) +* **기본:** `createButton`, `createInputField`, `createCard`, `createTag`, `createWorkflowShell` +* **오버레이/알림:** `showLoadingOverlay`, `hideLoadingOverlay`, `showToast` +* **스플라인 차트:** `createLineChart(opts)` — 외부 라이브러리 없이 인라인 SVG로 시계열 렌더링 + - **곡선:** Catmull-Rom → 3차 베지어 변환으로 스플라인(부드러운 곡선) 렌더 + - **색상:** `--color-chart-0~3` 테마 변수 사용 (하드코딩 금지) + - **범례:** 그래프 영역 우상단에 반투명 오버레이 배치 (`opts.series[].name`) + - **X축:** `opts.xLabels` 전달 시 양끝 포함 5개 라벨 균등 표기 + - **결측:** `series[].values`에 `null` 포함 시 해당 구간 선 끊김 처리 + - 데이터 2점 미만이면 빈 상태(`—`) 반환 + - 사용 예: B01_Dashboard 리소스 현황(CPU/메모리/디스크 30일 추이, X축=시간) + +--- + +## 3. 인덱스 기반 다국어 제어 (i18n Constraints) +* **텍스트 하드코딩 금지:** 라벨, 버튼 문구, 안내 메시지 등 모든 UI 문자열의 컴포넌트 내 직접 입력 절대 금지. +* **🚨 동시 수정 프로토콜 (선언 후 구현):** + 1. **선(先) 등록:** 신규 문구 필요 시, `ui_template_locale.ts` 최하단에 키와 언어 배열 `[한국어, 영어]` 우선 추가. + 2. **후(後) 참조:** 컴포넌트 내 `ui_locales.키값[현재언어인덱스]` 형태로만 호출. + * *제약 조건:* UI 수정 요청 시 다국어 파일 업데이트 코드 미제시 경우 가이드 위반(에러) 처리. + +--- + +## 4. JS/TS 코드 제어 및 상태 (Logic Constraints) +* **이벤트 핸들러 명명법:** `on[페이지명]_[기능명]_[액션]` 패턴 필수 준수. (예: `onB04_Surface_Calculate_Click`) +* **비동기 상태 제어:** API 호출 시 즉시 로딩 스피너(Overlay) 활성화, 통신 완료(성공/실패) 후 해제 로직 필수 포함. +* **1차 유효성 검사:** 백엔드 전송 전 빈 값 및 데이터 타입(숫자 범위 등) 프론트엔드 선 검증, 에러 시 입력창 하단 표기. + +```typescript +export const ui_locales = { + A01_Home_Title: ["반갑습니다", "Welcome"], + B04_wf1_Surface_Btn: ["지표면 분석 실행", "Run Surface Analysis"] +}; +``` + +--- + +## 5. 인증, 인가, 역할 및 라우팅 (Authentication, Authorization, Roles & Routing) + +### 5.1 세션 쿠키 기반 인증 +* **방식:** HttpOnly Secure 세션 쿠키 (localStorage 토큰 미사용) +* **API 통신:** 모든 API 요청에 `credentials: "include"` 설정으로 쿠키 자동 전송 +* **로그아웃:** `/auth/logout` API 호출 → 서버 세션 삭제 → 쿠키 자동 제거 +* **인증 갱신:** 로그인 시 `users.auth_expires_at = NOW() + 3개월` 자동 설정 + - 유효한 인증: `auth_expires_at > NOW()` → 바로 대시보드 이동 + - 만료된 인증: `auth_expires_at <= NOW()` → 재인증 모달 표시 + +### 5.1.1 역할 기반 대시보드 렌더링 +* **USER 역할:** + - 프로젝트 리스트 섹션 + - 회사 정보 섹션 (회사 생성/연결 팝업) + - 기본정보 & 보안 섹션 + +* **ADMIN 역할:** + - 프로젝트 리스트 섹션 (회사 전체 프로젝트) + - 회사 정보 섹션 + - 팀원 관리 섹션 + - 가입 요청 섹션 + - 기본정보 & 보안 섹션 + +* **SYSTEM_ADMIN 역할:** + - 리소스 현황 섹션 (CPU, MEM, DISK, 활성 사용자/프로젝트) + - 회사 관리 섹션 (전체 회사 리스트 + 추가/수정/삭제) + - 사용자 관리 섹션 (전체 사용자 + 역할 변경 + 회사 할당) + - 가입 요청 관리 섹션 (전체 가입 신청 + 승인/거절) + - 시스템 로그 섹션 (필터링 지원) + - 리소스 모니터링 그래프 (시계열 데이터) + - 기본정보 & 보안 섹션 + +### 5.2 라우팅 가드 +* **인증 확인:** `isAuthenticated()` 함수로 세션 유효성 검사 (PROTECTED_ROUTES 진입 전) +* **회사 연결 확인:** B02~B11 워크플로우 진입 시 `fetchDashboardMe()` 호출 → `company_id` + `status` 확인 + - `status` 확인: + - NO_COMPANY: B01_Dashboard로 강제 리다이렉트 (회사 연결 필요) + - PENDING: B01_Dashboard로 강제 리다이렉트 (승인 대기 중) + - ACTIVE: 워크플로우 진입 허용 + - `company_id` 없으면 B01_Dashboard로 리다이렉트 +* **역할 기반 라우팅:** + - SYSTEM_ADMIN: 모든 페이지 접근 가능 + - ADMIN: B01_Dashboard (관리 섹션) + B02~B11 워크플로우 접근 가능 + - USER: B01_Dashboard (사용자 섹션) + B02~B11 워크플로우 접근 가능 +* **상태 전이:** + - 회원가입 후 이메일 인증 완료: `users.status = 'NO_COMPANY'` (로그인 가능, 회사 미연결) + - 회사 생성: `users.status = 'ACTIVE'`, `company_id` 세팅, `role = 'ADMIN'`, `is_master = TRUE` + - 회사 참여 신청: `users.status = 'PENDING'` (관리자 승인 대기) + - 관리자 승인: `users.status = 'ACTIVE'`, `company_id` 세팅 + +### 5.3 대시보드 권한 기반 UI 제어 (B01_Dashboard) +* **권한 검증 헬퍼 필수:** `.agent/plan_dashboard_management.md` 섹션 9의 헬퍼 함수 참고 + - `canEditProject(user, project)` - 프로젝트 수정 권한 + - `canDeleteProject(user)` - 프로젝트 삭제 권한 (SYSTEM_ADMIN만) + - `canAddUser(user)` - 사용자 추가 권한 + - `canChangeRole(user, targetUser)` - 역할 변경 권한 (ADMIN: USER↔ADMIN만, SYSTEM_ADMIN 제외) + - `canDeleteUser(user, targetUser)` - 사용자 삭제 권한 (마지막 ADMIN 보호) + - `canManageAutomation(user, automation)` - 자동화 로직 관리 권한 + - `isLastAdmin(company, excludeUserId)` - 회사의 마지막 ADMIN 확인 + +* **UI 컴포넌트 구현:** 권한에 따라 버튼/필드 표시/비활성화 + - 프로젝트: 수정 모달, 삭제 확인 모달 (삭제는 SYSTEM_ADMIN만) + - 사용자: 추가 모달 (가입 계정 목록), 수정 모달, 역할변경 모달, 삭제 확인 모달 + - 자동화 로직: 생성/수정/삭제 모달 (ADMIN/SYSTEM_ADMIN만) + - 모든 삭제 모달에 경고 메시지 포함 (되돌릴 수 없음) + +* **다국어 반영:** 계획서 8장의 모든 키를 `ui_template_locale.ts`에 추가 후 컴포넌트에서 `L(키)` 사용 + - 모달 제목, 버튼 레이블, 확인 메시지, 오류 메시지 모두 다국어 처리 + - 하드코딩된 문구 절대 금지 \ No newline at end of file diff --git a/docs/raw/guidelines/migration_plan.md b/docs/raw/guidelines/migration_plan.md new file mode 100644 index 0000000..f0899d4 --- /dev/null +++ b/docs/raw/guidelines/migration_plan.md @@ -0,0 +1,278 @@ +# B03~B06 기능 마이그레이션 계획서 + +**갱신일:** 2026-07-05 +**상태:** 백엔드 마이그레이션 완료 — Stage 0~4 (B03~B06) 백엔드 이전 완료. 남은 항목은 프론트엔드(Vanilla TS) 재작성과 실제 DB 연동 검증. +**범위:** `B03_FileInput` ~ `B06_wf3_ProfileCross` +**DB:** MariaDB v10.6+ (aiomysql 드라이버, Raw SQL) + +**진척 요약:** +- Stage 0 (공통 기반): ✅ 완료 +- Stage 1 B03 (파일 입력): ✅ 백엔드 완료 +- Stage 2 B04 (지표면 분석): ✅ 백엔드 완료 (필터 4종 + 모델 5종 + 스무딩 + 등고선 + 파이프라인) +- Stage 3 B05 (경로 설계): ✅ 백엔드 완료 (Dijkstra + ridge-valley + skeleton) +- Stage 4 B06 (종횡단 생성): ✅ 백엔드 완료 (sampler + 종횡단 + Repository/Router) +- 공통: 전 페이지 DB 접근을 aiomysql Raw SQL로 통일, 순수 계산부는 실데이터로 검증 +- Stage 2~4 프론트엔드 폼/결과 UI: ✅ 완료 (B04~B06 UI_Page + Api_Fetch + CSS + locale, tsc 타입체크 통과) +- 남은 작업: B04~B06 **WebCAD 3D/차트 뷰어**, 실제 aislo_db 연동·구형 수치 비교 + +--- + +## 1. 확정 기준 + +- 기능 동작의 기준 원본은 `0_old/main.py`와 `0_old/utils/`이다. +- `0_old/backend/app/`은 이전 프로토타입 참고 자료이며 최종 동작 기준으로 사용하지 않는다. +- 신규 배치 구조는 `.agent/structure.md`를 따른다. 구형 파일 구조는 승계하지 않는다. +- 백엔드는 `.agent/backend.md`, 프론트엔드는 `.agent/frontend.md`를 따른다. +- 저장 구조 및 DB 경로 열은 `.agent/db_schema_simple.md`의 단계별 파일시스템 구조를 따른다. +- DB 스키마 작성·수정은 별도 담당 작업이다. 이 마이그레이션은 확정된 DB 계약만 `aiomysql`와 Raw SQL로 사용한다. +- 루트 `main.py`에는 페이지 라우터 등록만 추가한다. +- 구형 React/TSX UI는 복사하지 않고 현재 Vanilla TypeScript 구조와 공통 UI 템플릿에 맞게 재작성한다. + +--- + +## 2. 작업 원칙 + +### 2.1 함수 하나씩 이전 + +각 작업 단위는 다음 순서를 지킨다. + +1. 대상 구형 함수와 직접 의존성 확인 +2. 신규 페이지 폴더에 책임에 맞는 파일 하나 생성 +3. 함수 하나만 이전·수정 +4. 해당 함수 단위 테스트 또는 최소 실행 검증 +5. 포맷터·린터 실행 +6. 검증 완료 후 다음 함수 진행 + +한 번에 구형 모듈 전체를 복사하지 않는다. 구형 전역 경로, 동기식 파일 처리, 하드코딩 설정은 그대로 가져오지 않는다. + +### 2.2 파일 분리 + +- `*_Router.py`: FastAPI 엔드포인트와 응답 변환 +- `*_Schema.py`: Pydantic 요청·응답 검증 +- `*_Engine_*.py`: 페이지 고유 연산 +- `*_Repository.py`: `asyncpg` Raw SQL과 DB 경로 메타데이터 처리 +- `common_util/`: 둘 이상의 페이지가 실제로 공유하는 경로·원자적 파일 쓰기·기하 유틸만 배치 +- 단일 파일이 700줄에 도달하기 전에 기능별 파일 분할을 제안하고 승인 후 `structure.md`를 갱신한다. + +### 2.3 저장소 경계 + +```text +storage/{company_slug}/{user_slug}/{project_id}/ +├── B03_FileInput/ +├── B04_wf1_Surface/ +├── B05_wf2_Route/ +└── B06_wf3_ProfileCross/ +``` + +각 페이지는 자기 폴더만 직접 생성·수정한다. 상위 단계 변경 시 하위 결과를 임의 삭제하지 않고 `stale_from`을 갱신한다. + +--- + +## 3. 구형 기능 분석 결과 + +### 3.1 B03_FileInput + +구형 원본: + +- `0_old/main.py`: `check_sample`, `upload_files` +- 보조 참고: `0_old/backend/app/analyzer.py`의 파일 분석 함수 + +책임: + +- LAS/TIF/TFW/PRJ/DXF 업로드 검증 +- `B03_FileInput/input/{file_type}/` 저장 +- 파일 메타데이터 추출 및 `input_files` 기록 +- 업로드 완료 상태 반환 + +B04로 넘길 기능: + +- `process_pipeline` +- `run_ground_analysis` +- 포인트 필터링 및 지표면 모델 생성 + +### 3.2 B04_wf1_Surface + +구형 원본: + +- `0_old/main.py`: `process_pipeline`, `ensure_terrain_models`, 지표면·포인트 API +- `0_old/utils/structurizer.py` +- `filter_grid_min_z.py`, `filter_csf.py`, `filter_pmf.py`, `filter_ransac.py` +- `terrain_model_converter.py`, `surface_smoother.py`, `contour_extractor.py` + +책임: + +- LAS 구조화와 지면 필터 생성 +- 변환 포인트클라우드 저장 +- TIN/DTM/NURBS/implicit/meshfree 모델 생성 +- 스무딩, 미리보기, 등고선 생성 +- 지표면 모델 선택 확정 및 하위 단계 stale 전파 + +### 3.3 B05_wf2_Route + +구형 원본: + +- `0_old/main.py`: 경로점 CRUD, solve/result/confirm, stale 서명 처리 +- `0_old/utils/route_solver.py` +- `0_old/utils/route_solver_ridgevalley.py` +- `0_old/utils/terrain_skeleton.py` + +책임: + +- BP/EP/CP/AP/FP 입력 검증과 저장 +- Dijkstra 및 ridge-valley 경로 계산 +- 경사·곡선반경·회피/금지 구역 검증 +- 경로 결과 조회·확정 및 B06 stale 전파 + +### 3.4 B06_wf3_ProfileCross + +구형 원본: + +- `0_old/main.py`: sections generate/get/confirm 및 입력 서명 처리 +- `0_old/utils/surface_elevation_sampler.py` +- `0_old/utils/section_generator.py` + +책임: + +- 확정 경로와 확정 지표면 모델 검증 +- 종단 표고 프로필 생성 +- 지정 측점 간격의 횡단면 생성 +- 결과 조회·확정 및 재현성 서명 관리 + +--- + +## 4. 함수 단위 실행 순서 + +### Stage 0 — 공통 기반 + +- [x] `config_system.py`의 저장 경로에서 불필요한 `projects` 경로 제거 +- [x] 프로젝트 루트와 B03~B06 단계별 경로를 안전하게 만드는 공통 경로 함수 추가 +- [x] JSON 원자적 쓰기 함수 이전 +- [x] `workflow.json` 읽기 및 stale 필드 원자적 갱신 함수 이전 +- [x] 공통 함수별 테스트 작성 + +### Stage 1 — B03_FileInput + +- [x] `B03_FileInput_Schema.py`: 파일 종류·크기·확장자 검증 모델 +- [x] `B03_FileInput_Engine.py`: 안전한 파일명과 목적 경로 결정 함수 +- [x] `B03_FileInput_Engine.py`: 업로드 스트림 저장 함수 +- [x] `B03_FileInput_Engine_Analyze.py`: LAS 메타데이터 분석 함수 +- [x] `B03_FileInput_Engine_Analyze.py`: PRJ/TIF/TFW 메타데이터 분석 함수 +- [x] `B03_FileInput_Repository.py`: `input_files` 저장 함수 +- [x] `B03_FileInput_Router.py`: 업로드 엔드포인트 +- [x] B03 프론트 드롭존·목록·검증·로딩 UI를 공통 컴포넌트 기반으로 작성 +- [x] 업로드 통합 테스트 + +### Stage 2 — B04_wf1_Surface + +- [x] LAS 구조화 함수 이전 +- [x] grid-min-z 필터 함수 이전 및 검증 +- [x] CSF 필터 함수 이전 및 검증 +- [x] PMF 필터 함수 이전 및 검증 +- [x] RANSAC 필터 함수 이전 및 검증 +- [x] 지표면 모델 공통 컨텍스트 생성 함수 이전 (ModelContext + 메시 유틸) +- [x] TIN 생성 함수 이전 +- [x] DTM 생성 함수 이전 +- [x] NURBS 생성 함수 이전 +- [x] implicit 생성 함수 이전 +- [x] meshfree 생성 함수 이전 +- [x] DTM/TIN 스무딩 함수 이전 +- [x] 등고선 생성 함수 이전 +- [x] 미리보기·메타데이터·모델 확정 라우트 추가 (analyze/models 라우트 + 파이프라인 manifest) +- [x] `processed_point_cloud`, `surface_models`, `terrain_layers` Raw SQL 저장 함수 추가 (aiomysql) +- [x] B04 폼·모델 목록 UI를 Vanilla TypeScript로 재작성 (UI_Page + Api_Fetch + CSS + locale) +- [ ] B04 WebCAD 3D 뷰어(포인트클라우드/메시 렌더) 추가 +- [ ] 샘플 LAS 결과를 구형 출력과 비교 검증 + +### Stage 3 — B05_wf2_Route + +- [x] 경로점 Pydantic 모델 및 유효성 검사 이전 (Schema) +- [x] 경로점 저장·조회·초기화 함수 이전 (Repository) +- [x] 비용면 생성 및 캐시 함수 이전 (Solver) +- [x] Dijkstra 단일 구간 탐색 함수 이전 (Geometry) +- [x] 최적 경로 조립 함수 이전 (Solver solve_optimal_route) +- [x] 지형 skeleton 생성 함수 이전 (Skeleton, D8 흐름누적) +- [x] ridge-valley 탐색 함수 이전 (RidgeValley, 정속경사+fillet) +- [ ] 입력 서명·stale 판정 함수 이전 +- [x] 경로 확정 함수 이전 (Repository confirm_route + confirm 라우트) +- [x] `routes`, `route_points`, `route_statistics` Raw SQL 저장 함수 추가 (aiomysql) +- [x] B05 경로점 입력·제약조건·결과 메트릭 UI를 Vanilla TypeScript로 재작성 (UI_Page + Api_Fetch + CSS + locale) +- [ ] B05 경로 WebCAD 뷰어(노선 폴리라인 렌더/편집) 추가 +- [x] 기존 route solver 테스트를 신규 구조로 이관·통과 + +### Stage 4 — B06_wf3_ProfileCross + +- [x] 지표면 sampler 인터페이스 이전 (Engine_Sampler: SurfaceElevationSampler Protocol) +- [x] DTM grid sampler 함수 이전 (DtmGridSampler, 4-꼭짓점 valid 검증) +- [x] 보간 sampler 함수 이전 (InterpolatedSurfaceSampler + build_surface_sampler 5종) +- [x] 측점 배열 생성 함수 이전 (Engine_Section: _chainages) +- [x] 경로 보간 및 접선 계산 함수 이전 (_interpolate_xy, _tangent_at) +- [x] 종단·횡단 생성 함수 이전 (generate_sections) +- [ ] 입력 서명·중복 실행 방지 함수 이전 (delete_sections_for_route로 멱등 재실행만 구현) +- [x] 결과 조회·확정 라우트 추가 (sections/generate·get·confirm 라우트) +- [x] `longitudinal_sections`, `cross_sections` Raw SQL 저장 함수 추가 (aiomysql Repository) +- [x] B06 측점·횡단 옵션·결과 메트릭 UI를 Vanilla TypeScript로 재작성 (UI_Page + Api_Fetch + CSS + locale) +- [ ] B06 종단도·횡단 카드 WebCAD 뷰어(프로필 차트 렌더) 추가 +- [ ] 구형 section 결과와 수치 비교 검증 + +**B06 백엔드 구현 파일:** +- `B06_wf3_ProfileCross_Engine_Sampler.py` — 표고 sampler (Protocol + DTM/보간 5종) +- `B06_wf3_ProfileCross_Engine_Section.py` — 종횡단 생성 (측점/접선/횡단 샘플) +- `B06_wf3_ProfileCross_Engine.py` — 오케스트레이터 (경로 GeoJSON→종횡단→파일 저장) +- `B06_wf3_ProfileCross_Repository.py` — aiomysql Raw SQL (2 테이블) +- `B06_wf3_ProfileCross_Schema.py` / `_Router.py` — Pydantic + FastAPI 라우트 + +**검증 상태:** B04(DTM)→B05(경로 70.71m)→B06(종단면+횡단면 5건) end-to-end 파일 생성 확인. +DB 저장 함수는 FakeCursor 기반 문법 검증만 수행 (실제 aislo_db 연동은 나스 서버 준비 후). + +--- + +## 5. API 및 상태 원칙 + +- API 경로는 `/api/projects/{project_id}/...` 형태를 유지하되 페이지별 Router에서 선언한다. +- 모든 JSON 요청은 Pydantic 검증 후 Engine으로 전달한다. +- 긴 지형 연산은 이벤트 루프를 막지 않도록 실행 방식을 별도 검토한다. +- 오류 응답은 `{"status": "error", "message": "원인"}` 형식을 유지한다. +- 프론트 API 호출은 로딩 Overlay를 항상 시작·해제한다. +- UI 문자열은 `ui_template_locale.ts`에 먼저 등록한 뒤 참조한다. +- 상위 단계 재계산 시 하위 결과는 stale 처리하며 다른 페이지 폴더를 직접 삭제하지 않는다. + +--- + +## 6. 검증 체크리스트 + +각 함수 이전 후: + +- [ ] 구형 함수의 입력·출력 계약 비교 +- [ ] 하드코딩 설정 제거 및 `config_system.py` 연결 +- [ ] 신규 단계별 저장 경로 사용 확인 +- [ ] 경로 이탈 및 파일명 공격 방지 확인 +- [ ] 예외 처리와 표준 오류 응답 확인 +- [ ] Python: `ruff format`, `ruff check --fix` +- [ ] TypeScript/CSS: `npx prettier --write` +- [ ] 단위 테스트 실행 +- [ ] 관련 통합 테스트 실행 +- [ ] 단일 파일 700줄 미만 확인 + +단계 완료 후: + +- [ ] B03 업로드 파일과 DB 메타데이터 일치 +- [ ] B04 지표면 모델의 범위·점 수·표고 통계 비교 +- [ ] B05 경로 길이·경사·곡선반경·제약 위반 비교 +- [ ] B06 측점 수·종단 표고·횡단 좌표 비교 +- [ ] 다중 브라우저 polling 및 stale 전파 확인 + +--- + +## 7. 작업 경계와 보류 항목 + +- DB 테이블·FK·인덱스 정의 변경은 본 작업에서 수행하지 않는다. +- `.agent/db_schema_simple.md`는 DB 담당자의 작업 영역이므로 직접 수정하지 않는다. +- DB 스키마가 확정되지 않은 Repository 함수는 인터페이스만 계획하고 임의 열을 만들지 않는다. +- B07 이후 기능은 이번 마이그레이션 범위에서 제외한다. +- 구형 샘플 데이터는 검증 입력으로만 사용하고 신규 영구저장소로 자동 복사하지 않는다. + +--- + +## 8. 다음 실행 단위 + +첫 구현은 Stage 0의 저장 경로 함수 하나로 시작한다. 함수와 테스트를 검증한 뒤 다음 공통 함수로 이동한다. diff --git a/docs/raw/guidelines/structure.md b/docs/raw/guidelines/structure.md new file mode 100644 index 0000000..0155110 --- /dev/null +++ b/docs/raw/guidelines/structure.md @@ -0,0 +1,189 @@ +# 프로젝트 구조 명세서 (structure.md) + +## 1. 폴더 및 파일 명명 규칙 (Naming Convention) + +- **기본 원칙:** 프론트엔드(TypeScript)와 백엔드(Python) 파일을 수직 통합 관리 +- **페이지 폴더 명명:** 로그인 전은 `A01_`, 로그인 후는 `B01_` 형태 적용, 워크플로우는 `wf[번호]` 접두사를 사용 +- **시스템 폴더 명명:** 공통 유틸, DB, 리소스, 영구저장소 등 시스템 및 데이터 인프라 폴더는 접두사 ID 없이 명확한 영문명 분리 +- **파일 명명:** 반드시 `폴더명(페이지명)_기능_기타사양.확장자` 형태 작성 +- **공통 모듈:** 공통 유틸 코드는 `common_util` 폴더 내에 `common_util_기능.확장자` 형태 보관 + +--- + +## 2. 전체 디렉토리 트리 구조 + +```text +my-project/ +├── .agent/ +│ ├── agent.md +│ └── structure.md # 본 파일 +├── A00_Common/ # 프론트엔드 공통 인프라 (부트스트랩, 라우팅, 셸) +│ ├── main.ts # 앱 진입점 (스타일 주입 → 테마 복원 → 셸 → 라우터) +│ ├── router.ts # 해시 기반 SPA 라우터 + 인증 가드 + 지연 로딩 (A·B 전 라우트 등록) +│ ├── app_shell.ts # 공통 헤더/푸터 (로고, 네비, 언어·테마·로그인 토글) +│ ├── b_page_scaffold.ts # B 그룹 공통 스캐폴드 (헤더+준비중 안내 / 워크플로우 셸 래퍼) +│ └── vite-env.d.ts # Vite 클라이언트 타입 선언 +├── common_util/ # 공통 유틸리티 (공통 기능 코드) +│ ├── common_util_validate.ts # 프론트 1차 유효성 검사 (이메일/빈값/최소길이) +│ ├── common_util_auth.py # 비밀번호·OTP·세션 쿠키·권한 검증 +│ ├── common_util_auth_repository.py # 인증·조직·관리 Raw SQL 저장소 +│ ├── common_util_email.py # 비동기 SMTP 발송 및 재시도 +│ ├── common_util_email_templates.py # 인증·조직 알림 이메일 템플릿 +│ ├── common_util_string.ts +│ ├── common_util_storage.py # 프로젝트 및 워크플로우 단계별 저장 경로 +│ ├── common_util_json.py # JSON 원자적 저장 +│ ├── common_util_workflow.py # 공유 workflow.json 상태 처리 +│ ├── common_util_resource_monitor.py # 시스템 리소스 계측(2분 주기) + log/ 로그 + DB 기록 +│ └── common_util_format.py +├── db_management/ # DB 관리 폴더 (PostgreSQL 마이그레이션 및 스키마 관리) +│ ├── schema.sql +│ ├── migration_v1.py +│ └── 002_auth_security.sql # 기존 DB 로그인·보안 증분 마이그레이션 +├── resources/ # 웹앱 UI 구성 리소스 (사진, 회사 로고 등 에셋) +│ ├── logo.png +│ ├── banner.jpg +│ └── legal/ # 약관 및 정책 텍스트 (회원가입 UI에서 사용) +│ ├── terms_of_service.txt # 이용약관 +│ ├── privacy_policy.txt # 개인정보처리방침 +│ └── marketing_consent.txt # 마케팅 정보 수신 동의 +├── storage/ # 영구 저장소 (데이터 커서 및 대용량 파일 별도 저장 로직용) +│ └── [고객사명]/ +│ └── [사용자명]/ +│ └── [프로젝트ID]/ # 프로젝트별 내부 폴더/파일 자동 생성 (별도 폴더 ID 미사용) +├── log/ # 런타임 리소스 로그 (.gitignore, 1개월 롤링) +│ └── system_resources.log # CPU/메모리/디스크 계측 단일 파일 (2분 주기) +├── ui_template/ # 공통 UI 템플릿 및 테마 +│ ├── ui_template_theme.css # 글로벌 디자인 테마 및 CSS 변수 (라이트/다크) +│ ├── ui_template_locale.ts # 다국어 텍스트 배열 방식 관리 파일 +│ └── ui_template_elements.ts # 공통 컴포넌트 및 그룹 템플릿 정의 +├── templates/ # 보고서 출력용 마스터 양식 (DWG, Excel, PPT 등 기본 원본 템플릿 파일) +│ ├── template_report_form.xlsx +│ └── template_drawing_base.dwg +├── config/ # 프로그램 내부 제어 및 시스템 환경 설정 폴더 +│ ├── config_system.py # 백엔드 작동 제어 및 알고리즘 파라미터 +│ ├── config_db.py # 데이터베이스 연결 제어 설정 +│ ├── config_frontend.ts # 프론트엔드 제어 및 웹 환경 설정 +│ ├── package.json # Node.js 의존성 (npm/vite) +│ ├── tsconfig.json # TypeScript 설정 +│ └── vite.config.ts # Vite 빌드 설정 +├── A01_Home/ # 로그인 전 01: 홈 (소개, 소식, 사이트맵 등) +│ ├── A01_Home_UI_Page.ts +│ ├── A01_Home_UI_Style.css +│ └── A01_Home_Api_Fetch.py +├── A02_ProgDetail/ # 로그인 전 02: 프로그램 상세 (6단계 워크플로우 + 핵심 기술) +│ ├── A02_ProgDetail_UI_Page.ts +│ └── A02_ProgDetail_UI_Style.css +├── A03_CompDetail/ # 로그인 전 03: 회사 상세 (미션 + 핵심 가치 + 연락처) +│ ├── A03_CompDetail_UI_Page.ts +│ └── A03_CompDetail_UI_Style.css +├── A04_NewsHistory/ # 로그인 전 04: 최신소식 및 개선 이력 (타임라인) +│ ├── A04_NewsHistory_UI_Page.ts +│ └── A04_NewsHistory_UI_Style.css +├── A05_EduDetail/ # 로그인 전 05: 교육 상세 (과정 소개 + 문의 CTA) +│ ├── A05_EduDetail_UI_Page.ts +│ └── A05_EduDetail_UI_Style.css +├── A06_Login/ # 로그인 전 06: 로그인 (이메일 + 비밀번호 폼) +│ ├── A06_Login_UI_Auth_Page.ts # 세션 쿠키·OTP 로그인 UI (현재 사용 중) +│ ├── A06_Login_UI_Style.css +│ ├── A06_Login_Api_Fetch.ts +│ ├── A06_Login_Schema.py +│ └── A06_Login_Router.py +├── A07_Register/ # 로그인 전 07: 회원가입 (회사/이름/이메일/비밀번호 폼) +│ ├── A07_Register_UI_Page.ts +│ ├── A07_Register_UI_Auth_Page.ts # 조직 유형·약관·OTP 회원가입 UI +│ ├── A07_Register_UI_Style.css +│ ├── A07_Register_Api_Fetch.ts +│ ├── A07_Register_Schema.py +│ └── A07_Register_Router.py +├── A08_Support/ # 로그인 전 08: 기술지원 요청 (문의 폼 + textarea) +│ ├── A08_Support_UI_Page.ts +│ └── A08_Support_UI_Style.css +├── A09_Security/ # 로그인 전 09: 보안 및 약관 동의 (필수/선택 약관 확인) +│ ├── A09_Security_UI_Page.ts # 약관 동의 페이지 (이용약관/개인정보/마케팅/보안정책) +│ ├── A09_Security_UI_Style.css # A09 고유 약관 박스/체크박스 스타일 +│ ├── A09_Security_Api_Fetch.ts # 동의 내용 제출 API 클라이언트 +│ ├── A09_Security_Terms.ts # 약관 텍스트 데이터 (한/영 다국어) +│ ├── A09_Security_Schema.py # 조직·관리자 보안 요청 검증 +│ └── A09_Security_Router.py # 마스터·시스템 관리자·활동 로그 API +│ +│ # ※ B01·B02 본문 완성 / B03~B11 헤더·셸만 (본문은 0_old 참고 후 구체화) +├── B01_Dashboard/ # 로그인 후 01: 대시보드 (역할별 정보 표시) +│ ├── B01_Dashboard_UI_Page.ts # 역할별 섹션 조건부 렌더링 +│ ├── B01_Dashboard_UI_Modals.ts # 프로젝트, 사용자, 자동화 제어 모달 모음 +│ ├── B01_Dashboard_UI_Helper.ts # 역할별 접근 권한 확인 헬퍼 +│ ├── B01_Dashboard_UI_Resources.ts # CPU/Memory/Disk 리소스 렌더링 컴포넌트 +│ ├── B01_Dashboard_UI_Style.css # 프로젝트 테이블, 워크플로우, 팝업 스타일 +│ ├── B01_Dashboard_Api_Fetch.ts # dashboard API 클라이언트 +│ ├── B01_Dashboard_Schema.py # 요청/응답 Pydantic 검증 +│ ├── B01_Dashboard_Repository.py # Raw SQL 저장소 (사용자, 회사, 팀원, 가입 신청) +│ └── B01_Dashboard_Router.py # 역할별 API 엔드포인트 +├── B02_ProjRegister/ # 로그인 후 02: 프로젝트 등록 (기본정보 입력 폼) +│ ├── B02_ProjRegister_UI_Page.ts +│ └── B02_ProjRegister_UI_Style.css +├── B03_FileInput/ # 로그인 후 03: 파일 입력 (헤더+준비중 안내) +│ ├── B03_FileInput_UI_Page.ts +│ ├── B03_FileInput_UI_Style.css +│ ├── B03_FileInput_Api_Fetch.ts # 다중 파일 업로드 API 클라이언트 +│ ├── B03_FileInput_Schema.py # 업로드 파일 Pydantic 검증 +│ ├── B03_FileInput_Engine.py # 업로드 저장 경로·스트림 처리 +│ ├── B03_FileInput_Engine_Analyze.py # 원본 파일 메타데이터 분석 +│ ├── B03_FileInput_Repository.py # input_files asyncpg Raw SQL +│ └── B03_FileInput_Router.py # 다중 파일 업로드 API +├── B04_wf1_Surface/ # 로그인 후 04: 1차 workflow (지표면 모델 분석) +│ ├── B04_wf1_Surface_UI_Page.ts # 3단 레이아웃 (필터/표현 선택 폼 + 모델 목록) +│ ├── B04_wf1_Surface_UI_Style.css # B04 고유 폼 그룹/모델 카드 스타일 +│ ├── B04_wf1_Surface_Api_Fetch.ts # surface/analyze·models API 클라이언트 +│ ├── B04_wf1_Surface_Schema.py # 분석 요청/응답 Pydantic 검증 +│ ├── B04_wf1_Surface_Engine.py # 지표면 분석 오케스트레이터 +│ ├── B04_wf1_Surface_Engine_Structurize.py # LAS/LAZ 구조화 +│ ├── B04_wf1_Surface_Engine_Ground.py # 지면 분석 진입 +│ ├── B04_wf1_Surface_Engine_Filter_Grid.py # grid minimum-Z 필터 +│ ├── B04_wf1_Surface_Engine_Filter_CSF.py # CSF 필터 +│ ├── B04_wf1_Surface_Engine_Filter_PMF.py # PMF 필터 +│ ├── B04_wf1_Surface_Engine_Filter_RANSAC.py # RANSAC 필터 +│ ├── B04_wf1_Surface_Engine_ModelContext.py # 모델 공통 컨텍스트/메시 유틸 +│ ├── B04_wf1_Surface_Engine_ModelBuild.py # TIN/DTM/NURBS/implicit/meshfree 생성 +│ ├── B04_wf1_Surface_Engine_Smooth.py # DTM/TIN 스무딩 +│ ├── B04_wf1_Surface_Engine_Contour.py # 등고선 생성 +│ ├── B04_wf1_Surface_Engine_Pipeline.py # 파이프라인 manifest +│ ├── B04_wf1_Surface_Repository.py # processed_point_cloud/surface_models aiomysql Raw SQL +│ └── B04_wf1_Surface_Router.py # surface/analyze·models API +├── B05_wf2_Route/ # 로그인 후 05: 2차 workflow (경로설계) +│ ├── B05_wf2_Route_UI_Page.ts # 3단 레이아웃 (제어점/제약 폼 + 결과 메트릭) +│ ├── B05_wf2_Route_UI_Style.css # B05 고유 제어점 행/제약 그룹 스타일 +│ ├── B05_wf2_Route_Api_Fetch.ts # route/solve·confirm API 클라이언트 +│ ├── B05_wf2_Route_Schema.py # 경로 탐색 요청/응답 Pydantic 검증 +│ ├── B05_wf2_Route_Engine.py # 경로 설계 오케스트레이터 +│ ├── B05_wf2_Route_Engine_Geometry.py # Dijkstra 단일 구간 탐색 +│ ├── B05_wf2_Route_Engine_Solver.py # 비용면 생성 + 최적 경로 조립 +│ ├── B05_wf2_Route_Engine_Skeleton.py # 지형 skeleton (D8 흐름누적) +│ ├── B05_wf2_Route_Engine_RidgeValley.py # ridge-valley 탐색 +│ ├── B05_wf2_Route_Repository.py # routes/route_points/route_statistics aiomysql Raw SQL +│ └── B05_wf2_Route_Router.py # route/solve·confirm API +├── B06_wf3_ProfileCross/ # 로그인 후 06: 3차 workflow (종횡단 생성) +│ ├── B06_wf3_ProfileCross_UI_Page.ts # 3단 레이아웃 (측점/횡단 옵션 폼 + 결과 메트릭) +│ ├── B06_wf3_ProfileCross_UI_Style.css # B06 고유 옵션 그룹/결과 메트릭 스타일 +│ ├── B06_wf3_ProfileCross_Api_Fetch.ts # sections/generate·get·confirm API 클라이언트 +│ ├── B06_wf3_ProfileCross_Schema.py # 종횡단 생성 요청/응답 Pydantic 검증 +│ ├── B06_wf3_ProfileCross_Engine.py # 종횡단 생성 오케스트레이터 +│ ├── B06_wf3_ProfileCross_Engine_Sampler.py # 표고 sampler (Protocol + DTM/보간 5종) +│ ├── B06_wf3_ProfileCross_Engine_Section.py # 종횡단 생성 (측점/접선/횡단 샘플) +│ ├── B06_wf3_ProfileCross_Repository.py # longitudinal/cross_sections aiomysql Raw SQL +│ └── B06_wf3_ProfileCross_Router.py # sections/generate·get·confirm API +├── B07_wf4_DesignDetail/ # 로그인 후 07: 4차 workflow (상세설계) — 워크플로우 셸 +│ └── B07_wf4_DesignDetail_UI_Page.ts +├── B08_wf5_Quantity/ # 로그인 후 08: 5차 workflow (수량 산출) — 워크플로우 셸 +│ └── B08_wf5_Quantity_UI_Page.ts +├── B09_wf6_Estimation/ # 로그인 후 09: 6차 workflow (견적/문서) — 워크플로우 셸 +│ └── B09_wf6_Estimation_UI_Page.ts +├── B10_Payment/ # 로그인 후 10: 결재 페이지 (헤더+준비중 안내) +│ └── B10_Payment_UI_Page.ts +└── B11_Status/ # 로그인 후 11: 상태 출력 페이지 (헤더+준비중 안내) + └── B11_Status_UI_Page.ts +│ +├── main.py # FastAPI 애플리케이션 진입점 +├── requirements.txt # Python 의존성 (pip) +├── .env.example # 환경 변수 템플릿 +└── node_modules/ # Node.js 패키지 (.gitignore) + └── .build/ # Vite 빌드 결과 (.gitignore) +``` diff --git a/docs/raw/plans/plan_workflow_state_management.md b/docs/raw/plans/plan_workflow_state_management.md new file mode 100644 index 0000000..a8490ad --- /dev/null +++ b/docs/raw/plans/plan_workflow_state_management.md @@ -0,0 +1,207 @@ +# 워크플로우 단계별 상태 관리 재설계 계획서 + +**작성일:** 2026-07-10 +**상태:** 설계 제안 (코드는 다른 AI가 진행) +**범위:** 프로젝트 워크플로우(WF0 파일입력 ~ WF6 견적) 단계별 완료 상태의 DB 저장·조회·무효화(stale) 로직, 그리고 이를 근거로 한 대시보드/파일입력/WF1~WF6 공통 UI의 단계 활성화·페이지 이동 제어 + +--- + +## 1. 현재 구조 진단 (코드 조사 결과) + +### 1.1 상태값이 단일 문자열 하나로 관리됨 + +- `projects.status` — **VARCHAR(50) 단일 컬럼** ([001_create_schema.sql:187](../db_management/001_create_schema.sql#L187)) + - 값 예: `NEW` → `FILE_UPLOADED` → `WF1_ANALYZING` → `WF1_COMPLETE` → `WF2_COMPLETE` → ... → `DONE` + - **하나의 값만 존재** — "지금 어느 단계까지 왔는가"만 표현, "각 단계가 개별적으로 완료됐는가"는 표현 불가 + +- 이 단일 값을 대시보드가 `_stage_from_status()`로 **순서 추론** ([B01_Dashboard_Repository.py:20](../B01_Dashboard/B01_Dashboard_Repository.py#L20)) + ```python + order = [("FILE_UPLOADED", 1), ("WF1_COMPLETE", 2), ("WF2_COMPLETE", 3), ...] + # status 문자열에 토큰이 "포함"되면 그 stage로 간주 → 부분 문자열 매칭 + ``` + +### 1.2 이로 인한 실제 문제 (사용자 보고와 일치) + +1. **단계 독립성 없음**: `WF2_COMPLETE`가 되면 WF1 완료 정보는 문자열에 없고 "순서상 앞이니까 됐겠지"로만 추론. WF1을 다시 열어 재분석해도 그 사실을 status가 담지 못함. + +2. **역방향 재작업(stale) 로직 부재**: 사용자가 WF1으로 돌아가 파일/분석을 바꾸면 WF2~WF6 결과는 **무효**가 되어야 하는데, 이를 표시·차단하는 로직이 전혀 없음. status를 WF1로 되돌리면 이후 완료 이력이 통째로 사라짐(반대로 안 되돌리면 낡은 하위 단계가 열린 채 유지됨). + +3. **이원화된 죽은 설계**: `workflow.json`(`completed: []`, `stale_from`, `current_stage` 필드)이 프로젝트 생성 시 초기화되지만 ([B02_ProjRegister_Repository.py:31](../B02_ProjRegister/B02_ProjRegister_Repository.py#L31)), **실제 단계 판정에는 쓰이지 않음**. `projects.status`가 사실상 유일한 근거. 두 메커니즘이 공존하나 어느 쪽도 완전하지 않음. + +4. **상태 갱신처 분산**: `status` UPDATE가 여러 라우터에 흩어져 있음 + - [B03_FileInput_Router.py:158,210,240](../B03_FileInput/B03_FileInput_Router.py#L158) (`WF1_ANALYZING`/`WF1_COMPLETE`/`WF1_FAILED`) + - [B04_wf1_Surface_Router.py:160,199,217](../B04_wf1_Surface/B04_wf1_Surface_Router.py#L160) (동일 값 중복 세팅) + - **B03과 B04가 같은 WF1 상태를 각자 세팅** → 경쟁·불일치 위험 + +### 1.3 각 단계 산출물 테이블에는 이미 개별 status가 있음 (활용 가능) + +- `surface_models.status` (`PROCESSING`/`COMPLETE`/`FAILED`) ([001_create_schema.sql:258](../db_management/001_create_schema.sql#L258)) +- `processed_point_cloud.status`, `input_files.status` 등 +- **즉 "단계별 완료"의 근거 데이터는 이미 DB에 존재** — 이를 요약할 상위 레이어만 없음 + +--- + +## 2. 재설계 목표 + +| # | 목표 | 설명 | +|---|------|------| +| G1 | 단계별 독립 상태 | 각 WF(0~6)의 상태를 개별적으로 저장 (`not_started` / `in_progress` / `complete` / `failed` / `stale`) | +| G2 | 단일 진실 원천(SSOT) | 상태의 근거를 **DB 한 곳**으로 통일. `projects.status` 단일 문자열 추론 폐기, `workflow.json` 이원화 제거 | +| G3 | 역방향 재작업 무효화 | N단계 재실행 시 N+1~6 단계를 자동 `stale`로 전환 (결과는 보존하되 "낡음" 표시) | +| G4 | UI 단일 규칙 | 대시보드·파일입력·WF1~6 공통 레이아웃이 **같은 상태 API**를 보고 버튼 활성/비활성·이동 결정 | +| G5 | 재실행 시 사용자 입력 보존 | 재분석 시 이전에 사용자가 선택/입력한 파라미터를 재사용 (초기 실행과 달리 값이 이미 있음) | + +--- + +## 3. 제안 설계 + +### 3.1 데이터 모델 — `project_workflow_stages` 테이블 신규 (권장안) + +프로젝트당 워크플로우 단계별로 1행. `projects.status` 문자열 추론을 대체하는 SSOT. + +```sql +CREATE TABLE IF NOT EXISTS project_workflow_stages ( + id INT AUTO_INCREMENT PRIMARY KEY, + project_id CHAR(36) NOT NULL, + stage_no TINYINT NOT NULL, -- 0=파일입력, 1=WF1 ... 6=WF6 + stage_key VARCHAR(30) NOT NULL, -- 'FILE_INPUT','WF1_SURFACE',...,'WF6_ESTIMATION' + state ENUM('NOT_STARTED','IN_PROGRESS','COMPLETE','FAILED','STALE') + NOT NULL DEFAULT 'NOT_STARTED', + progress_percent TINYINT NOT NULL DEFAULT 0, + params JSON NULL, -- 해당 단계에서 사용자가 선택/입력한 값 (재실행 시 재사용, G5) + message VARCHAR(255) NULL, -- 진행/오류 메시지 + started_at TIMESTAMP NULL, + completed_at TIMESTAMP NULL, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + UNIQUE KEY uq_project_stage (project_id, stage_no), + INDEX idx_pws_project (project_id) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +``` + +- 프로젝트 생성 시 7행(stage 0~6)을 `NOT_STARTED`로 시드. +- `projects.status`는 **표시용 요약 캐시로 강등**(호환 유지)하거나 제거. 판정 근거는 이 테이블로 일원화. +- `workflow.json` 초기화 로직은 제거하거나 이 테이블과 동기화(권장: 제거하고 DB로 통일 — MariaDB가 SSOT). + +**대안(경량):** 신규 테이블 없이 `projects`에 `stage_states JSON` 컬럼 하나 추가하여 `{"0":"COMPLETE","1":"COMPLETE","2":"STALE",...}` 저장. 마이그레이션은 가볍지만 단계별 params/타임스탬프 확장성이 낮음. **권장은 3.1 테이블 방식** (각 단계 params·이력 필요하므로). + +### 3.2 상태 전이 규칙 + +``` +NOT_STARTED ──(실행 시작)──▶ IN_PROGRESS ──(성공)──▶ COMPLETE + │ + └──(실패)──▶ FAILED ──(재실행)──▶ IN_PROGRESS +COMPLETE ──(하위 단계 재작업으로 상위가 재실행됨)──▶ STALE ──(재실행)──▶ IN_PROGRESS +``` + +- **stale 전파 (G3):** stage N이 `IN_PROGRESS`로 전이될 때, stage N+1..6 중 `COMPLETE`인 것을 모두 `STALE`로 변경. + - `STALE`은 결과 파일/DB 행을 삭제하지 않음 — "낡음" 플래그만. 사용자가 해당 단계를 다시 실행하면 `COMPLETE`로 복귀. +- **진입 가능 규칙 (활성화):** stage N은 stage N-1이 `COMPLETE`일 때만 진입(이동) 가능. 단 파일입력(stage 0)은 항상 가능. + - `STALE`/`FAILED` 단계는 진입 가능하되(재작업 목적) 이후 단계로는 못 넘어감. + +### 3.3 상태 조회 API (SSOT 단일 엔드포인트) + +기존 분산된 status 대신 프로젝트 단위 통합 조회를 신설: + +``` +GET /api/projects/{project_id}/workflow-state +→ { + "project_id": "...", + "current_stage": 2, // 진입 가능한 최고 단계 + "stages": [ + {"stage_no":0,"stage_key":"FILE_INPUT","state":"COMPLETE","progress_percent":100}, + {"stage_no":1,"stage_key":"WF1_SURFACE","state":"COMPLETE","progress_percent":100}, + {"stage_no":2,"stage_key":"WF2_ROUTE","state":"IN_PROGRESS","progress_percent":40}, + {"stage_no":3,"stage_key":"WF3_...","state":"STALE","progress_percent":0}, + ... + ] +} +``` + +- 대시보드 프로젝트 목록 API도 이 요약(`current_stage` + 단계별 state 배열)을 포함하도록 확장. +- 기존 `GET /surface/status`(WF1 진행률)는 이 테이블의 stage 1 행을 읽어 반환하도록 내부만 교체(외부 계약 유지 → B03 폴링 호환). + +### 3.4 상태 갱신 지점 통일 + +단계별 상태 전이를 **공통 유틸 함수**로 통일하여 라우터 중복 제거: + +```python +# common_util/common_util_workflow_state.py (신규) +async def start_stage(conn, project_id, stage_no, params=None): ... # IN_PROGRESS + 하위 STALE 전파 +async def complete_stage(conn, project_id, stage_no): ... # COMPLETE + completed_at +async def fail_stage(conn, project_id, stage_no, message): ... # FAILED +async def get_workflow_state(conn, project_id) -> list[dict]: ... # 조회 +``` + +- B03/B04가 각자 하던 `WF1_ANALYZING`/`WF1_COMPLETE` UPDATE를 이 함수 호출로 대체. +- **WF1 상태의 이중 세팅 문제 해소:** 파일입력 완료 후 자동 WF1 분석 흐름에서 stage 0 `complete` → stage 1 `start`/`complete`가 한 경로로만 일어나도록 정리. + +### 3.5 재실행 시 사용자 입력 보존 (G5) + +- 각 stage 행의 `params JSON`에 해당 단계 실행 시 사용자가 고른 값을 저장 + - WF1: `{source_filters, methods, force, input_file_id}` + - WF2: `{algorithm, road_grade, min_radius, ...}` +- 사용자가 단계 재진입 시 UI는 `params`를 불러와 폼 기본값으로 채움 → 초기 실행과 달리 재계산이 즉시 가능. + +--- + +## 4. 프론트엔드 반영 + +### 4.1 공통 규칙 (대시보드 + 파일입력 + WF1~6 레이아웃) + +- 세 곳 모두 **`workflow-state` API 하나**를 근거로 사용 (G4). 개별 페이지가 자체 추론하지 않음. +- 버튼 활성화: `stage.state === 'COMPLETE'`인 다음 단계까지 이동 가능. `STALE`은 "재작업 필요" 배지로 표시하되 진입 허용. +- 대시보드 워크플로우 버튼([B01_Dashboard_UI_Page.ts:370](../B01_Dashboard/B01_Dashboard_UI_Page.ts#L370) `workflow()`)의 `enabled` 계산을 `stages` 배열 기반으로 교체. + +### 4.2 헤더 토글과 전역 헤더 구분 (혼동 방지 메모) + +- WF1~6 공통 레이아웃(`ui_template_workflow_layout`)의 헤더 숨김/표시 토글은 **그 페이지 내부 작업 헤더**에만 작용. 로그인/로그아웃/사용자명이 있는 **전역 상단 헤더(`app_shell.ts`)와는 별개**임. +- 코더 주의: 화면 확장 목적으로 헤더를 숨길 때 전역 헤더(`app-header`)를 건드리지 말 것. 두 헤더는 DOM/스타일이 분리돼 있어야 함. + +### 4.3 페이지 이동 시점 (이미 구현됨 — 유지) + +- 파일 업로드 → WF1 분석 완료 폴링 → 완료 후 B04 이동은 이미 올바르게 구현([B03_FileInput_UI_Page.ts:606-609](../B03_FileInput/B03_FileInput_UI_Page.ts#L606)). +- 재설계 후에도 이 시점을 유지하되, "완료" 판정을 `workflow-state`의 stage 1 == COMPLETE로 통일. + +--- + +## 5. 마이그레이션 & 호환 + +1. `project_workflow_stages` 테이블 생성 SQL을 `db_management/`에 신규 번호로 추가. +2. 기존 프로젝트 백필: 현재 `projects.status` 문자열을 해석해 각 프로젝트의 stage 0~N을 `COMPLETE`로, 나머지는 `NOT_STARTED`로 시드하는 1회성 스크립트. +3. `projects.status`는 당분간 요약 캐시로 유지(외부 참조 호환), 신규 판정은 테이블 기준. 안정화 후 제거 검토. +4. `workflow.json` 초기화 로직 제거(또는 테이블과 동기화). `common_util_workflow.py`의 `stale_from`은 새 stale 전파로 대체되므로 정리 대상. + +--- + +## 6. 구현 순서 (코더용) + +| Phase | 작업 | 파일(예상) | +|-------|------|-----------| +| 1 | 테이블 생성 SQL + 생성 시 7행 시드 | `db_management/00X_*.sql`, B02 생성 로직 | +| 2 | 상태 전이 공통 유틸 (start/complete/fail/get + stale 전파) | `common_util/common_util_workflow_state.py` | +| 3 | `GET /workflow-state` API + 대시보드 목록 API 확장 | B01, 신규 라우터 or 공통 | +| 4 | B03/B04 등 기존 status UPDATE를 공통 유틸 호출로 교체 | B03/B04 Router | +| 5 | 각 단계 실행 시 `params` 저장 + 재진입 시 폼 프리필 | 각 WF Router/UI | +| 6 | 프론트: 세 UI를 `workflow-state` 기반 활성화로 통일 | B01, B03, `ui_template_workflow_layout` | +| 7 | 기존 프로젝트 백필 스크립트 + `workflow.json` 정리 | migration | + +--- + +## 7. 검증 체크리스트 + +- [x] 신규 프로젝트: 모든 단계 `NOT_STARTED`, stage 0만 진입 가능 +- [x] 파일 업로드 후 WF1 자동 분석 → stage 0/1 `COMPLETE`, stage 2 진입 가능 +- [x] WF2 완료 후 WF1으로 돌아가 재분석 → stage 2~6이 `STALE`로 전환되는지 +- [x] `STALE` 단계 재실행 시 `COMPLETE` 복귀 + 결과 파일 보존 확인 +- [x] 대시보드/파일입력/WF 레이아웃 세 곳의 버튼 활성화가 동일 규칙으로 일치 +- [x] 재분석 시 이전 `params`가 폼에 프리필되는지 (G5) +- [x] WF1 상태가 B03·B04 두 곳에서 중복 세팅되지 않는지 (단일 경로) +- [x] 전역 헤더(로그인/로그아웃)가 WF 레이아웃 헤더 토글과 무관하게 항상 표시되는지 + +--- + +## 8. 미해결/확인 필요 사항 (코더 착수 전 결정) + +1. **`projects.status` 유지 vs 제거**: 당장은 요약 캐시로 유지 권장(대시보드 정렬·필터 등 기존 참조 호환). 완전 제거는 참조처 전수 조사 후. +2. **STALE 하위 결과 파일 처리**: 낡은 결과 파일을 즉시 삭제할지, 재실행 시 덮어쓸지. 권장: **보존 후 재실행 시 덮어쓰기**(사용자가 비교/복구 가능). +3. **stage_key 명칭**: `FILE_INPUT`, `WF1_SURFACE`, `WF2_ROUTE`, `WF3_PROFILE_CROSS`, `WF4_DESIGN_DETAIL`, `WF5_QUANTITY`, `WF6_ESTIMATION` 로 확정 제안 (B0N 폴더명과 정합). diff --git a/docs/raw/verification/2026-07-12_verify_add_phase4_role.md b/docs/raw/verification/2026-07-12_verify_add_phase4_role.md new file mode 100644 index 0000000..12718f6 --- /dev/null +++ b/docs/raw/verification/2026-07-12_verify_add_phase4_role.md @@ -0,0 +1,8 @@ +# 검증 보고서: 4단계 기타 작업자 역할 추가 검증 + +* **검증일**: 2026-07-12 +* **검증 대상 파일**: [AGENTS.md](file:///C:/Program_coding/%EC%9E%84%EB%8F%84%EC%84%A4%EA%B3%84%20%EB%B0%8F%20%EA%B2%AC%EC%A0%81%EC%9E%90%EB%8F%99%ED%99%94%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%20%EA%B0%9C%EB%B0%9C/AGENTS.md) +* **검증 결과**: + 1. `#### 4단계: 기타 작업자 (위키 관리 / 작업 보조)` 역할이 `AGENTS.md`에 성공적으로 기술되었습니다. + 2. 3중 역할 분담 협업 체계 다이어그램에도 `[4. 위키 관리]` 흐름이 정확히 명시되었습니다. + 3. 사용자가 요청한 세부 조건(인제스트/린트 시 `.agents/instructions.md` 참조, 위키 업데이트 시 `docs/wiki`로 이동하여 `graphify .` 실행)이 올바르게 반영된 것을 확인하였습니다. diff --git a/docs/wiki 관리 이유.md b/docs/wiki 관리 이유.md new file mode 100644 index 0000000..ebc1a36 --- /dev/null +++ b/docs/wiki 관리 이유.md @@ -0,0 +1,8 @@ +1. 나는 누구인가: 나는 임도설계 실무자이자 Aislo(라이다 기반 임도 설계·견적 자동화 웹앱) 프로젝트의 기획·설계자야. 코드를 직접 작성하거나 깊이 이해하지는 못하지만, 도메인 전문성을 바탕으로 결과물(프론트엔드 화면, 산출물)을 보고 검증할 수 있는 능력이 있고, 이를 바탕으로 AI 코드 어시스턴트들에게 방향성과 구체적 지시를 내리는 사람이야. + +2. 기록의 목적 : 내가 기록하는 목적은 바이브 코딩 할 때 AI 코드 어시스턴스들과 더 효율적은 소통을 하고 개발하고 싶어. 웹앱을 프론트엔드, 백엔드, DB, API 등을 구조화 및 연결하여 AI코드 어시스턴스가 더욱 쉽게 문서 전체를 찾는게 아니라. 효과적으로 관련 문서들만 찾게 도움을 주고 같은 실수나 배경 설명을 줄이기 위해 사용하려고해. 그리고 al 어시스턴트 에이전트도 계획서 작성 > 코드작업 > 계획서의 체크리스트 점검 > 코드 검증 > 검증보고서 > 계획서 업데이트를 함으로써 항상 계획를 업데이트 함으로써 주기적인 관리도 맡기고 싶어. + - 심화 배경: 현재 상위 `.agent` 폴더에 백엔드/프론트엔드/DB/폴더구조/계획서/검증보고서 등 5~10개의 md 파일로 관리 중인데, 개발이 진행될수록 이 문서들이 비대해져서 컨텍스트·토큰 낭비를 일으키고 있음. 그 결과 AI와의 작업 흐름이 자주 끊기고, 코딩 방향성이 반복적으로 틀어지는 문제가 재발하고 있음. 필요한 것은 더 많은 기록이 아니라, 문서를 비대해지지 않게 서로 연결하고 정리해서 여러 AI 코드 어시스턴트들에게 필요한 부분만 효율적으로 공유하는 것. + +3. 최종 결과 : 라이다 데이터를 활용하여 임도 설계에 대한 자동화하는 웹앱 프로그램을 개발하고 싶어. + - 위키의 주 독자: AI 코드 어시스턴트 자신 (코드 작성 전후로 읽는 용도). 흐름은 사용자와 대화 → AI가 계획서 작성/업데이트 → 계획서가 위키 내용을 참조 → AI가 위키를 효율적으로 추적하되 함수·변수 단위, DB 컬럼 정보까지 내려가서 확인 가능해야 함. + - 사용자 본인이 위키를 직접 다시 찾아볼 일은 거의 없음. 대신 6개월 후의 AI(또는 새 세션의 AI)와 팀원이 이 위키를 보고 "왜 이렇게 설계했는지, 어떤 함수/변수를 썼는지, DB에 뭐가 있는지"를 스스로 파악해서 개선 작업이나 인수인계에 활용하는 것이 1년 후 이상적인 모습. \ No newline at end of file diff --git a/docs/wiki/AGENTS.md b/docs/wiki/AGENTS.md new file mode 100644 index 0000000..9c293fd --- /dev/null +++ b/docs/wiki/AGENTS.md @@ -0,0 +1,20 @@ +# wiki/ 폴더 규칙 + +AI가 raw/의 원본을 읽고 편집·유지하는 산출물 계층. 자세한 운영 규칙(Ingest/Query/Lint, 위키 규칙 14가지)은 `docs/CLAUDE.md`의 Wiki Schema 섹션을 따른다. + +## 구조 +- `index.md` — 전체 카탈로그. 모든 질의는 여기서 시작한다. +- `log.md` — 연대기 로그. append-only. +- `pages/B0x_이름/` — 프로젝트의 실제 B01~B09 폴더와 1:1 대응하는 페이지 단위 폴더. 하위에 `frontend.md`, `backend.md`, `db.md`, `api.md`, `dependencies.md`를 필요한 것만 생성한다. +- `concepts/` — 여러 페이지가 함께 쓰는 공유 자원의 1차 정의처. DB 스키마, 인증/RBAC, 저장 경로 규칙, 공통 유틸(`common_util_*`), API 공통 엔드포인트, 공통 Pydantic 스키마, 외부 라이브러리 의존성, workflow 상태 관리 등. + +## 작성 규칙 +- 모든 페이지에 YAML frontmatter 포함. `status`는 `draft`/`stable`/`stale` 셋 중 하나만 사용 (draft=계획서만 반영, stable=검증보고서로 확인, stale=raw 갱신됐는데 미반영). +- **`pages/` 하위 파일에는 반드시 `page_id: B0x_이름`(또는 `A0x_이름`)을 frontmatter에 추가한다.** 파일명(`frontend.md` 등)만으로는 소속 페이지를 알 수 없으므로, 폴더 밖에서 봐도 식별 가능해야 한다. concepts 파일에는 해당 없음. +- 내부 참조는 `[[페이지명]]` 위키링크 형식. +- 새 페이지를 만들기 전에 기존 페이지를 업데이트할 수 있는지 먼저 확인한다. +- 소스 요약은 사실만, 해석·종합은 concepts 페이지에서 다룬다. +- 계획서와 검증보고서가 충돌하면 **검증보고서를 채택**한다 (실제 코드 상태에 더 가까운 소스). 계획서 내용은 지우지 않고 "계획 당시 의도"로 남긴다. +- **공유 자원(두 페이지 이상이 쓰는 테이블·함수·API·의존성 등)은 concepts에만 정의한다.** 페이지 쪽 파일(`db.md` 등)에는 용도 설명 + 위키링크만 남긴다. concepts 쪽에는 사용처(역참조) 목록을 직접 적어 유지한다. +- **함수·API·테이블 등 개별 항목은 `항목 | 위치(파일:줄번호) | 역할` 표 형식으로만 기록한다.** 서술문 금지 — grep 없이 바로 코드 위치를 찾을 수 있어야 한다. +- **페이지(파일) 하나는 100줄을 넘지 않는다.** 넘으면 하위 주제별로 즉시 분할하고 index.md를 갱신한다. diff --git a/docs/wiki/CLAUDE.md b/docs/wiki/CLAUDE.md new file mode 100644 index 0000000..9c293fd --- /dev/null +++ b/docs/wiki/CLAUDE.md @@ -0,0 +1,20 @@ +# wiki/ 폴더 규칙 + +AI가 raw/의 원본을 읽고 편집·유지하는 산출물 계층. 자세한 운영 규칙(Ingest/Query/Lint, 위키 규칙 14가지)은 `docs/CLAUDE.md`의 Wiki Schema 섹션을 따른다. + +## 구조 +- `index.md` — 전체 카탈로그. 모든 질의는 여기서 시작한다. +- `log.md` — 연대기 로그. append-only. +- `pages/B0x_이름/` — 프로젝트의 실제 B01~B09 폴더와 1:1 대응하는 페이지 단위 폴더. 하위에 `frontend.md`, `backend.md`, `db.md`, `api.md`, `dependencies.md`를 필요한 것만 생성한다. +- `concepts/` — 여러 페이지가 함께 쓰는 공유 자원의 1차 정의처. DB 스키마, 인증/RBAC, 저장 경로 규칙, 공통 유틸(`common_util_*`), API 공통 엔드포인트, 공통 Pydantic 스키마, 외부 라이브러리 의존성, workflow 상태 관리 등. + +## 작성 규칙 +- 모든 페이지에 YAML frontmatter 포함. `status`는 `draft`/`stable`/`stale` 셋 중 하나만 사용 (draft=계획서만 반영, stable=검증보고서로 확인, stale=raw 갱신됐는데 미반영). +- **`pages/` 하위 파일에는 반드시 `page_id: B0x_이름`(또는 `A0x_이름`)을 frontmatter에 추가한다.** 파일명(`frontend.md` 등)만으로는 소속 페이지를 알 수 없으므로, 폴더 밖에서 봐도 식별 가능해야 한다. concepts 파일에는 해당 없음. +- 내부 참조는 `[[페이지명]]` 위키링크 형식. +- 새 페이지를 만들기 전에 기존 페이지를 업데이트할 수 있는지 먼저 확인한다. +- 소스 요약은 사실만, 해석·종합은 concepts 페이지에서 다룬다. +- 계획서와 검증보고서가 충돌하면 **검증보고서를 채택**한다 (실제 코드 상태에 더 가까운 소스). 계획서 내용은 지우지 않고 "계획 당시 의도"로 남긴다. +- **공유 자원(두 페이지 이상이 쓰는 테이블·함수·API·의존성 등)은 concepts에만 정의한다.** 페이지 쪽 파일(`db.md` 등)에는 용도 설명 + 위키링크만 남긴다. concepts 쪽에는 사용처(역참조) 목록을 직접 적어 유지한다. +- **함수·API·테이블 등 개별 항목은 `항목 | 위치(파일:줄번호) | 역할` 표 형식으로만 기록한다.** 서술문 금지 — grep 없이 바로 코드 위치를 찾을 수 있어야 한다. +- **페이지(파일) 하나는 100줄을 넘지 않는다.** 넘으면 하위 주제별로 즉시 분할하고 index.md를 갱신한다. diff --git a/docs/wiki/concepts/a00_app_shell_framework.md b/docs/wiki/concepts/a00_app_shell_framework.md new file mode 100644 index 0000000..6b4dc8f --- /dev/null +++ b/docs/wiki/concepts/a00_app_shell_framework.md @@ -0,0 +1,86 @@ +--- +status: stable +related_pages: ["[[A01_Home/A01_frontend]]", "[[A02_ProgDetail/A02_frontend]]", "[[B01_Dashboard/B01_frontend]]", "[[B08_wf5_Quantity/B08_frontend]]"] +last_updated: 2026-07-12 +source: A00_Common 공유 프레임워크 소스 코드 +--- + +# A00_Common — App Shell Framework + +모든 페이지의 공통 스켈레톤. 헤더(로고/네비/언어·테마/인증버튼) + 콘텐츠 아울렛 + 푸터를 통합 관리. + +## 파일 구성 + +| 파일 | 역할 | +|---|---| +| `app_shell.ts` (284줄) | 헤더·푸터 렌더링, 테마·언어 토글, 인증 상태별 버튼 채우기 | +| `b_page_scaffold.ts` (163줄) | B 그룹(B03~B09) 페이지용 스캐폴드—"준비 중" 임시 페이지 래퍼, 워크플로우 셸 헬퍼 | +| `router.ts` (158줄) | SPA 라우터(해시 기반), 인증 가드, 지연 로딩 | + +## app_shell 구성요소 + +### 테마 & 언어 관리 +- `initThemeAndLang()` — localStorage 복원 (THEME_STORAGE_KEY, LANG_STORAGE_KEY) +- `onApp_Theme_Toggle_Click()` — light ↔ dark 전환 +- `onApp_Lang_Toggle_Click()` — 한국어 ↔ 영문 전환 + 현재 페이지 재렌더 + +### 헤더 구성 (64px 높이, sticky) +- **로고**: `BRAND_ICON_URL`(prog_icon.jpg) + 브랜드명("Aislo") +- **네비게이션**: 5개 링크 + - App_Nav_Program → A02_PROG_DETAIL + - App_Nav_Company → A03_COMP_DETAIL + - App_Nav_News → A04_NEWS_HISTORY + - App_Nav_Education → A05_EDU_DETAIL + - App_Nav_Support → A08_SUPPORT +- **우측 액션**: + - 언어 버튼 ("EN" / "한") + - 테마 버튼 ("☀" / "☾") + - 인증 버튼 (로그인/회원가입 또는 계정/로그아웃) + +### 인증 버튼 (비동기 fillAuthActions) +**미로그인 상태**: "로그인", "회원가입" +**로그인 상태**: 사용자명(또는 "내 계정"), "로그아웃" + +### 로그아웃 (onApp_Logout_Click) +- `A06_Login.logout()` 호출 → 세션 쿠키 제거 +- 오류 무시 후 홈(`A01_HOME`)으로 이동 + +### 푸터 +- 높이 56px +- 저작권 텍스트 (App_Footer_Copyright) + +## router 라우팅 테이블 + +| 라우트 | 렌더 함수 위치 | +|---|---| +| A01_HOME | A01_Home/A01_Home_UI_Page.ts | +| A02_PROG_DETAIL | A02_ProgDetail/A02_ProgDetail_UI_Page.ts | +| A03_COMP_DETAIL | A03_CompDetail/A03_CompDetail_UI_Page.ts | +| A04_NEWS_HISTORY | A04_NewsHistory/A04_NewsHistory_UI_Page.ts | +| A05_EDU_DETAIL | A05_EduDetail/A05_EduDetail_UI_Page.ts | +| A06_LOGIN | A06_Login/A06_Login_UI_Auth_Page.ts | +| A07_REGISTER | A07_Register/A07_Register_UI_Auth_Page.ts | +| A08_SUPPORT | A08_Support/A08_Support_UI_Page.ts | +| A09_SECURITY | A09_Security/A09_Security_UI_Page.ts | +| B01_ACCOUNT | B01_Dashboard/B01_Dashboard_UI_Page.ts | +| B02_PROJ_REGISTER | B02_ProjRegister/B02_ProjRegister_UI_Page.ts | +| B03_FILE_INPUT | B03_FileInput/B03_FileInput_UI_Page.ts | +| B04_WF1_SURFACE | B04_wf1_Surface/B04_wf1_Surface_UI_Page.ts | +| B05_WF2_ROUTE | B05_wf2_Route/B05_wf2_Route_UI_Page.ts | +| B06_WF3_PROFILE_CROSS | B06_wf3_ProfileCross/B06_wf3_ProfileCross_UI_Page.ts | +| B07_WF4_DESIGN_DETAIL | B07_wf4_DesignDetail/B07_wf4_DesignDetail_UI_Page.ts | +| B08_WF5_QUANTITY | B08_wf5_Quantity/B08_wf5_Quantity_UI_Page.ts | +| B09_WF6_ESTIMATION | B09_wf6_Estimation/B09_wf6_Estimation_UI_Page.ts | +| B10_PAYMENT | B10_Payment/B10_Payment_UI_Page.ts | +| B11_STATUS | B11_Status/B11_Status_UI_Page.ts | + +## 인증 가드 + +- **PROTECTED_ROUTES** (config_frontend.ts 정의): 토큰 없으면 A06_LOGIN으로 리다이렉트 +- **워크플로우 라우트** (B02~B11): 추가 검증 + - 사용자 없음 → A06_LOGIN으로 리다이렉트 + - company_id 미보유 & SYSTEM_ADMIN 아님 → B01_ACCOUNT로 리다이렉트 (회사 가입 강제) + +## 세부 스캐폴드·CSS·종속성 + +`b_page_scaffold`, CSS 주입, 공통 종속성, 전체 사용처는 [[a00_app_shell_framework_scaffold]]에 분리했다. diff --git a/docs/wiki/concepts/a00_app_shell_framework_scaffold.md b/docs/wiki/concepts/a00_app_shell_framework_scaffold.md new file mode 100644 index 0000000..1c9755b --- /dev/null +++ b/docs/wiki/concepts/a00_app_shell_framework_scaffold.md @@ -0,0 +1,37 @@ +--- +type: concept +status: stable +related_pages: ["[[a00_app_shell_framework]]", "[[B08_wf5_Quantity/B08_frontend]]", "[[B09_wf6_Estimation/B09_frontend]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 A00_Common 코드 및 페이지 인제스트 대조 (2026-07-12) +--- + +# A00_Common — 스캐폴드·CSS·종속성 + +## b_page_scaffold +| 항목 | 역할 | +|---|---| +| `renderPendingContent` | 비 workflow 페이지용 준비 중 블록 | +| `renderPendingWorkflow` | workflow 셸과 좌·우 준비 중 영역 | +| `workflowSteps()` | 7단계 workflow 라벨 배열 | + +## CSS 인젝션 +| 항목 | 역할 | +|---|---| +| `injectShellStyles` | 셸 스타일을 ``에 1회 주입 | +| `app-shell-style` | 헤더·아울렛·푸터 스타일 ID | +| theme 변수 | 헤더 64px·푸터 56px·아울렛 최소높이 | + +## 종속성 +| 항목 | 역할 | +|---|---| +| `ui_template_locale.ts` | 언어 상태·문자열 | +| `ui_template_elements.ts` | 버튼·workflow 셸 | +| `config_frontend.ts` | routes·theme·protected routes | +| `A06_Login_Api_Fetch.ts` | 세션 조회·로그아웃 | + +## 사용처 +| 페이지 | 역할 | +|---|---| +| A01~A09 | 공통 헤더·푸터·아울렛 | +| B01~B09 | 페이지별 workflow 셸·단계 내비게이션 | diff --git a/docs/wiki/concepts/api_common.md b/docs/wiki/concepts/api_common.md new file mode 100644 index 0000000..bf1359a --- /dev/null +++ b/docs/wiki/concepts/api_common.md @@ -0,0 +1,27 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_wf1_Surface/B04_backend]]"] +last_updated: 2026-07-12 +source: raw/plans/plan_workflow_state_management.md, raw/guidelines/backend.md + 실 코드 확인 2026-07-12 +--- + +# API 공통 (여러 페이지가 공유하는 엔드포인트) + +## 공통 오류 응답 포맷 (전 라우터) +```json +{"status": "error", "message": "원인"} +``` +→ [[schema_common]] + +## 워크플로우 상태 조회 +| 항목 | 위치 | 역할 | +|---|---|---| +| `GET /api/projects/{project_id}/workflow-state` | `B03_FileInput_Router.py:667` | 단일 프로젝트의 `current_stage`와 `stages[]` 조회 | +| `get_workflow_states_for_projects()` | `B01_Dashboard_Repository.py:83` | [[B01_Dashboard/B01_backend|B01_Dashboard]] 목록용 다중 프로젝트 상태 배치 조회 | + +상태 모델과 사용처: [[workflow_state]]. + +## 폴링 패턴 (legacy workflow.json 설계; 현재 구현은 workflow-state API 사용) +- 클라이언트가 3초마다 `GET /api/projects/{project_id}/workflow` 호출 +- 과거 설계의 stale 감지 UX 참고용이며, 실제 상태 조회는 [[workflow_state]] API를 사용한다. diff --git a/docs/wiki/concepts/auth_rbac.md b/docs/wiki/concepts/auth_rbac.md new file mode 100644 index 0000000..8ef5e82 --- /dev/null +++ b/docs/wiki/concepts/auth_rbac.md @@ -0,0 +1,69 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/backend.md, raw/guidelines/frontend.md, raw/guidelines/agent.md +--- + +# 인증 / RBAC + +## 세션 인증 (backend.md 6.3) +- 방식: Secure HttpOnly 세션 쿠키 (`session_id`, JWT 아님), `SameSite=Lax` +- 저장소: `sessions` 테이블 → [[db_schema/users_auth]] +- 유효시간: 활동 기준 4시간 또는 절대 12시간 중 먼저 도달하는 쪽 +- DB 풀: `autocommit=True` (세션 즉시 조회 가능하도록) +- 프론트: 모든 API 요청에 `credentials: "include"` (frontend.md 5.1) + +## OTP / 비밀번호 +- OTP 6자리, 5분 유효, 해시 저장(bcrypt/PBKDF2), 재시도 최대 3회(2s/4s/8s 백오프) +- 비밀번호 최소 8자, bcrypt(라운드≥12) 또는 PBKDF2, 평문 저장 절대 금지 +- 5회 연속 실패 시 계정 15분 잠금 + +## 사용자 상태 생명주기 +``` +PENDING_EMAIL → NO_COMPANY → (PENDING | ACTIVE) → (INACTIVE | REJECTED) +``` +| 상태 | 접근 가능 범위 | +|---|---| +| NO_COMPANY | 로그인 가능, B01만 (B02~B11 차단) | +| PENDING | 로그인 가능, B01만 (승인 대기) | +| ACTIVE | 전체 (B01 + B02~B11) | + +## 역할 (users.role) +| 역할 | 전체회사조회 | 역할변경 | 팀원관리 | 가입승인 | 프로젝트조회 범위 | +|---|---|---|---|---|---| +| SYSTEM_ADMIN | ✅ | ✅ | ✅ | ✅ | 전체 | +| ADMIN | ✗ | ✗ | ✅(자기회사) | ✅(자기회사) | 회사별 | +| USER | ✗ | ✗ | ✗ | ✗ | 회사별 | + +`is_master` 플래그: TRUE=회사 생성자/ADMIN(팀원 승인권), FALSE=일반 팀원 + +## 권한 검증 헬퍼 (B01_Dashboard) +| 항목 | 위치 | 역할 | +|---|---|---| +| `_can_edit_project()` | `B01_Dashboard_Router.py:79` | 역할·회사 기준 프로젝트 수정 권한 | +| `_can_manage_automation()` | `B01_Dashboard_Router.py:87` | USER 차단과 프로젝트 범위 검사 | +| `_can_edit_user()` | `B01_Dashboard_Router.py:93` | 사용자 수정 범위 검사 | +| `count_company_admins()` | `B01_Dashboard_Repository.py:584` | 마지막 ADMIN 삭제·강등 방지 | +| `canEditProject()` 외 5개 | `B01_Dashboard_UI_Helper.ts:3` | 프론트 표시 제어; 백엔드 권한을 대체하지 않음 | + +**원칙:** 백엔드가 모든 수정/삭제/역할변경 API에서 반드시 재검증 (프론트 UI는 표시 제어만, 신뢰 금지). 위반 시 403 `{"status":"error","message":"Access denied"}`. + +## 인증 갱신 +로그인 시 `users.auth_expires_at = NOW() + 3개월` 자동 연장. 만료 시 재인증 모달. + +## 라우팅 가드 (frontend.md 5.2) +B02~B11 진입 시 `fetchDashboardMe()` → `company_id`+`status` 확인 → NO_COMPANY/PENDING이면 B01로 강제 리다이렉트. + +## 사용처 (역참조) +- [[B01_Dashboard/B01_backend|B01_Dashboard]] — 권한 헬퍼 5종, RBAC 접근제어 +- [[A06_Login/A06_backend]] — 세션 발급/OTP 재인증, 상태 확인 +- [[A07_Register/A07_backend]] — 사용자 상태 생명주기(PENDING_EMAIL→NO_COMPANY) +- [[A09_Security/A09_backend]] — require_master/require_system_admin 권한 데코레이터 + +## ⚠️ 계획서-실코드 불일치 (A그룹 인제스트 발견) +이 페이지의 세션/OTP 정책은 **계획서 기준**(세션 12h/4h 만료, OTP 5분·재시도3회·5회실패 15분잠금)이나, +실 코드([[A06_Login/A06_backend]])는 `auth_expires_at = NOW()+3개월` 갱신·신규브라우저/주기 재인증 OTP·5회실패시 관리자 알림 메일 방식. +[[A09_Security/A09_frontend]] 약관 텍스트도 계획서 기준(12h/4h)으로 표기됨. +→ 규칙6(실 코드 우선)에 따라 실 정책 검증 후 이 페이지 갱신 필요. 계획 당시 의도로 위 내용은 보존. diff --git a/docs/wiki/concepts/common_util.md b/docs/wiki/concepts/common_util.md new file mode 100644 index 0000000..52b7fd8 --- /dev/null +++ b/docs/wiki/concepts/common_util.md @@ -0,0 +1,35 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_wf1_Surface/B04_backend]]", "[[B05_wf2_Route/B05_backend]]", "[[B06_wf3_ProfileCross/B06_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/structure.md, raw/guidelines/backend.md +--- + +# 공통 유틸 (common_util/) + +> 둘 이상의 페이지가 실제로 공유하는 경로·원자적 파일쓰기·기하 유틸만 이 폴더에 배치 (migration_plan.md 2.2) + +| 파일 | 역할 | 사용처 | +|---|---|---| +| `common_util_validate.ts` | 프론트 1차 유효성 검사 (이메일/빈값/최소길이) | 전 페이지 | +| `common_util_auth.py` | 비밀번호·OTP·세션 쿠키·권한 검증 | 전 페이지 → [[auth_rbac]] | +| `common_util_auth_repository.py` | 인증·조직·관리 Raw SQL 저장소 | 인증 관련 | +| `common_util_email.py` | 비동기 SMTP 발송+재시도(최대3회) | OTP/승인 알림 | +| `common_util_email_templates.py` | 인증·조직 알림 이메일 템플릿 | common_util_email.py | +| `common_util_string.ts` | 문자열 유틸 | 미상세 | +| `common_util_storage.py` | 프로젝트·워크플로우 단계별 저장 경로 | → [[storage_paths]] | +| `common_util_json.py` | JSON 원자적 저장 | workflow.json 등 | +| `common_util_workflow.py` | 공유 workflow.json 상태 처리 | ⚠️ [[workflow_state]] 재설계로 대체/정리 예정 | +| `common_util_resource_monitor.py` | 시스템 리소스 계측(2분 주기) + log + DB 기록 | `sample_resources_loop()` → [[B01_Dashboard/B01_backend|B01_Dashboard]] | +| `common_util_format.py` | 포맷 유틸 | 미상세 | + +## 이메일 발송 (common_util_email.py) +- 개발: Google Gmail SMTP / 상용: Google Workspace 또는 AWS SES +- 발송 유형: OTP, 가입확인, 팀원승인요청(ADMIN), 승인/거부결과, 회사참여신청(SYSTEM_ADMIN), 인증갱신알림 + +## 리소스 모니터링 (common_util_resource_monitor.py) +- `main.py` lifespan에서 `asyncio.create_task` 등록/취소 +- 계측: `psutil.cpu_percent`, `psutil.virtual_memory().percent`, `shutil.disk_usage` +- 이중 기록: `system_resources` 테이블 (DB) + `log/system_resources.log` (탭 구분 1줄, `.gitignore`) +- 30일 롤링 삭제 (DB `DELETE`, 로그파일 오래된 줄 제거) diff --git a/docs/wiki/concepts/db_schema/files_surface.md b/docs/wiki/concepts/db_schema/files_surface.md new file mode 100644 index 0000000..67fa16b --- /dev/null +++ b/docs/wiki/concepts/db_schema/files_surface.md @@ -0,0 +1,95 @@ +--- +type: concept +status: stable +related_pages: ["[[B03_FileInput/B03_backend]]", "[[B04_wf1_Surface/B04_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md +--- + +# DB: 파일/지표면분석 테이블 + +← [[overview]] + +## upload_sessions (업로드 세션) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `varchar(36)` | NO | PRI | 세션 UUID | +| `project_id` | `varchar(36)` | NO | MUL | FK→projects.id | +| `original_filename` | `varchar(255)` | NO | | 원본 파일명 | +| `file_size_bytes` / `chunk_size_bytes` | `bigint(20)` | NO | | 파일크기 / 청크크기 | +| `total_chunks` / `completed_chunks` | `int(11)` | - | | 전체 청크수 / 완료 청크수 | +| `status` | `enum('PENDING','IN_PROGRESS','COMPLETED','FAILED')` | YES | MUL | `PENDING` | +| `created_at` / `updated_at` | `timestamp` | YES | | 생성 / 최종수정 일시 | + +## upload_chunks (업로드 청크 데이터) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `session_id` | `varchar(36)` | NO | MUL | FK→upload_sessions.id | +| `chunk_index` | `int(11)` | NO | | 청크 인덱스 (0, 1, 2...) | +| `chunk_hash` | `varchar(64)` | YES | | 청크 검증용 체크섬 | +| `size_bytes` | `bigint(20)` | NO | | 청크 용량 | +| `stored_at` | `varchar(255)` | YES | | 임시 파일 저장 경로 | +| `completed_at` | `timestamp` | YES | MUL | 완료 일시 | + +## input_files (입력 원본 파일) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `file_type` | `varchar(50)` | YES | | `las`/`tif`/`prj`/`tfw`/`dxf` 등 | +| `original_filename` / `raw_file_path` | `varchar` | NO | | 파일명 / storage 상대경로 | +| `file_size_mb` | `float` | YES | | 파일 크기 (MB) | +| `upload_by` / `upload_at` | - | - | MUL | 업로드 유저 FK / 일시 | +| `crs_epsg` | `int(11)` | YES | | EPSG 좌표계 정보 | +| `metadata` | `longtext` | YES | | 헤더/포인트수 등 분석 JSON | +| `status` | `varchar(50)` | YES | | `UPLOADED` ➡️ `PROCESSED` ➡️ `ARCHIVED` | + +## processed_point_cloud (필터/변환 포인트클라우드) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `input_file_id` / `project_id` | - | NO | MUL | FK→input_files / projects | +| `process_type` | `varchar(50)` | YES | | 변환 필터 분류 | +| `processed_file_path` / `converted_file_path` | `varchar` | YES | | 저장 경로 / PLY/LAZ 경로 | +| `converted_format` | `varchar(50)` | YES | | 변환 포맷 | +| `point_count` | `int(11)` | YES | | 포인트 개수 | +| `min_z` / `max_z` / `mean_z` | `float` | YES | | 고도 최저 / 최고 / 평균 | +| `x_min` ~ `y_max` | `float` | YES | | X/Y 좌표 바운딩 박스 범위 | +| `density_per_sqm` | `float` | YES | | ㎡당 점 밀도 | +| `classification_summary` | `longtext` | YES | | ground/unclassified 통계 | +| `processing_params` | `longtext` | YES | | 분석 파라미터 JSON | +| `processed_at` / `status` | - | - | | 변환 일시 / `PROCESSING`\|`COMPLETE`\|`FAILED` | + +## surface_models (지표면 모델 및 등고선) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `model_type` | `varchar(50)` | YES | | `dem_grid`/`tin`/`mesh`/`contour` | +| `source_file_id` / `processed_cloud_id` | `int(11)` | YES | MUL | FK→input_files / processed | +| `status` | `varchar(50)` | YES | | `PROCESSING` ➡️ `COMPLETE` / `FAILED` | +| `crs_epsg` / `resolution_m` | - | YES | | EPSG 좌표 / DEM 격자 해상도 | +| `model_file_path` | `varchar(500)` | YES | | 스토리지 상대 경로 | +| `generation_params` | `longtext` | YES | | 격자화 알고리즘 인자 JSON | +| `created_at` / `completed_at` | `timestamp` | - | | 생성 / 완료 일시 | + +## terrain_layers (지형 레이어) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `surface_model_id` | `int(11)` | NO | MUL | FK→surface_models.id | +| `layer_name` | `varchar(100)` | YES | | 레이어 영문/한글 식별자 | +| `geometry_type` | `varchar(50)` | YES | | `POINTCLOUD`/`GRID`/`MESH`/`CONTOUR` | +| `layer_file_path` | `varchar(500)` | YES | | 개별 레이어 실 파일 경로 | +| `file_format` / `file_size_mb` | - | YES | | 포맷 (ply, tfw, las 등) / 크기 | +| `statistics` | `longtext` | YES | | 통계 수치 JSON | +| `created_at` | `timestamp` | NO | | 생성 일시 | + +## input_files.status 값 +`UPLOADED → PROCESSED → ARCHIVED` + +## surface_models.status / processed_point_cloud.status 값 +`PROCESSING → COMPLETE / FAILED` + +관련 함수 위치 → [[B04_wf1_Surface/B04_db]], 사용 라이브러리 → [[dependencies]] diff --git a/docs/wiki/concepts/db_schema/logs_monitoring.md b/docs/wiki/concepts/db_schema/logs_monitoring.md new file mode 100644 index 0000000..571f9f0 --- /dev/null +++ b/docs/wiki/concepts/db_schema/logs_monitoring.md @@ -0,0 +1,102 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md, raw/guidelines/backend.md +--- + +# DB: 로그/모니터링 테이블 + +← [[overview]] + +## login_logs (로그인 시도 로그) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `bigint(20)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | YES | MUL | FK→users.id | +| `email` | `varchar(255)` | NO | | | +| `status` | `enum('SUCCESS','FAILURE')` | NO | | | +| `failure_reason` / `user_agent` | `varchar(100)` / `text` | YES | | | +| `login_at` | `timestamp` | NO | MUL | `current_timestamp()` | + +## activity_logs (사용자 활동 로그) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `bigint(20)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | NO | MUL | FK→users.id | +| `action_type` | `varchar(100)` | NO | | 행위 종류 | +| `action_at` | `timestamp` | NO | | `current_timestamp()` | +| `resource_id` / `status` | `varchar(255)` / `enum` | - | | 리소스 ID / SUCCESS\|FAILURE | +| `details` | `longtext` | YES | | JSON 상세 데이터 | + +## audit_logs (감사 로그) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | YES | MUL | FK→users.id | +| `action` / `entity_type` | `varchar(100)` | YES | | CRUD/EXPORT/DOWNLOAD 등 | +| `entity_id` | `varchar(36)` | YES | | 대상 UUID 등 | +| `timestamp` / `ip_address` | `timestamp` / `varchar(45)` | - | | 발생시각 / IP 주소 | +| `details` | `longtext` | YES | | JSON 상세 | + +## system_audit_logs (프로젝트/조직 변경 감사 로그) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | NO | MUL | FK→users.id (행위자) | +| `action` / `resource_type` | `varchar(50)` | - | | PROJECT_CREATE 등 / 종류 | +| `resource_id` | `int(11)` | YES | | | +| `timestamp` | `timestamp` | YES | MUL | `current_timestamp()` | +| `ip_address` / `user_agent` | `varchar(50)` / `text` | YES | | IP 주소 / 브라우저 에이전트 | + +## system_admin_logs (시스템 관리자 행위 로그) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `bigint(20)` | NO | PRI | `auto_increment` | +| `admin_user_id` | `int(11)` | NO | MUL | FK→users.id (관리자 ID) | +| `action_type` / `target_id` | `varchar(100)` / `varchar(255)`| - | | 변경종류(USER_STATUS) / 대상 ID | +| `action_at` | `timestamp` | NO | | `current_timestamp()` | +| `details` | `longtext` | YES | | JSON 형태의 변경 상세 | + +## system_resources (시스템 자원 계측) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `timestamp` | `timestamp` | YES | MUL | `current_timestamp()` | +| `cpu_usage_percent` / `memory_usage_percent` | `float` | YES | | | +| `disk_usage_percent` / `total_storage_mb` | `float` | - | | 디스크사용률 / 전체 스토리지 용량 | +| `active_user_count` / `active_project_count` | `int(11)` | NO | | 활성 사용자 / 프로젝트 수 | + +## support_requests (기술 지원 요청) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `company_id` | `int(11)` | YES | MUL | FK→companies.id | +| `company_name` / `user_name` | `varchar(255)` | - | | 회사명 / 작성자명 | +| `user_email` / `user_phone` | `varchar(255)` / `varchar(30)` | - | | 이메일 / 전화번호 | +| `subject` / `message` | `varchar(255)` / `text` | NO | | 제목 / 문의 메시지 본문 | +| `status` | `enum('NEW','REVIEWED','RESOLVED','DELETED')` | NO | MUL | `NEW` | +| `reviewed_by` | `int(11)` | YES | MUL | FK→users.id (검토자) | +| `created_at` / `reviewed_at` / `review_notes` | - | - | | 접수 / 검토일시 / 메모 | + +## change_logs (설계 변경 이력) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | | FK→projects.id | +| `changed_by` | `int(11)` | YES | MUL | FK→users.id (수정자) | +| `changed_at` | `timestamp` | NO | | `current_timestamp()` | +| `entity_type` / `entity_id` | `varchar(100)` / `int(11)` | YES | | 대상엔티티(routes 등) / 대상 PK | +| `old_value` / `new_value` | `longtext` | YES | | 변경 전 / 후 JSON 스냅샷 | +| `reason` | `varchar(255)` | YES | | 변경 사유 | + +**사용처:** [[B01_Dashboard/B01_backend|B01_Dashboard]] (SYSTEM_ADMIN 리소스 현황·시스템 로그 섹션), [[A08_Support/A08_backend|A08_Support]] (support_requests INSERT) + +## system_audit_logs — 사용처 (B01, B02) +- **프로젝트 생성**: `B02_ProjRegister_Repository.py:92` (`PROJECT_CREATE` 기록 ➡️ [[B02_ProjRegister/B02_backend]]) +- **기타 관리 행위**: `B01_Dashboard_Repository.py:245,265` (수정·삭제), `:336,367` (회사 생성), `:609` (감사 로그 조회), `:758,779` (자동화 제어) + +## 리소스 API (SYSTEM_ADMIN 전용) +`GET /api/dashboard/admin/resources?days=30` +- 실시간 계측(`current`), 30일 다운샘플링 시계열 조회(`history`, ~4MB ➡️ ~55KB 압축), 활성 지표(`stats`) 제공. diff --git a/docs/wiki/concepts/db_schema/overview.md b/docs/wiki/concepts/db_schema/overview.md new file mode 100644 index 0000000..d871c97 --- /dev/null +++ b/docs/wiki/concepts/db_schema/overview.md @@ -0,0 +1,64 @@ +--- +type: concept +status: stable +related_pages: [] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md, raw/guidelines/agent.md +--- + +# DB 스키마 개요 + +**DB명:** `aislo_db` / MariaDB v10.6+ / utf8mb4_unicode_ci / 드라이버 aiomysql + +> ✅ **모순 해결 (2026-07-12, 실 DB 직접 조회 `SHOW TABLES`로 검증):** 실제 운영 DB는 **34개 테이블**. `db_schema.md`(34개)가 정확했고 `agent.md`의 18개/23개는 갱신 안 된 값 — agent.md 쪽 오기로 판정. +> +> **raw 문서에 없던 실제 테이블 2개 발견:** +> - `project_workflow_stages` — [[../workflow_state]] 설계가 **이미 구현되어 실 DB에 존재**함 (컬럼 구성이 계획서와 정확히 일치). status를 draft→stable로 갱신함. +> - `system_admin_logs` — 시스템 관리자(SYSTEM_ADMIN)가 회원/조직 상태(`status`) 등을 변경할 때 감사 이력을 INSERT하는 Write-Only 성격의 테이블 ➡️ [[logs_monitoring]]. +> +> ⚠️ **미확정/미연동 테이블 격리 규칙**: +> - 분석 중이거나 소스코드와의 구체적인 연결고리(백엔드/프론트엔드 실사용처)가 아직 확정되지 않은 테이블이 신규 추가될 경우, 상위 공식 그룹 파일에 포함하지 않고 [[unconfirmed/README|미확정 폴더(unconfirmed/)]] 내에 개별 `[테이블명].md` 마크다운 파일로 저장하여 격리 관리합니다. + +## 테이블 그룹 (9개) + +| 그룹 | 테이블 수 | 상세 페이지 | +|---|---|---| +| 사용자/인증/조직 (핵심) | 7 | [[users_auth]] | +| 로그/모니터링 | 8 | [[logs_monitoring]] | +| 프로젝트 관리 | 3 | [[projects]] | +| 파일/지표면분석 | 6 | [[files_surface]] | +| 경로/종횡단 | 5 | [[route_profile]] | +| 구조물/수량/산출물 | 4 | [[structure_output]] | +| 미확정/연결 대기 테이블 | 0 | [[unconfirmed/README]] | + +## 파일 경로 추적 컬럼 (DB에 경로만 기록, 실 파일은 파일시스템) + +| 테이블.컬럼 | 용도 | 사용 단계 | +|---|---|---| +| `input_files.raw_file_path` | 원본 입력 파일 | B03 | +| `processed_point_cloud.converted_file_path` | 변환된 포인트클라우드 | B04 | +| `surface_models.model_file_path` | 지표면 모델 | B04 | +| `routes.route_data_path` | 경로 데이터(GeoJSON) | B05 | +| `longitudinal_sections.longitudinal_file_path` | 종단면 | B06 | +| `cross_sections.cross_section_file_path` | 횡단면 | B06 | +| `structures.structure_data_path` | 구조물 배치 | B07 | +| `quantity_items.quantity_data_path` | 수량 항목 | B08 | +| `outputs.outputs_directory_path` | 산출물 폴더 | B09 | +| `output_files.output_file_path` | 개별 산출 파일 | B09 | + +상세 경로 규칙 → [[storage_paths]] + +## 설계 원칙 +- DB에는 "어디에 무엇이 있는가"의 메타정보만 저장. 실제 대용량 파일(LAS/PLY/TIF/DXF/Excel/PDF/JSON)은 파일시스템. +- 공간 기하 데이터(GEOMETRY 타입 미지원) → JSON(GeoJSON 형식)으로 저장, 애플리케이션(Shapely/Geopandas)에서 파싱. +- 모든 주요 테이블에 soft delete(`deleted_at`) 적용. + +## 테이블 관계 (핵심 흐름) +``` +users ─company_id→ companies +projects ─user_id/company_id→ users/companies + └→ input_files → processed_point_cloud → surface_models → terrain_layers + └→ routes → route_points/route_statistics/longitudinal_sections/cross_sections → structures + └→ quantity_items + └→ outputs → output_files +``` diff --git a/docs/wiki/concepts/db_schema/projects.md b/docs/wiki/concepts/db_schema/projects.md new file mode 100644 index 0000000..6ef1efc --- /dev/null +++ b/docs/wiki/concepts/db_schema/projects.md @@ -0,0 +1,56 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B02_ProjRegister/B02_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md, raw/plans/plan_workflow_state_management.md +--- + +# DB: 프로젝트 관리 테이블 + +← [[overview]] + +## projects (프로젝트) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `char(36)` | NO | PRI | 프로젝트 UUID | +| `user_id` / `company_id` | `int(11)` | NO | MUL | FK→users/companies | +| `name` | `varchar(255)` | NO | | 프로젝트명 | +| `region` / `road_type` | `varchar(100)` | YES | | 지역 / 임도종류 | +| `project_year` | `int(11)` | YES | | 사업년도 | +| `estimated_length_m` | `float` | YES | | 계획 연장(m) | +| `memo` | `text` | YES | | 메모 | +| `status` | `varchar(50)` | YES | | `NEW` (호환용 캐시) | +| `crs_epsg` | `int(11)` | YES | | `5178` (좌표계 EPSG) | +| `storage_path` | `varchar(500)` | YES | | 상대경로 ➡️ [[storage_paths]] | +| `created_at` / `updated_at` / `deleted_at` | `timestamp` | - | | 생성 / 수정 / soft-delete | + +**사용처:** [[B01_Dashboard/B01_backend|B01_Dashboard]] (목록), [[B02_ProjRegister/B02_backend|B02_ProjRegister]] (생성) + +## project_versions (프로젝트 버전 스냅샷) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `version_num` | `int(11)` | NO | | 버전 번호 | +| `status` | `varchar(50)` | YES | | 버전 상태 | +| `data` | `longtext` | YES | | 설계 스냅샷 JSON 데이터 | +| `snapshot_at` / `created_at` | `timestamp` | NO | | 생성일시 | + +## project_automations (프로젝트 자동화 정책) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `name` | `varchar(100)` | NO | | 자동화 명칭 | +| `logic_type` | `varchar(50)` | NO | | `trigger_on_stage_complete` 등 | +| `config_json` | `longtext` | NO | | 설정 값 JSON | +| `status` | `enum('DRAFT','ACTIVE','INACTIVE')` | NO | MUL | `DRAFT` | +| `created_by` / `updated_by` | `int(11)` | - | MUL | FK→users.id | +| `last_executed_at` | `datetime` | YES | | 최종 실행 일시 | + +**사용처:** [[B01_Dashboard/B01_backend|B01_Dashboard]] (자동화 로직 관리, USER는 조회 차단) + +## project_workflow_stages (단계별 상세 상태) +- 본 테이블은 워크플로우 7단계(stage 0~6)의 세부 진행도(state, params, progress_percent 등)를 관리하는 SSOT입니다. +- 상세 테이블 정보 및 사용처 ➡️ [[workflow_state]] diff --git a/docs/wiki/concepts/db_schema/route_profile.md b/docs/wiki/concepts/db_schema/route_profile.md new file mode 100644 index 0000000..b412faf --- /dev/null +++ b/docs/wiki/concepts/db_schema/route_profile.md @@ -0,0 +1,69 @@ +--- +type: concept +status: stable +related_pages: ["[[B05_wf2_Route/B05_backend]]", "[[B06_wf3_ProfileCross/B06_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md +--- + +# DB: 경로/종횡단 테이블 + +← [[overview]] + +## routes (노선 경로) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `surface_model_id` | `int(11)` | YES | MUL | FK→surface_models.id | +| `status` | `varchar(50)` | YES | | `DRAFT` ➡️ `CONFIRMED` ➡️ `ARCHIVED` | +| `start_chainage_m` / `end_chainage_m` | `float` | YES | | 시작 시점 / 끝 시점 연장(m) | +| `total_length_m` | `float` | YES | | 총 연장(m) | +| `grade_percent` | `longtext` | YES | | 경사도 정보 JSON | +| `constraints` / `algorithm_params` | `longtext` | YES | | 회피 구역 JSON / 알고리즘 가중치 파라미터 JSON | +| `route_data_path` | `varchar(500)` | YES | | 노선 데이터 (GeoJSON) 파일 경로 | +| `computed_at` / `created_at` | - | - | | 연산 완료 일시 / 생성 일시 | + +## route_points (경로 좌표점) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `route_id` | `int(11)` | NO | MUL | FK→routes.id | +| `chainage_m` | `float` | YES | | 시점 거리(m) | +| `elevation_m` / `slope_percent` | `float` | YES | | 표고(m) / 종단 경사율(%) | +| `sequence_num` | `int(11)` | YES | | 점 순서 | + +## route_statistics (노선 통계) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `route_id` | `int(11)` | NO | MUL | FK→routes.id | +| `min_slope` / `max_slope` / `mean_slope` | `float` | YES | | 최저 / 최고 / 평균 경사(%) | +| `cut_volume_m3` / `fill_volume_m3` | `float` | YES | | 절토량(㎥) / 성토량(㎥) | +| `tree_cutting_volume` / `cost_score` | `float` | YES | | 벌채량 / 평점 비용 스코어 | + +## longitudinal_sections (종단면 설계) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` / `route_id` | `char(36)` / `int` | NO | MUL | FK→projects / routes | +| `computed_at` | `timestamp` | YES | | 종단 계산 일시 | +| `data` | `longtext` | YES | | 지반고/계획고/구배 등 설계 데이터 JSON | +| `longitudinal_file_path` | `varchar(500)` | YES | | 종단도면 캐드 파일 경로 | +| `status` | `varchar(50)` | YES | | `DRAFT` / `CONFIRMED` | + +## cross_sections (횡단면 설계) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` / `route_id` | `char(36)` / `int` | NO | MUL | FK→projects / routes | +| `chainage_m` / `sequence_num` | - | YES | | 측정 체인 거리(m) / 단면 순서 | +| `data` | `longtext` | YES | | 좌우 사면 경사, 폭, 절성토 단면적 JSON | +| `cross_section_file_path` | `varchar(500)` | YES | | 횡단도면 캐드 파일 경로 | +| `status` | `varchar(50)` | YES | | `DRAFT` / `CONFIRMED` | + +## routes.status 흐름 +`DRAFT → CONFIRMED → ARCHIVED` + +## cross_sections.data.structures +횡단면 하나에 배치된 구조물 ID 배열 → [[structure_output]]#structures 참조 diff --git a/docs/wiki/concepts/db_schema/structure_output.md b/docs/wiki/concepts/db_schema/structure_output.md new file mode 100644 index 0000000..b873247 --- /dev/null +++ b/docs/wiki/concepts/db_schema/structure_output.md @@ -0,0 +1,70 @@ +--- +type: concept +status: stable +related_pages: ["[[B07_wf4_DesignDetail/B07_frontend]]", "[[B08_wf5_Quantity/B08_frontend]]", "[[B09_wf6_Estimation/B09_frontend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md +--- + +# DB: 구조물/수량/산출물 테이블 + +← [[overview]] + +## structures (배치 구조물) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` / `cross_section_id` | - | - | MUL | FK→projects / cross_sections | +| `structure_type` | `varchar(100)` | YES | | 낙석방지책 / 계간수로 / 돌붙임 등 | +| `chainage_m` | `float` | YES | | 구조물 배치 체인 시점 거리(m) | +| `location` | `varchar(50)` | YES | | 좌 / 우 / 종단 등 배치 위치 | +| `length_m` / `width_m` / `height_m` | `float` | YES | | 길이 / 폭 / 높이 규격(m) | +| `material` | `varchar(100)` | YES | | 구조물 재질/자재 | +| `quantity` / `unit_price` | - | YES | | 수량 / 단가 | +| `design_notes` | `longtext` | YES | | 특기사항 등 메모 | +| `structure_data_path` | `varchar(500)` | YES | | 세부 구조 상세 데이터 파일 경로 | +| `last_modified_by` | `int(11)` | YES | MUL | FK→users.id (최종 수정자) | +| `created_at` / `updated_at` | `timestamp` | - | | 생성 / 수정 일시 | + +## quantity_items (수량 산출 항목) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `category` | `varchar(100)` | YES | | 토공 / 구조물 / 포장 / 배수 등 공종 | +| `item_name` / `unit` | `varchar` | YES | | 품목 항목명 / 단위 (㎡, m 등) | +| `quantity_design` / `quantity_actual` | `float` | YES | | 설계 수량 / 최종 반영 수량 | +| `unit_price` / `total_price` | `float` | YES | | 단가 / 총 금액 | +| `standard_reference` | `varchar(255)` | YES | | 품셈 근거 코드/출처 | +| `computed_at` / `quantity_data_path` | - | YES | | 계산 일시 / 상세 산출근거 데이터 파일 경로 | +| `data` | `longtext` | YES | | 계산 세부 과정 통계 JSON | + +## outputs (최종 견적/도면 산출 세션) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `project_id` | `char(36)` | NO | MUL | FK→projects.id | +| `output_type` | `varchar(100)` | YES | | `estimation_excel`/`drawing_dxf`/`report_pdf`/`all_bundle` | +| `status` | `varchar(50)` | YES | | `GENERATING` ➡️ `COMPLETE` / `FAILED` | +| `generated_by` / `generated_at` | - | - | MUL | 생성자 FK / 생성일시 | +| `version` | `int(11)` | YES | | 산출 버전 | +| `outputs_directory_path` | `varchar(500)` | YES | | 산출 파일 번들 디렉토리 경로 | +| `metadata` | `longtext` | YES | | 기타 도면 스케일 등 정보 JSON | + +## output_files (개별 산출 파일 리스트) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `output_id` | `int(11)` | NO | MUL | FK→outputs.id | +| `file_type` | `varchar(50)` | YES | | `xlsx`/`pdf`/`dxf`/`dwg`/`json`/`zip` 등 | +| `original_filename` | `varchar(255)` | YES | | 원본 파일 식별 이름 | +| `output_file_path` | `varchar(500)` | YES | | 개별 파일 저장 경로 | +| `file_size_mb` / `download_count` | - | YES | | 파일 용량 / 다운로드 누적 카운트 | +| `created_at` | `timestamp` | NO | | 생성일시 | + +## quantity_items 총비용 계산 예 +```sql +SELECT SUM(quantity_actual * unit_price) AS total_cost, category +FROM quantity_items WHERE project_id = :project_id AND deleted_at IS NULL +GROUP BY category; +``` diff --git a/docs/wiki/concepts/db_schema/unconfirmed/README.md b/docs/wiki/concepts/db_schema/unconfirmed/README.md new file mode 100644 index 0000000..0ae8785 --- /dev/null +++ b/docs/wiki/concepts/db_schema/unconfirmed/README.md @@ -0,0 +1,7 @@ +# 미확정 테이블 보관소 (Unconfirmed DB Schemas) + +본 디렉토리는 소스코드 연동 처리가 완료되지 않았거나, 비즈니스 로직(백엔드/프론트엔드) 상의 구체적인 연결고리가 식별되지 않은 미확정 테이블의 명세서 및 임시 분석 내용을 개별 마크다운 파일로 저장·격리하는 공간입니다. + +## 운영 규칙 +1. **임시 격리**: 신규 테이블 추가 또는 레거시 테이블 중 사용처를 즉시 규명하기 어려운 경우 `[테이블명].md`로 파일을 생성해 기록합니다. +2. **확정 이관**: 소스코드에서의 실제 사용처(라우터, 리포지토리 등)가 명확해지면, 상위의 공식 테이블 그룹(예: `users_auth.md`, `logs_monitoring.md` 등)으로 표 명세를 이관하고 본 폴더 내의 마크다운은 삭제합니다. diff --git a/docs/wiki/concepts/db_schema/users_auth.md b/docs/wiki/concepts/db_schema/users_auth.md new file mode 100644 index 0000000..921ef13 --- /dev/null +++ b/docs/wiki/concepts/db_schema/users_auth.md @@ -0,0 +1,92 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/db_schema.md +--- + +# DB: 사용자/인증/조직 테이블 + +← [[overview]] + +## users (사용자) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `email` | `varchar(255)` | NO | UNI | | +| `password_hash` | `varchar(255)` | NO | | | +| `name` | `varchar(255)` | NO | | | +| `position` / `department` | `varchar(100)` | YES | | 직위 / 부서 | +| `phone` | `varchar(20)` | YES | | | +| `company_id` | `int(11)` | YES | MUL | FK→companies.id | +| `role` | `enum('SYSTEM_ADMIN','ADMIN','USER')` | NO | MUL | `USER` | +| `is_master` | `tinyint(1)` | NO | | `0` (마스터 여부) | +| `status` | `enum('PENDING_EMAIL','NO_COMPANY','PENDING','ACTIVE','INACTIVE','REJECTED')` | NO | MUL | `PENDING_EMAIL` | +| `auth_expires_at` / `last_login` | `datetime` | YES | | 인증만료 / 최종로그인 | +| `login_failures` | `int(11)` | NO | | `0` (실패 횟수) | +| `created_at` / `updated_at` / `deleted_at` | `timestamp` | - | | 생성 / 수정 / soft-delete | + +**사용처:** [[B01_Dashboard/B01_backend|B01_Dashboard]] (사용자 관리), 전 페이지 공통 인증 + +## companies (회사) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `name` | `varchar(255)` | NO | UNI | 회사명 | +| `business_registration_number` | `varchar(20)` | YES | UNI | 사업자번호 | +| `status` | `enum('ACTIVE','INACTIVE','SUSPENDED')` | NO | | `ACTIVE` | +| `subscription_status` | `enum('FREE','TRIAL','PAID','EXPIRED')` | NO | | `FREE` | +| `created_by` | `int(11)` | YES | MUL | FK→users.id (생성자) | +| `company_code` | `varchar(20)` | YES | | 참여용 코드 | + +**사용처:** [[B01_Dashboard/B01_backend|B01_Dashboard]] + +## sessions (세션) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `varchar(255)` | NO | PRI | 세션 ID (쿠키 값) | +| `user_id` | `int(11)` | NO | MUL | FK→users.id | +| `user_agent_hash` | `char(64)` | NO | | | +| `expires_at` | `timestamp` | NO | MUL | 만료일시 | +| `last_activity_at` | `timestamp` | NO | | 최종 활동일시 | + +**사용처:** 전 페이지 공통 (세션 인증) — 상세 → [[auth_rbac]] + +## email_otps (이메일 OTP) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `bigint(20)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | NO | MUL | FK→users.id | +| `purpose` | `enum('REGISTER','LOGIN','REVERIFY','PASSWORD_CHANGE')` | NO | | 용도 | +| `otp_hash` | `varchar(255)` | NO | | OTP 해시값 | +| `expires_at` / `consumed_at` | `timestamp` | - | | 만료일시 / 사용일시 | + +## trusted_devices (신뢰 기기) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `bigint(20)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | NO | MUL | FK→users.id | +| `user_agent_hash` | `char(64)` | NO | | 브라우저 지문 해시 | +| `verified_at` / `last_used_at` | `timestamp` | NO | | 검증 / 최종 사용 일시 | + +## join_requests (회사 가입 신청) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `int(11)` | NO | PRI | `auto_increment` | +| `user_id` / `company_id` | `int(11)` | NO | MUL | FK→users/companies | +| `status` | `enum('PENDING','APPROVED','REJECTED')` | NO | | `PENDING` | +| `requested_at` / `reviewed_at` | `timestamp` | - | | 신청 / 검토 일시 | +| `reviewed_by` | `int(11)` | YES | MUL | FK→users.id (검토자) | + +**사용처:** [[B01_Dashboard/B01_backend|B01_Dashboard]] (`B01_Dashboard_Repository.py:378` 가입 신청·처리) + +## user_consents (약관 동의) +| 컬럼 | 타입 | Null | Key | Default / Extra | +|---|---|---|---|---| +| `id` | `bigint(20)` | NO | PRI | `auto_increment` | +| `user_id` | `int(11)` | NO | MUL | FK→users.id | +| `terms_version` | `varchar(20)` | NO | | 동의한 약관 버전 | +| `terms_agreed` / `privacy_agreed` | `tinyint(1)` | NO | | 필수 동의여부 (1=동의) | +| `marketing_agreed` | `tinyint(1)` | NO | | `0` (선택 마케팅동의) | +| `agreed_at` | `timestamp` | NO | | 동의 일시 | diff --git a/docs/wiki/concepts/dependencies.md b/docs/wiki/concepts/dependencies.md new file mode 100644 index 0000000..5546bc6 --- /dev/null +++ b/docs/wiki/concepts/dependencies.md @@ -0,0 +1,36 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_wf1_Surface/B04_backend]]", "[[B05_wf2_Route/B05_backend]]", "[[B06_wf3_ProfileCross/B06_backend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/agent.md, raw/guidelines/migration_plan.md +--- + +# 외부 라이브러리 의존성 + +## 백엔드 (Python 3.12.7) +| 라이브러리 | 용도 | 사용 페이지 | +|---|---|---| +| FastAPI / Pydantic | API 프레임워크 / 요청·응답 검증 | 전체; [[B01_Dashboard/B01_backend|B01_Dashboard]] 라우터·요청 모델 | +| Trimesh | 3D 메시 처리 | [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]] (모델 생성) | +| Whitebox | 지형 분석(D8 흐름누적 등) | [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]], [[B05_wf2_Route/B05_backend|B05_wf2_Route]] (skeleton) | +| Geopandas | 공간 데이터프레임 | [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]], [[B05_wf2_Route/B05_backend|B05_wf2_Route]] | +| Shapely | 기하 연산 (JSON 파싱 후) | [[B05_wf2_Route/B05_backend|B05_wf2_Route]], [[B06_wf3_ProfileCross/B06_backend|B06_wf3_ProfileCross]] | +| NumPy | 격자·통계·비용면 및 LAS 통계 계산 | [[B03_FileInput/B03_backend|B03_FileInput]], [[B05_wf2_Route/B05_backend|B05_wf2_Route]] | +| SciPy | 수치 보간·계산 보조 | [[B05_wf2_Route/B05_backend|B05_wf2_Route]] | +| Rasterio | 래스터(DEM/TIF) 입출력·메타데이터 | [[B03_FileInput/B03_backend|B03_FileInput]], [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]] | +| Laspy | LAS/LAZ 포인트클라우드 파싱 | [[B03_FileInput/B03_backend|B03_FileInput]], [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]] | +| Pyproj | PRJ/TIF 좌표계 해석 | [[B03_FileInput/B03_backend|B03_FileInput]] | +| aiomysql | 비동기 MariaDB 드라이버 (Raw SQL) | 전체 | +| psutil | CPU·메모리 사용률 계측 | [[B01_Dashboard/B01_backend|B01_Dashboard]] 리소스 현황 | + +## 프론트엔드 (TypeScript/Node.js) +| 항목 | 용도 | 사용처 | +|---|---|---| +| **three.js** (WebGL) | 3D 뷰어(WebGLRenderer, OrbitControls, Points/Mesh) | [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]] 구현 확인. B05/B06은 각 페이지에서 미구현 확인 | +| Vite | 빌드 도구 | 전 프론트 | + +> ⚠️ B04는 three.js 기반 3D 뷰어가 구현되어 있고, B05/B06은 현재 문서 기준 WebCAD 노선·프로필 뷰어가 미구현이다. + +## 선정 원칙 (agent.md 3절) +프로젝트에 맞춰 호환 라이브러리 선정, 불필요한 함수 작성 최소화. `asyncmy` 대신 `aiomysql` 채택 이유: Cython 빌드가 Windows 환경에서 불필요. diff --git a/docs/wiki/concepts/schema_common.md b/docs/wiki/concepts/schema_common.md new file mode 100644 index 0000000..1b3992d --- /dev/null +++ b/docs/wiki/concepts/schema_common.md @@ -0,0 +1,19 @@ +--- +type: concept +status: stable +related_pages: [] +last_updated: 2026-07-12 +source: raw/guidelines/backend.md +--- + +# 공통 스키마 (Pydantic 요청/응답 규칙) + +## 검증 원칙 (backend.md 4절) +- 모든 JSON 요청은 라우터 진입 전 Pydantic 모델로 타입·범위 검증. +- 모든 지형/메쉬 연산은 `try-except` 필수. +- 에러 응답 표준 포맷: `{"status": "error", "message": "원인"}` — 전 라우터 공통, 프론트도 동일 포맷 기대. + +## 명명 규칙 +파일명 `[폴더명]_Schema.py`, 페이지 폴더 내부 배치 (전역 공유 스키마 폴더 없음 — 필요 시 여기에 항목 추가). + +> 현재 raw 자료에서 페이지 간 공유되는 구체적 Pydantic 모델(예: 공통 페이지네이션, 공통 좌표 타입)은 확인되지 않음. 발견 시 이 페이지에 추가. diff --git a/docs/wiki/concepts/storage_paths.md b/docs/wiki/concepts/storage_paths.md new file mode 100644 index 0000000..87e7ba1 --- /dev/null +++ b/docs/wiki/concepts/storage_paths.md @@ -0,0 +1,36 @@ +--- +type: concept +status: stable +related_pages: ["[[B02_ProjRegister/B02_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_wf1_Surface/B04_backend]]", "[[B05_wf2_Route/B05_backend]]", "[[B06_wf3_ProfileCross/B06_backend]]", "[[B07_wf4_DesignDetail/B07_frontend]]", "[[B08_wf5_Quantity/B08_frontend]]", "[[B09_wf6_Estimation/B09_frontend]]"] +last_updated: 2026-07-12 +source: raw/guidelines/structure.md, raw/guidelines/db_schema.md, raw/guidelines/backend.md, raw/guidelines/agent.md +--- + +# 저장 경로 규칙 (Workflow-based Folder Structure) + +## 경로 패턴 +``` +storage/{company_slug}/{user_slug}/{project_id}/ +├── B03_FileInput/input/{file_type}/ WF0 원본 입력 +├── B04_wf1_Surface/processed/, models/ WF1 변환·모델 +├── B05_wf2_Route/route/ WF2 경로 +├── B06_wf3_ProfileCross/longitudinal/, cross_sections/ WF3 종횡단 +├── B07_wf4_DesignDetail/structures/ WF4 구조물 +├── B08_wf5_Quantity/quantities/ WF5 수량 +└── B09_wf6_Estimation/v1/, v2/, ... WF6 산출물 (버전은 여기서만) +``` + +## 원칙 (backend.md 3절) +1. **하드코딩 금지** — 경로는 `config/config_system.py`에서 import. +2. **물리 파일은 DB 저장 금지** — 대용량 파일은 파일시스템, DB에는 경로만. +3. **단계별 루트 강제** — 각 B0x 폴더명은 실제 워크플로우 페이지명과 동일해야 함. `raw/`, `processed/`, `computed/`를 프로젝트 루트 공용 폴더로 만들지 않음. +4. **경로 생성 책임 분리** — 페이지별 백엔드는 자기 단계 폴더만 생성·수정. 다른 단계 산출물을 직접 삭제·덮어쓰지 않고 stale로 전파 → [[workflow_state]]. +5. **상대 경로만 DB 저장** — 프로젝트 루트 기준 상대경로. 사용자 입력 경로 직접 결합 금지(경로 이탈 방지), 절대경로 저장 금지. + +## DB 컬럼 ↔ 실제 경로 매핑 +상세 표 → [[db_schema/overview]] "파일 경로 추적 컬럼" + +## 파일명 규칙 (structure.md 1절) +- 페이지 폴더: 로그인 전 `A0x_`, 로그인 후 `B0x_`, 워크플로우는 `wf[번호]` 접두사 +- 파일명: `폴더명(페이지명)_기능_기타사양.확장자` +- 공통 유틸: `common_util/common_util_기능.확장자` diff --git a/docs/wiki/concepts/ui_templates.md b/docs/wiki/concepts/ui_templates.md new file mode 100644 index 0000000..94270bb --- /dev/null +++ b/docs/wiki/concepts/ui_templates.md @@ -0,0 +1,85 @@ +--- +status: stable +related_pages: ["[[A01_Home/A01_frontend]]", "[[A02_ProgDetail/A02_frontend]]", "[[B01_Dashboard/B01_frontend]]", "[[B08_wf5_Quantity/B08_frontend]]"] +last_updated: 2026-07-12 +source: ui_template/ 공통 UI 소스 코드 및 스타일시트 +--- + +# UI Templates — Localization & Components + +프론트엔드 공통 UI 요소: 다국어(i18n), 공통 컴포넌트, 테마 스타일. 디자인 시스템: [[design.md]] + +## ui_template_locale.ts (다국어 관리) + +**파일**: `ui_template/ui_template_locale.ts` + +### 핵심 기능 + +| 항목 | 위치 | 역할 | +|---|---|---| +| `currentLanguageIndex` | `ui_template/ui_template_locale.ts:12` | 현재 활성화된 언어 인덱스 (ko=0, en=1) | +| `ui_locales` | `ui_template/ui_template_locale.ts:25` | 다국어 문구가 등록된 2차원 사전 객체 | +| `t(key)` | `ui_template/ui_template_locale.ts:152` | 지정된 키에 대응하는 현재 언어 텍스트 반환 헬퍼 | + +### 사용처 (역참조) +- [[A01_Home/A01_frontend]] — MOCK_NEWS 태그, 섹션 제목 +- [[A02_ProgDetail/A02_frontend]] — 워크플로우 스텝, 기술 카드 +- [[a00_app_shell_framework]] — 헤더 네비, 언어 토글, 버튼 라벨 +- 모든 A0x/B0x 페이지 — 동적 텍스트 로드 + +## ui_template_elements.ts (공통 컴포넌트) + +**파일**: `ui_template/ui_template_elements.ts` + +### 제공 컴포넌트 + +| 항목 | 위치 | 역할 | +|---|---|---| +| `createButton(opts)` | `ui_template/ui_template_elements.ts:60` | 버튼. variant: `filled`(기본)/`ghost`/`pill`/`danger` | +| `createInputField(opts)` | `ui_template/ui_template_elements.ts:102` | 입력필드(라벨+입력+에러슬롯), setError 핸들 반환 | +| `createSelectField(opts)` | `ui_template/ui_template_elements.ts:164` | 드롭다운 select 필드 | +| `createCard(opts)` | `ui_template/ui_template_elements.ts:209` | 카드(title + body 배열, raised 옵션) | +| `createTag(label, variant?)` | `ui_template/ui_template_elements.ts:228` | 태그. variant: `accent`/`neutral`(기본)/`success`/`warning`/`danger` | +| `showLoadingOverlay()` | `ui_template/ui_template_elements.ts:253` | 로딩 스피너 오버레이 표시(참조카운트) | +| `hideLoadingOverlay()` | `ui_template/ui_template_elements.ts:259` | 로딩 오버레이 해제 | +| `showToast(msg, kind?, ms?)` | `ui_template/ui_template_elements.ts:282` | 토스트 알림. kind: success/error/info/warning | +| `createWorkflowShell(opts)` | `ui_template/ui_template_elements.ts:315` | 워크플로우 3단 레이아웃(헤더+좌측패널+우측뷰어) | +| `createLineChart(opts)` | `ui_template/ui_template_elements.ts:402` | 시계열 스플라인 차트(인라인 SVG, 외부 라이브러리 없음) | +| `injectBaseStyles()` | `ui_template/ui_template_elements.ts:843` | 공통 컴포넌트 기본 스타일 1회 주입 | + +### 사용처 (역참조) +- [[A01_Home/A01_frontend]] — createButton, createCard, createTag +- [[A02_ProgDetail/A02_frontend]] — createButton, createCard +- [[A03_CompDetail/A03_frontend]] — createCard +- [[A04_NewsHistory/A04_frontend]] — createTag +- [[A05_EduDetail/A05_frontend]] — createButton, createCard +- [[a00_app_shell_framework]] — createButton(헤더 네비/인증), createWorkflowShell +- B그룹 모든 페이지 — createWorkflowShell, createLineChart(B01 대시보드) + +## theme.css (스타일 변수) + +**파일**: `ui_template/theme.css` + +### 핵심 변수 + +| 항목 | 위치 | 역할 | +|---|---|---| +| `--color-primary`, `--color-primary-text` | `ui_template/theme.css:10` | 기본 색상 및 기본 텍스트 색상 | +| `--color-canvas`, `--color-paper` | `ui_template/theme.css:15` | 기본 캔버스 배경 및 레이어 카드 배경 | +| `--color-deep-iris`, `--color-mist-violet` | `ui_template/theme.css:22` | 라벤더 그라디언트 및 브랜드 서브 컬러 | +| `--spacing-8`, `--spacing-16` 등 | `ui_template/theme.css:45` | 기본 마진/패딩 간격 시스템 (8px 배수) | +| `--text-heading-lg`, `--text-body` 등 | `ui_template/theme.css:70` | 타이포그래피 크기 및 라인하이트 스케일 | +| `--radius-cards`, `--radius-icons` | `ui_template/theme.css:110` | 8px 등의 둥근 테두리 곡률 반지름 변수 | +| `--z-header` | `ui_template/theme.css:125` | 전역 헤더 고정용 z-index 인덱스 값 | + +## 제약 (backend.md §1) + +1. **다국어**: 모든 UI 문구는 반드시 `ui_locales` 등록 후 `L(key)` 또는 `t(key)`로만 참조 +2. **스타일**: CSS는 `theme.css` 변수만 사용, 하드코드 색상/단위 금지 +3. **컴포넌트 재사용**: `createButton`, `createCard`, `createTag`, `createWorkflowShell` 우선 사용 +4. **명명**: 이벤트 핸들러는 `on[페이지]_[기능]_[액션]` 규칙 준수 + +## 의존성 + +- **Locale**: 모든 페이지에서 `currentLanguageIndex` 조회 +- **요소**: 페이지별로 필요한 컴포넌트만 import diff --git a/docs/wiki/concepts/workflow_state.md b/docs/wiki/concepts/workflow_state.md new file mode 100644 index 0000000..98c7ac4 --- /dev/null +++ b/docs/wiki/concepts/workflow_state.md @@ -0,0 +1,74 @@ +--- +type: concept +status: stable +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B02_ProjRegister/B02_backend]]", "[[B03_FileInput/B03_backend]]", "[[B04_wf1_Surface/B04_backend]]", "[[B05_wf2_Route/B05_backend]]", "[[B06_wf3_ProfileCross/B06_backend]]", "[[B07_wf4_DesignDetail/B07_frontend]]", "[[B08_wf5_Quantity/B08_frontend]]", "[[B09_wf6_Estimation/B09_frontend]]"] +last_updated: 2026-07-12 +source: raw/plans/plan_workflow_state_management.md (계획, 2026-07-10) + 실 코드/DB 직접 확인 (2026-07-12) +--- + +# Workflow 상태 관리 — 구현 완료 (실 DB 확인됨) + +> **status: stable.** 2026-07-12 실 코드 전수 확인 + DB 직접 접속(`SHOW TABLES`/`DESCRIBE`)으로 검증. 계획서(2026-07-10)의 설계가 **B01~B06 전 단계에 이미 적용 완료**됨. 정식 검증보고서는 없지만 코드·DB 실측이 계획과 일치해 stable로 채택. 남은 잔재 1건은 아래 참고. + +## SSOT: `project_workflow_stages` 테이블 (실 DB 확인) +| 컬럼 | 타입 | +| --------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| id | INT PK | +| project_id | CHAR(36), FK | +| stage_no | TINYINT (0~6) | +| stage_key | VARCHAR(30) — FILE_INPUT/WF1_SURFACE/WF2_ROUTE/WF3_PROFILE_CROSS/WF4_DESIGN_DETAIL/WF5_QUANTITY/WF6_ESTIMATION | +| state | ENUM('NOT_STARTED','IN_PROGRESS','COMPLETE','FAILED','STALE') | +| progress_percent | TINYINT | +| params | LONGTEXT(JSON) — 재실행 시 폼 프리필용 | +| message, started_at, completed_at, updated_at | 진행/이력 | + +생성 SQL: `db_management/006_workflow_state.sql`, 백필: `db_management/migrate_workflow_state.py` (기존 프로젝트 `projects.status` 해석 후 시드) + +## 공통 유틸 `common_util/common_util_workflow_state.py` +| 함수 | 역할 | +|---|---| +| `initialize_project_stages(cursor, project_id)` | 프로젝트 생성 시 7행 NOT_STARTED 시드 | +| `start_stage(cursor, project_id, stage_no, params)` | IN_PROGRESS 전이 + N+1~6의 COMPLETE를 STALE로 전파 + `projects.status` 캐시 갱신 | +| `complete_stage(cursor, project_id, stage_no)` | COMPLETE 전이 (stage 6 완료 시 `projects.status='DONE'`) | +| `fail_stage(cursor, project_id, stage_no, message)` | FAILED 전이 | +| `update_stage_progress(cursor, project_id, stage_no, progress)` | 진행률만 갱신 | +| `get_workflow_state(cursor, project_id)` | 단건 조회, `current_stage` 계산 포함 | + +## 실 연동 현황 (파일:줄번호) +| 페이지 | 위치 | 연동 stage_no | +|---|---|---| +| [[B02_ProjRegister/B02_backend|B02_ProjRegister]] | `B02_ProjRegister_Repository.py:90` `initialize_project_stages` 호출 | 시드(0~6) | +| [[B03_FileInput/B03_backend|B03_FileInput]] | `B03_FileInput_Router.py:175,224,256,347,570` | stage 0, 1 | +| [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]] | `B04_wf1_Surface_Router.py:168,209,227,233` | stage 1 | +| [[B05_wf2_Route/B05_backend|B05_wf2_Route]] | `B05_wf2_Route_Router.py:51,96,112,117,122,128,152` | stage 2 | +| [[B06_wf3_ProfileCross/B06_backend|B06_wf3_ProfileCross]] | `B06_wf3_ProfileCross_Router.py:68,111,127,132,137,143,187` | stage 3 | +| [[B01_Dashboard/B01_backend|B01_Dashboard]] | `B01_Dashboard_Repository.py:83` `get_workflow_states_for_projects()` (배치 조회, 프로젝트 목록에 `workflow_state` 필드 포함) | 조회 전용 | + +## 조회 API (실제 존재, 계획서와 경로 일치) +`GET /{project_id}/workflow-state` — `B03_FileInput_Router.py:667` +```json +{"status": "success", "workflow_state": {"project_id": "...", "current_stage": 2, "stages": [...]}} +``` +실제 전체 경로는 B03 라우터 prefix를 포함한 `/api/projects/{project_id}/workflow-state`이다. + +## 상태 전이 (구현대로) +``` +NOT_STARTED → IN_PROGRESS → COMPLETE + └→ FAILED → (재실행) IN_PROGRESS +COMPLETE → (하위 단계 재작업) → STALE → (재실행) IN_PROGRESS +``` +stage N이 IN_PROGRESS 전이 시 N+1~6의 COMPLETE를 전부 STALE로 전파 (`start_stage` 내부 UPDATE 쿼리로 확인됨). + +## projects.status 문자열 캐시 (호환용, 계획서 방침대로 유지 중) +`start_stage`/`complete_stage`/`fail_stage`가 `project_workflow_stages`와 `projects.status`를 **동시에** 갱신 (`WF{n}_ANALYZING`/`WF{n}_COMPLETE`/`WF{n}_FAILED`, stage6 COMPLETE 시 `DONE`). + +## B04 상태 조회 — 레거시 폴백 (당초 "잔재"로 표기했으나 정정) +`get_wf1_analysis_status()`([[B04_wf1_Surface/B04_backend]], `B04_wf1_Surface_Router.py:372`)는 +`project_workflow_stages`(SSOT)를 **우선** 조회하고, 행이 없을 때만(백필 미작동 대비) +`projects.status` 문자열 비교로 폴백함(416 `WF1_COMPLETE`, 420 `WF1_ANALYZING`, `:412-427`). +→ B04 실 코드 확인 결과 **정상 경로가 아닌 방어적 폴백**. SSOT 안정화 후 제거 가능하나 현재는 안전장치로 유효. +별개로 `update_project_status()`(`:76`)는 정의만 있고 미호출(죽은 코드) → 정리 권장. + +## 미해결 사항 (계획서 원문, 아직 결정 안 됨) +- `projects.status` 완전 제거 여부 — 현재는 유지 중(위 확인) +- STALE 하위 결과 파일: 즉시 삭제 vs 재실행 시 덮어쓰기 — 코드 레벨 확인 안 함, 별도 점검 필요 diff --git a/docs/wiki/graphify-out/.graphify_labels.json b/docs/wiki/graphify-out/.graphify_labels.json new file mode 100644 index 0000000..f65269e --- /dev/null +++ b/docs/wiki/graphify-out/.graphify_labels.json @@ -0,0 +1,48 @@ +{ + "0": "DB: 로그/모니터링 테이블", + "1": "auth_rbac.md", + "2": "workflow_state.md", + "3": "개념 (Concepts)", + "4": "Wiki Log", + "5": "ui_templates.md", + "6": "A09_Security — Backend", + "7": "A00_Common — App Shell Framework", + "8": "UI Templates — Localization & Components", + "9": "A04_NewsHistory — Frontend", + "10": "A07_Register — Frontend", + "11": "A08_Support — Backend", + "12": "A08_Support — Frontend", + "13": "B02_ProjRegister — Frontend", + "14": "인증 / RBAC", + "15": "A01_Home — Frontend", + "16": "A05_EduDetail — Frontend", + "17": "A06_Login — Backend", + "18": "A06_Login — Frontend", + "19": "A09_Security — Frontend", + "20": "B02_ProjRegister — Backend", + "21": "Workflow 상태 관리 — 구현 완료 (실 DB 확인됨)", + "22": "A03_CompDetail — Frontend", + "23": "B04_wf1_Surface — Backend", + "24": "DB: 경로/종횡단 테이블", + "25": "A07_Register — Backend", + "26": "B04_wf1_Surface — Frontend", + "27": "B07_wf4_DesignDetail — Frontend", + "28": "B09_wf6_Estimation — Frontend", + "29": "B05_wf2_Route — Backend", + "30": "A01_Home — 세부 구현", + "31": "A02_ProgDetail — 세부 구현", + "32": "A02_ProgDetail — Frontend", + "33": "B05_wf2_Route — Frontend", + "34": "B02_ProjRegister — DB", + "35": "B04_wf1_Surface — DB", + "36": "B04_wf1_Surface — Dependencies", + "37": "B06_wf3_ProfileCross — Frontend", + "38": "wiki/ 폴더 규칙", + "39": "wiki/ 폴더 규칙", + "40": "B04_wf1_Surface — API", + "41": "B05_wf2_Route — DB 사용 관계", + "42": "B06_wf3_ProfileCross — DB 사용 관계", + "43": "B01_Dashboard — DB 사용 관계", + "44": "B03_FileInput — DB 사용 관계", + "45": "B08_wf5_Quantity — DB" +} diff --git a/docs/wiki/graphify-out/.graphify_root b/docs/wiki/graphify-out/.graphify_root new file mode 100644 index 0000000..945c9b4 --- /dev/null +++ b/docs/wiki/graphify-out/.graphify_root @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/docs/wiki/graphify-out/GRAPH_REPORT.md b/docs/wiki/graphify-out/GRAPH_REPORT.md new file mode 100644 index 0000000..441abc0 --- /dev/null +++ b/docs/wiki/graphify-out/GRAPH_REPORT.md @@ -0,0 +1,275 @@ +# Graph Report - wiki (2026-07-12) + +## Corpus Check +- 69 files · ~23,462 words +- Verdict: corpus is large enough that graph structure adds value. + +## Summary +- 530 nodes · 511 edges · 46 communities (43 shown, 3 thin omitted) +- Extraction: 100% EXTRACTED · 0% INFERRED · 0% AMBIGUOUS +- Token cost: 0 input · 0 output + +## Graph Freshness +- Built from commit: `35c65c92` +- Run `git rev-parse HEAD` and compare to check if the graph is stale. +- Run `graphify update .` after code changes (no API cost). + +## Community Hubs (Navigation) +- DB: 로그/모니터링 테이블 +- auth_rbac.md +- workflow_state.md +- 개념 (Concepts) +- Wiki Log +- ui_templates.md +- A09_Security — Backend +- A00_Common — App Shell Framework +- UI Templates — Localization & Components +- A04_NewsHistory — Frontend +- A07_Register — Frontend +- A08_Support — Backend +- A08_Support — Frontend +- B02_ProjRegister — Frontend +- 인증 / RBAC +- A01_Home — Frontend +- A05_EduDetail — Frontend +- A06_Login — Backend +- A06_Login — Frontend +- A09_Security — Frontend +- B02_ProjRegister — Backend +- Workflow 상태 관리 — 구현 완료 (실 DB 확인됨) +- A03_CompDetail — Frontend +- B04_wf1_Surface — Backend +- DB: 경로/종횡단 테이블 +- A07_Register — Backend +- B04_wf1_Surface — Frontend +- B07_wf4_DesignDetail — Frontend +- B09_wf6_Estimation — Frontend +- B05_wf2_Route — Backend +- A01_Home — 세부 구현 +- A02_ProgDetail — 세부 구현 +- A02_ProgDetail — Frontend +- B05_wf2_Route — Frontend +- B02_ProjRegister — DB +- B04_wf1_Surface — DB +- B04_wf1_Surface — Dependencies +- B06_wf3_ProfileCross — Frontend +- wiki/ 폴더 규칙 +- wiki/ 폴더 규칙 +- B04_wf1_Surface — API +- B05_wf2_Route — DB 사용 관계 +- B06_wf3_ProfileCross — DB 사용 관계 +- B01_Dashboard — DB 사용 관계 +- B03_FileInput — DB 사용 관계 +- B08_wf5_Quantity — DB + +## God Nodes (most connected - your core abstractions) +1. `Wiki Log` - 33 edges +2. `개념 (Concepts)` - 12 edges +3. `DB: 로그/모니터링 테이블` - 11 edges +4. `인증 / RBAC` - 10 edges +5. `페이지 — 로그인 후 워크플로우 (B01~B09)` - 10 edges +6. `페이지 — 로그인 전 (A01~A09)` - 10 edges +7. `A07_Register — Frontend` - 10 edges +8. `A08_Support — Backend` - 10 edges +9. `A08_Support — Frontend` - 10 edges +10. `B02_ProjRegister — Frontend` - 10 edges + +## Surprising Connections (you probably didn't know these) +- None detected - all connections are within the same source files. + +## Communities (46 total, 3 thin omitted) + +### Community 0 - "DB: 로그/모니터링 테이블" +Cohesion: 0.05 +Nodes (38): DB: 파일/지표면분석 테이블, input_files.status 값, input_files (입력 원본 파일), processed_point_cloud (필터/변환 포인트클라우드), surface_models.status / processed_point_cloud.status 값, surface_models (지표면 모델 및 등고선), terrain_layers (지형 레이어), upload_chunks (업로드 청크 데이터) (+30 more) + +### Community 1 - "auth_rbac.md" +Cohesion: 0.05 +Nodes (33): API 공통 (여러 페이지가 공유하는 엔드포인트), 공통 오류 응답 포맷 (전 라우터), 워크플로우 상태 조회, 폴링 패턴 (legacy workflow.json 설계; 현재 구현은 workflow-state API 사용), companies (회사), DB: 사용자/인증/조직 테이블, email_otps (이메일 OTP), join_requests (회사 가입 신청) (+25 more) + +### Community 2 - "workflow_state.md" +Cohesion: 0.06 +Nodes (28): 공통 유틸 (common_util/), 리소스 모니터링 (common_util_resource_monitor.py), 이메일 발송 (common_util_email.py), 백엔드 (Python 3.12.7), 선정 원칙 (agent.md 3절), 외부 라이브러리 의존성, 프론트엔드 (TypeScript/Node.js), DB 컬럼 ↔ 실제 경로 매핑 (+20 more) + +### Community 3 - "개념 (Concepts)" +Cohesion: 0.06 +Nodes (35): [[a00_app_shell_framework]], [[a00_app_shell_framework_scaffold]], [[A01_Home/A01_frontend|A01_Home]], [[A02_ProgDetail/A02_frontend|A02_ProgDetail]], [[A03_CompDetail/A03_frontend|A03_CompDetail]], [[A04_NewsHistory/A04_frontend|A04_NewsHistory]], [[A05_EduDetail/A05_frontend|A05_EduDetail]], [[A06_Login/A06_backend|A06_Login]] (+27 more) + +### Community 4 - "Wiki Log" +Cohesion: 0.06 +Nodes (33): [2026-07-12] ingest | A01_Home 실 코드 반영, [2026-07-12] ingest | A02_ProgDetail + A00_Common Framework, [2026-07-12] ingest | A03_CompDetail, [2026-07-12] ingest | A04_NewsHistory, [2026-07-12] ingest | A05_EduDetail, [2026-07-12] ingest | A06_Login (backend + frontend 상세화), [2026-07-12] ingest | A07_Register (backend + frontend 상세화), [2026-07-12] ingest | A08_Support (backend + frontend 상세화) (+25 more) + +### Community 5 - "ui_templates.md" +Cohesion: 0.07 +Nodes (23): A00_Common — 스캐폴드·CSS·종속성, b_page_scaffold, CSS 인젝션, 사용처, 종속성, B01_Dashboard — Dependencies, 프로젝트 공통 모듈, B01_Dashboard — Frontend (+15 more) + +### Community 6 - "A09_Security — Backend" +Cohesion: 0.17 +Nodes (11): A09_Security — Backend, API 엔드포인트, DB 저장 (activity_logs), 권한 헬퍼, 마스터(회사 관리자) 전용 — `require_master`, 시스템 관리자 전용 — `require_system_admin`, 요청 스키마 (Pydantic), 의존성 (공통 유틸) (+3 more) + +### Community 7 - "A00_Common — App Shell Framework" +Cohesion: 0.18 +Nodes (11): A00_Common — App Shell Framework, app_shell 구성요소, router 라우팅 테이블, 로그아웃 (onApp_Logout_Click), 세부 스캐폴드·CSS·종속성, 인증 가드, 인증 버튼 (비동기 fillAuthActions), 테마 & 언어 관리 (+3 more) + +### Community 8 - "UI Templates — Localization & Components" +Cohesion: 0.18 +Nodes (11): theme.css (스타일 변수), ui_template_elements.ts (공통 컴포넌트), ui_template_locale.ts (다국어 관리), UI Templates — Localization & Components, 사용처 (역참조), 사용처 (역참조), 의존성, 제공 컴포넌트 (+3 more) + +### Community 9 - "A04_NewsHistory — Frontend" +Cohesion: 0.18 +Nodes (10): A04_NewsHistory — Frontend, CSS 클래스 구조, Mock 데이터 구조, 로컬라이제이션, 미해결 사항, 반응형, 스타일 (CSS), 의존성 (+2 more) + +### Community 10 - "A07_Register — Frontend" +Cohesion: 0.18 +Nodes (10): A07_Register — Frontend, API 클라이언트 함수, 로컬라이제이션, 스타일 (CSS), 약관 동의 (아코디언), 의존성, 이벤트 핸들러, 제출 로직 (2단계 폼 전환) (+2 more) + +### Community 11 - "A08_Support — Backend" +Cohesion: 0.18 +Nodes (10): A08_Support — Backend, API 엔드포인트, ⚠️ DB 스키마 불일치 (확인 필요), DB 저장 컬럼 (실 코드 INSERT 기준), 내부 헬퍼, 요청 스키마 (Pydantic), 의존성 (공통 유틸), 접수 로직 (+2 more) + +### Community 12 - "A08_Support — Frontend" +Cohesion: 0.18 +Nodes (10): A08_Support — Frontend, 로컬라이제이션, 세션 자동 채움, 스타일 (CSS), 의존성, 이벤트 핸들러, 제출 로직, 참고 (+2 more) + +### Community 13 - "B02_ProjRegister — Frontend" +Cohesion: 0.18 +Nodes (10): B02_ProjRegister — Frontend, 로컬라이제이션, 스타일 (CSS), 의존성, 이벤트 핸들러, 입력 필드, 제출 로직, 참고 (+2 more) + +### Community 14 - "인증 / RBAC" +Cohesion: 0.20 +Nodes (10): OTP / 비밀번호, ⚠️ 계획서-실코드 불일치 (A그룹 인제스트 발견), 권한 검증 헬퍼 (B01_Dashboard), 라우팅 가드 (frontend.md 5.2), 사용자 상태 생명주기, 사용처 (역참조), 세션 인증 (backend.md 6.3), 역할 (users.role) (+2 more) + +### Community 15 - "A01_Home — Frontend" +Cohesion: 0.20 +Nodes (9): A01_Home — Frontend, Hero 섹션, 로컬라이제이션, 세부 구현, 이벤트 핸들러, 주요 기능 섹션, 최신 소식 섹션, 컴포넌트 (+1 more) + +### Community 16 - "A05_EduDetail — Frontend" +Cohesion: 0.20 +Nodes (9): A05_EduDetail — Frontend, CSS 클래스 구조, 로컬라이제이션, 반응형, 스타일 (CSS), 의존성, 이벤트 핸들러, 컴포넌트 (섹션 빌더) (+1 more) + +### Community 17 - "A06_Login — Backend" +Cohesion: 0.20 +Nodes (9): A06_Login — Backend, API 엔드포인트, ⚠️ 계획서와 실 코드 불일치, 내부 헬퍼, 로그인 로직 흐름, 보안 정책 (실 코드 기준), 요청 스키마 (Pydantic), 의존성 (공통 유틸) (+1 more) + +### Community 18 - "A06_Login — Frontend" +Cohesion: 0.20 +Nodes (9): A06_Login — Frontend, API 클라이언트 함수, 로컬라이제이션, 스타일 (CSS), 의존성, 이벤트 핸들러, 제출 로직 (2단계 폼 전환), 컴포넌트 / 함수 (+1 more) + +### Community 19 - "A09_Security — Frontend" +Cohesion: 0.20 +Nodes (9): A09_Security — Frontend, API 클라이언트 함수 (⚠️ 미사용, 정의만), 로컬라이제이션, 스타일 (CSS), 약관 데이터 (A09_Security_Terms.ts), ⚠️ 약관 텍스트와 실 코드 불일치, 의존성, 컴포넌트 / 함수 (+1 more) + +### Community 20 - "B02_ProjRegister — Backend" +Cohesion: 0.20 +Nodes (9): API 엔드포인트, B02_ProjRegister — Backend, DB 저장 컬럼 (projects INSERT), 생성 로직 (create_project 트랜잭션), 요청/응답 스키마 (Pydantic), 의존성 (공통 유틸), 참고, 파일 구조 (+1 more) + +### Community 21 - "Workflow 상태 관리 — 구현 완료 (실 DB 확인됨)" +Cohesion: 0.22 +Nodes (9): B04 상태 조회 — 레거시 폴백 (당초 "잔재"로 표기했으나 정정), projects.status 문자열 캐시 (호환용, 계획서 방침대로 유지 중), SSOT: `project_workflow_stages` 테이블 (실 DB 확인), Workflow 상태 관리 — 구현 완료 (실 DB 확인됨), 공통 유틸 `common_util/common_util_workflow_state.py`, 미해결 사항 (계획서 원문, 아직 결정 안 됨), 상태 전이 (구현대로), 실 연동 현황 (파일:줄번호) (+1 more) + +### Community 22 - "A03_CompDetail — Frontend" +Cohesion: 0.22 +Nodes (8): A03_CompDetail — Frontend, CSS 클래스 구조, 로컬라이제이션, 반응형, 스타일 (CSS), 의존성, 컴포넌트 (섹션 빌더), 파일 구조 + +### Community 23 - "B04_wf1_Surface — Backend" +Cohesion: 0.22 +Nodes (8): B04_wf1_Surface — Backend, ⚠️ 레거시 폴백 (416,420줄), 엔진 서브모듈, 워크플로우 상태 전이, 의존성, 주요 함수 (Router), 책임, 파일 구성 (오케스트레이터/저장소/라우터) + +### Community 24 - "DB: 경로/종횡단 테이블" +Cohesion: 0.25 +Nodes (8): cross_sections.data.structures, cross_sections (횡단면 설계), DB: 경로/종횡단 테이블, longitudinal_sections (종단면 설계), route_points (경로 좌표점), route_statistics (노선 통계), routes.status 흐름, routes (노선 경로) + +### Community 25 - "A07_Register — Backend" +Cohesion: 0.25 +Nodes (7): A07_Register — Backend, API 엔드포인트, 가입 로직 흐름, 요청 스키마 (Pydantic), 의존성 (공통 유틸), 참고, 파일 구조 + +### Community 26 - "B04_wf1_Surface — Frontend" +Cohesion: 0.25 +Nodes (7): API 클라이언트 함수, B04_wf1_Surface — Frontend, ⚠️ 계획서와 실 코드 불일치 (3D 뷰어), 의존성, 처리 흐름, 컴포넌트 / 함수, 파일 구조 + +### Community 27 - "B07_wf4_DesignDetail — Frontend" +Cohesion: 0.25 +Nodes (7): B07_wf4_DesignDetail — Frontend, 로컬라이제이션, 백엔드/DB — 미착수 (계획적 범위 제외), 의존성, 참고, 컴포넌트 / 함수, 파일 구조 + +### Community 28 - "B09_wf6_Estimation — Frontend" +Cohesion: 0.25 +Nodes (7): B09_wf6_Estimation — Frontend, 로컬라이제이션, 백엔드/DB — 미착수, 의존성, 참고, 컴포넌트 / 함수, 파일 구조 + +### Community 29 - "B05_wf2_Route — Backend" +Cohesion: 0.29 +Nodes (6): B05_wf2_Route — Backend, 경로 계산 엔진, 기술부채, 기하·결과 변환, 라우터·workflow, 요청·응답 모델 + +### Community 30 - "A01_Home — 세부 구현" +Cohesion: 0.33 +Nodes (5): A01_Home — 세부 구현, 데이터 흐름, 미해결, 스타일, 의존성 + +### Community 31 - "A02_ProgDetail — 세부 구현" +Cohesion: 0.33 +Nodes (5): A02_ProgDetail — 세부 구현, 데이터 흐름, 미해결 / 특이사항, 스타일 (CSS), 의존성 + +### Community 32 - "A02_ProgDetail — Frontend" +Cohesion: 0.33 +Nodes (5): A02_ProgDetail — Frontend, 구조, 세부 구현, 제약 준수, 컴포넌트 분석 + +### Community 33 - "B05_wf2_Route — Frontend" +Cohesion: 0.33 +Nodes (5): API 클라이언트, B05_wf2_Route — Frontend, 기술부채, 입력 그룹, 화면과 상호작용 + +### Community 34 - "B02_ProjRegister — DB" +Cohesion: 0.40 +Nodes (4): B02_ProjRegister — DB, 쓰는 테이블, 저장소(파일시스템), 참고 (계획 당시 의도) + +### Community 35 - "B04_wf1_Surface — DB" +Cohesion: 0.40 +Nodes (4): B04_wf1_Surface — DB, Repository 함수, 쓰는 테이블, 참고 + +### Community 36 - "B04_wf1_Surface — Dependencies" +Cohesion: 0.40 +Nodes (4): B04_wf1_Surface — Dependencies, ⚠️ dependencies concept 정정 필요, 백엔드 (Python), 프론트엔드 (TypeScript) + +### Community 37 - "B06_wf3_ProfileCross — Frontend" +Cohesion: 0.40 +Nodes (4): API 클라이언트, B06_wf3_ProfileCross — Frontend, 입력 옵션, 화면·workflow + +### Community 38 - "wiki/ 폴더 규칙" +Cohesion: 0.50 +Nodes (3): wiki/ 폴더 규칙, 구조, 작성 규칙 + +### Community 39 - "wiki/ 폴더 규칙" +Cohesion: 0.50 +Nodes (3): wiki/ 폴더 규칙, 구조, 작성 규칙 + +### Community 40 - "B04_wf1_Surface — API" +Cohesion: 0.50 +Nodes (3): B04_wf1_Surface — API, 엔드포인트, 요청/응답 스키마 (Pydantic) + +### Community 41 - "B05_wf2_Route — DB 사용 관계" +Cohesion: 0.50 +Nodes (3): B05_wf2_Route — DB 사용 관계, Repository 함수, 저장 경로 + +### Community 42 - "B06_wf3_ProfileCross — DB 사용 관계" +Cohesion: 0.50 +Nodes (3): B06_wf3_ProfileCross — DB 사용 관계, Repository 함수, 파일 경로 + +## Knowledge Gaps +- **379 isolated node(s):** `구조`, `작성 규칙`, `구조`, `작성 규칙`, `파일 구성` (+374 more) + These have ≤1 connection - possible missing edges or undocumented components. +- **3 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. + +## Suggested Questions +_Questions this graph is uniquely positioned to answer:_ + +- **Why does `UI Templates — Localization & Components` connect `UI Templates — Localization & Components` to `ui_templates.md`?** + _High betweenness centrality (0.015) - this node is a cross-community bridge._ +- **Why does `A00_Common — App Shell Framework` connect `A00_Common — App Shell Framework` to `ui_templates.md`?** + _High betweenness centrality (0.014) - this node is a cross-community bridge._ +- **What connects `구조`, `작성 규칙`, `구조` to the rest of the system?** + _379 weakly-connected nodes found - possible documentation gaps or missing edges._ +- **Should `DB: 로그/모니터링 테이블` be split into smaller, more focused modules?** + _Cohesion score 0.045454545454545456 - nodes in this community are weakly interconnected._ +- **Should `auth_rbac.md` be split into smaller, more focused modules?** + _Cohesion score 0.05110336817653891 - nodes in this community are weakly interconnected._ +- **Should `workflow_state.md` be split into smaller, more focused modules?** + _Cohesion score 0.06156156156156156 - nodes in this community are weakly interconnected._ +- **Should `개념 (Concepts)` be split into smaller, more focused modules?** + _Cohesion score 0.05555555555555555 - nodes in this community are weakly interconnected._ \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/0624d255f06a43b161abeb6fdee9630e320fd97ac8bfcec25673ffef09e4d059.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/0624d255f06a43b161abeb6fdee9630e320fd97ac8bfcec25673ffef09e4d059.json new file mode 100644 index 0000000..1dd5299 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/0624d255f06a43b161abeb6fdee9630e320fd97ac8bfcec25673ffef09e4d059.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "label": "B02_db.md", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_b02_projregister_db", "label": "B02_ProjRegister \u2014 DB", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_\uc4f0\ub294_\ud14c\uc774\ube14", "label": "\uc4f0\ub294 \ud14c\uc774\ube14", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_\uc800\uc7a5\uc18c_\ud30c\uc77c\uc2dc\uc2a4\ud15c", "label": "\uc800\uc7a5\uc18c(\ud30c\uc77c\uc2dc\uc2a4\ud15c)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_\ucc38\uace0_\uacc4\ud68d_\ub2f9\uc2dc_\uc758\ub3c4", "label": "\ucc38\uace0 (\uacc4\ud68d \ub2f9\uc2dc \uc758\ub3c4)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L26"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_projregister_b02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_db_schema_projects_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_b02_projregister_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_b02_projregister_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_\uc4f0\ub294_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_b02_projregister_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_\uc800\uc7a5\uc18c_\ud30c\uc77c\uc2dc\uc2a4\ud15c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_b02_projregister_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_db_\ucc38\uace0_\uacc4\ud68d_\ub2f9\uc2dc_\uc758\ub3c4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_db.md", "source_location": "L26", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/0b2cdc6e3ca674d334281585329d084ff2d4d330ad6ed1e67b99ee2b144d4d7d.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/0b2cdc6e3ca674d334281585329d084ff2d4d330ad6ed1e67b99ee2b144d4d7d.json new file mode 100644 index 0000000..53b2593 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/0b2cdc6e3ca674d334281585329d084ff2d4d330ad6ed1e67b99ee2b144d4d7d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "label": "B09_frontend.md", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "label": "B09_wf6_Estimation \u2014 Frontend", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L18"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218", "label": "\ubc31\uc5d4\ub4dc/DB \u2014 \ubbf8\ucc29\uc218", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L35"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L42"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_db_schema_structure_output_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L32", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L35", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b09_wf6_estimation_b09_frontend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", "source_location": "L42", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/0dddf33216964b4bf97f34f8bce4436bfa31f27f00ed2057e251ff2f7a31623a.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/0dddf33216964b4bf97f34f8bce4436bfa31f27f00ed2057e251ff2f7a31623a.json new file mode 100644 index 0000000..005d54a --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/0dddf33216964b4bf97f34f8bce4436bfa31f27f00ed2057e251ff2f7a31623a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "label": "dependencies.md", "file_type": "document", "source_file": "concepts/dependencies.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", "label": "\uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc758\uc874\uc131", "file_type": "document", "source_file": "concepts/dependencies.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\ubc31\uc5d4\ub4dc_python_3_12_7", "label": "\ubc31\uc5d4\ub4dc (Python 3.12.7)", "file_type": "document", "source_file": "concepts/dependencies.md", "source_location": "L11"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript_node_js", "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc (TypeScript/Node.js)", "file_type": "document", "source_file": "concepts/dependencies.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc120\uc815_\uc6d0\uce59_agent_md_3\uc808", "label": "\uc120\uc815 \uc6d0\uce59 (agent.md 3\uc808)", "file_type": "document", "source_file": "concepts/dependencies.md", "source_location": "L35"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\ubc31\uc5d4\ub4dc_python_3_12_7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript_node_js", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_\uc120\uc815_\uc6d0\uce59_agent_md_3\uc808", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/dependencies.md", "source_location": "L35", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/0f5b6dbb9bebbfa33f4d635f070de504af4b359fb90f4b29ba9688d1d6e17d2e.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/0f5b6dbb9bebbfa33f4d635f070de504af4b359fb90f4b29ba9688d1d6e17d2e.json new file mode 100644 index 0000000..40b1de3 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/0f5b6dbb9bebbfa33f4d635f070de504af4b359fb90f4b29ba9688d1d6e17d2e.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_md", "label": "a00_app_shell_framework_scaffold.md", "file_type": "document", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "label": "A00_Common \u2014 \uc2a4\uce90\ud3f4\ub4dc\u00b7CSS\u00b7\uc885\uc18d\uc131", "file_type": "document", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_b_page_scaffold", "label": "b_page_scaffold", "file_type": "document", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L11"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_css_\uc778\uc81d\uc158", "label": "CSS \uc778\uc81d\uc158", "file_type": "document", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L18"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_\uc885\uc18d\uc131", "label": "\uc885\uc18d\uc131", "file_type": "document", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L25"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_\uc0ac\uc6a9\ucc98", "label": "\uc0ac\uc6a9\ucc98", "file_type": "document", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L33"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b09_wf6_estimation_b09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_b_page_scaffold", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_css_\uc778\uc81d\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_\uc885\uc18d\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L25", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_\uc0ac\uc6a9\ucc98", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework_scaffold.md", "source_location": "L33", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/118279706a1eb23a45441e1ff8903d5dbd50d4d0b51975d3a17b60f7780055ca.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/118279706a1eb23a45441e1ff8903d5dbd50d4d0b51975d3a17b60f7780055ca.json new file mode 100644 index 0000000..29989f4 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/118279706a1eb23a45441e1ff8903d5dbd50d4d0b51975d3a17b60f7780055ca.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "label": "B01_api.md", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_b01_dashboard_api", "label": "B01_Dashboard \u2014 API", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\uc0ac\uc6a9\uc790_\ud68c\uc0ac", "label": "\uc0ac\uc6a9\uc790\u00b7\ud68c\uc0ac", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L14"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\ud68c\uc0ac_\uad00\ub9ac\uc790", "label": "\ud68c\uc0ac \uad00\ub9ac\uc790", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L25"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654", "label": "\ud504\ub85c\uc81d\ud2b8\u00b7\uc790\ub3d9\ud654", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L35"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790", "label": "\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L46"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_b01_dashboard_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_b01_dashboard_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\uc0ac\uc6a9\uc790_\ud68c\uc0ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L14", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_b01_dashboard_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\ud68c\uc0ac_\uad00\ub9ac\uc790", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L25", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_b01_dashboard_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L35", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_b01_dashboard_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_api_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_api.md", "source_location": "L46", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/145e767fcb59085a1ee13d461285411d8b86d513511ea6df46b3348775ca49a4.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/145e767fcb59085a1ee13d461285411d8b86d513511ea6df46b3348775ca49a4.json new file mode 100644 index 0000000..c776e29 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/145e767fcb59085a1ee13d461285411d8b86d513511ea6df46b3348775ca49a4.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "label": "B03_backend.md", "file_type": "document", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_b03_fileinput_backend", "label": "B03_FileInput \u2014 Backend", "file_type": "document", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_\uc785\ub825_\uac80\uc99d_\ud30c\uc77c_\ucc98\ub9ac", "label": "\uc785\ub825 \uac80\uc99d\u00b7\ud30c\uc77c \ucc98\ub9ac", "file_type": "document", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_\uba54\ud0c0\ub370\uc774\ud130_\ubd84\uc11d", "label": "\uba54\ud0c0\ub370\uc774\ud130 \ubd84\uc11d", "file_type": "document", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L22"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_\uc800\uc7a5\uc18c", "label": "\uc800\uc7a5\uc18c", "file_type": "document", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_workflow_\uc54c\ub9bc", "label": "workflow\u00b7\uc54c\ub9bc", "file_type": "document", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L40"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_b03_fileinput_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_b03_fileinput_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_\uc785\ub825_\uac80\uc99d_\ud30c\uc77c_\ucc98\ub9ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_b03_fileinput_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_\uba54\ud0c0\ub370\uc774\ud130_\ubd84\uc11d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_b03_fileinput_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_\uc800\uc7a5\uc18c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_b03_fileinput_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_workflow_\uc54c\ub9bc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L49", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_backend.md", "source_location": "L49", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/186d47f554f2e797fb63a3167221e324a92f283cd57fa229bc6d47bb5224d32b.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/186d47f554f2e797fb63a3167221e324a92f283cd57fa229bc6d47bb5224d32b.json new file mode 100644 index 0000000..726f460 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/186d47f554f2e797fb63a3167221e324a92f283cd57fa229bc6d47bb5224d32b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_md", "label": "B03_db.md", "file_type": "document", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", "label": "B03_FileInput \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", "file_type": "document", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_\ud30c\uc77c_\uacbd\ub85c", "label": "\ud30c\uc77c \uacbd\ub85c", "file_type": "document", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L22"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_db_schema_files_surface_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_\ud30c\uc77c_\uacbd\ub85c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_db.md", "source_location": "L29", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/1b226e5d018fc38a72090165fa26143b93b6e1c0a7e1073d8c15e0cdddbeb171.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/1b226e5d018fc38a72090165fa26143b93b6e1c0a7e1073d8c15e0cdddbeb171.json new file mode 100644 index 0000000..566e845 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/1b226e5d018fc38a72090165fa26143b93b6e1c0a7e1073d8c15e0cdddbeb171.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_md", "label": "README.md", "file_type": "document", "source_file": "concepts/db_schema/unconfirmed/README.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", "label": "\ubbf8\ud655\uc815 \ud14c\uc774\ube14 \ubcf4\uad00\uc18c (Unconfirmed DB Schemas)", "file_type": "document", "source_file": "concepts/db_schema/unconfirmed/README.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_\uc6b4\uc601_\uaddc\uce59", "label": "\uc6b4\uc601 \uaddc\uce59", "file_type": "document", "source_file": "concepts/db_schema/unconfirmed/README.md", "source_location": "L5"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/unconfirmed/README.md", "source_location": "L1", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_\uc6b4\uc601_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/unconfirmed/README.md", "source_location": "L5", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/1d05c804dd886b8148e1a246412e6c96776d60ed81e47cd559330fd26a8da829.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/1d05c804dd886b8148e1a246412e6c96776d60ed81e47cd559330fd26a8da829.json new file mode 100644 index 0000000..3dc48db --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/1d05c804dd886b8148e1a246412e6c96776d60ed81e47cd559330fd26a8da829.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_md", "label": "A08_backend.md", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "label": "A08_Support \u2014 Backend", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\ub0b4\ubd80_\ud5ec\ud37c", "label": "\ub0b4\ubd80 \ud5ec\ud37c", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L25"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\uc811\uc218_\ub85c\uc9c1", "label": "\uc811\uc218 \ub85c\uc9c1", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L37"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_db_\uc800\uc7a5_\uceec\ub7fc_\uc2e4_\ucf54\ub4dc_insert_\uae30\uc900", "label": "DB \uc800\uc7a5 \uceec\ub7fc (\uc2e4 \ucf54\ub4dc INSERT \uae30\uc900)", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L44"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\ud2b9\uc9d5", "label": "\ud2b9\uc9d5", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L51"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_db_\uc2a4\ud0a4\ub9c8_\ubd88\uc77c\uce58_\ud655\uc778_\ud544\uc694", "label": "\u26a0\ufe0f DB \uc2a4\ud0a4\ub9c8 \ubd88\uc77c\uce58 (\ud655\uc778 \ud544\uc694)", "file_type": "document", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L62"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_support_a08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\ub0b4\ubd80_\ud5ec\ud37c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L25", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\uc811\uc218_\ub85c\uc9c1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_db_\uc800\uc7a5_\uceec\ub7fc_\uc2e4_\ucf54\ub4dc_insert_\uae30\uc900", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\ud2b9\uc9d5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L51", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L58", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_a08_support_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_backend_db_\uc2a4\ud0a4\ub9c8_\ubd88\uc77c\uce58_\ud655\uc778_\ud544\uc694", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_backend.md", "source_location": "L62", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/1dad047374ae3b973fcdcaa189f843557fcfffe8364feccc7ebc92f3ddc04155.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/1dad047374ae3b973fcdcaa189f843557fcfffe8364feccc7ebc92f3ddc04155.json new file mode 100644 index 0000000..64d4f54 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/1dad047374ae3b973fcdcaa189f843557fcfffe8364feccc7ebc92f3ddc04155.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "label": "B06_dependencies.md", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_b06_wf3_profilecross_dependencies", "label": "B06_wf3_ProfileCross \u2014 Dependencies", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", "label": "\uacf5\ud1b5 \ubaa8\ub4c8", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L22"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_b06_wf3_profilecross_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_b06_wf3_profilecross_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L25", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", "source_location": "L26", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/1e373af97a118ae3015a3afa398085bf5df4a98ba74866cbe2f8697b00379869.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/1e373af97a118ae3015a3afa398085bf5df4a98ba74866cbe2f8697b00379869.json new file mode 100644 index 0000000..34a6080 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/1e373af97a118ae3015a3afa398085bf5df4a98ba74866cbe2f8697b00379869.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "label": "B01_frontend.md", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "label": "B01_Dashboard \u2014 Frontend", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\ud30c\uc77c\uacfc_\uc9c4\uc785\uc810", "label": "\ud30c\uc77c\uacfc \uc9c4\uc785\uc810", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_ui_\uad8c\ud55c_\ud5ec\ud37c", "label": "UI \uad8c\ud55c \ud5ec\ud37c", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\ubaa8\ub2ec", "label": "\ubaa8\ub2ec", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L32"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\uacf5\uc720_\uc790\uc6d0_\uc5f0\uacb0", "label": "\uacf5\uc720 \uc790\uc6d0 \uc5f0\uacb0", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\uae30\uc220\ubd80\ucc44", "label": "\uae30\uc220\ubd80\ucc44", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L52"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\ud30c\uc77c\uacfc_\uc9c4\uc785\uc810", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_ui_\uad8c\ud55c_\ud5ec\ud37c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\ubaa8\ub2ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L32", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\uacf5\uc720_\uc790\uc6d0_\uc5f0\uacb0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L49", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L50", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_frontend_\uae30\uc220\ubd80\ucc44", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_frontend.md", "source_location": "L52", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/1e9e4be64167f23705811ee00b005b84faf8b3e44cc65a78ac00683ff4cc92ea.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/1e9e4be64167f23705811ee00b005b84faf8b3e44cc65a78ac00683ff4cc92ea.json new file mode 100644 index 0000000..a40c71d --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/1e9e4be64167f23705811ee00b005b84faf8b3e44cc65a78ac00683ff4cc92ea.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_md", "label": "B05_frontend.md", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", "label": "B05_wf2_Route \u2014 Frontend", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_\ud654\uba74\uacfc_\uc0c1\ud638\uc791\uc6a9", "label": "\ud654\uba74\uacfc \uc0c1\ud638\uc791\uc6a9", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_\uc785\ub825_\uadf8\ub8f9", "label": "\uc785\ub825 \uadf8\ub8f9", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L29"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_\uae30\uc220\ubd80\ucc44", "label": "\uae30\uc220\ubd80\ucc44", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L40"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_\ud654\uba74\uacfc_\uc0c1\ud638\uc791\uc6a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_\uc785\ub825_\uadf8\ub8f9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_frontend_\uae30\uc220\ubd80\ucc44", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_frontend.md", "source_location": "L40", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/2511b51e4eb20cf62e268122c88d3fb89dbd706320402a4eccb759b58281fa0a.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/2511b51e4eb20cf62e268122c88d3fb89dbd706320402a4eccb759b58281fa0a.json new file mode 100644 index 0000000..e669bec --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/2511b51e4eb20cf62e268122c88d3fb89dbd706320402a4eccb759b58281fa0a.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "label": "B02_backend.md", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "label": "B02_ProjRegister \u2014 Backend", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L14"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L22"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\ud568\uc218", "label": "\ud568\uc218", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L28"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", "label": "\uc694\uccad/\uc751\ub2f5 \uc2a4\ud0a4\ub9c8 (Pydantic)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L38"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\uc0dd\uc131_\ub85c\uc9c1_create_project_\ud2b8\ub79c\uc7ad\uc158", "label": "\uc0dd\uc131 \ub85c\uc9c1 (create_project \ud2b8\ub79c\uc7ad\uc158)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_db_\uc800\uc7a5_\uceec\ub7fc_projects_insert", "label": "DB \uc800\uc7a5 \uceec\ub7fc (projects INSERT)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L61"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L69"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_projregister_b02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_projregister_b02_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L14", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L28", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L38", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\uc0dd\uc131_\ub85c\uc9c1_create_project_\ud2b8\ub79c\uc7ad\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_db_\uc800\uc7a5_\uceec\ub7fc_projects_insert", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_db_schema_projects_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L61", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L63", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L67", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_b02_projregister_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_backend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_backend.md", "source_location": "L69", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/2808d040f080236ab87ff5d059ee801796b07a63f6a114bd2a2109e0b5806e12.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/2808d040f080236ab87ff5d059ee801796b07a63f6a114bd2a2109e0b5806e12.json new file mode 100644 index 0000000..c0b7868 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/2808d040f080236ab87ff5d059ee801796b07a63f6a114bd2a2109e0b5806e12.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_md", "label": "A02_components.md", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", "label": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\ub370\uc774\ud130_\ud750\ub984", "label": "\ub370\uc774\ud130 \ud750\ub984", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L29"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\ubbf8\ud574\uacb0_\ud2b9\uc774\uc0ac\ud56d", "label": "\ubbf8\ud574\uacb0 / \ud2b9\uc774\uc0ac\ud56d", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L35"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_progdetail_a02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\ub370\uc774\ud130_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_components_\ubbf8\ud574\uacb0_\ud2b9\uc774\uc0ac\ud56d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_components.md", "source_location": "L35", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/29bd2bdc39958157c52fe4e872b1c1b0ff6b6f91aa809ee33b6be89c57ccd9fa.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/29bd2bdc39958157c52fe4e872b1c1b0ff6b6f91aa809ee33b6be89c57ccd9fa.json new file mode 100644 index 0000000..ba700c2 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/29bd2bdc39958157c52fe4e872b1c1b0ff6b6f91aa809ee33b6be89c57ccd9fa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "label": "users_auth.md", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "label": "DB: \uc0ac\uc6a9\uc790/\uc778\uc99d/\uc870\uc9c1 \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_users_\uc0ac\uc6a9\uc790", "label": "users (\uc0ac\uc6a9\uc790)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_companies_\ud68c\uc0ac", "label": "companies (\ud68c\uc0ac)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L32"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_sessions_\uc138\uc158", "label": "sessions (\uc138\uc158)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_email_otps_\uc774\uba54\uc77c_otp", "label": "email_otps (\uc774\uba54\uc77c OTP)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_trusted_devices_\uc2e0\ub8b0_\uae30\uae30", "label": "trusted_devices (\uc2e0\ub8b0 \uae30\uae30)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L65"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_join_requests_\ud68c\uc0ac_\uac00\uc785_\uc2e0\uccad", "label": "join_requests (\ud68c\uc0ac \uac00\uc785 \uc2e0\uccad)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L73"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_user_consents_\uc57d\uad00_\ub3d9\uc758", "label": "user_consents (\uc57d\uad00 \ub3d9\uc758)", "file_type": "document", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L84"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_users_\uc0ac\uc6a9\uc790", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_companies_\ud68c\uc0ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L32", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_sessions_\uc138\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_email_otps_\uc774\uba54\uc77c_otp", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_trusted_devices_\uc2e0\ub8b0_\uae30\uae30", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_join_requests_\ud68c\uc0ac_\uac00\uc785_\uc2e0\uccad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L73", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_user_consents_\uc57d\uad00_\ub3d9\uc758", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/users_auth.md", "source_location": "L84", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/2be5bc2fd35d20f0f1eb7c1c707e58347f2b10bcc8843f04fffa74fbdca4d2a7.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/2be5bc2fd35d20f0f1eb7c1c707e58347f2b10bcc8843f04fffa74fbdca4d2a7.json new file mode 100644 index 0000000..01833bd --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/2be5bc2fd35d20f0f1eb7c1c707e58347f2b10bcc8843f04fffa74fbdca4d2a7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_md", "label": "A03_frontend.md", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "label": "A03_CompDetail \u2014 Frontend", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L29"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L47"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ubc18\uc751\ud615", "label": "\ubc18\uc751\ud615", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L61"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L64"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L47", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\ubc18\uc751\ud615", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L61", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a03_compdetail_a03_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A03_CompDetail/A03_frontend.md", "source_location": "L64", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/2db81e60642ebe8f3ec8f7c3673d57ad41156fa1bf6f636be896aa2d44899709.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/2db81e60642ebe8f3ec8f7c3673d57ad41156fa1bf6f636be896aa2d44899709.json new file mode 100644 index 0000000..152215c --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/2db81e60642ebe8f3ec8f7c3673d57ad41156fa1bf6f636be896aa2d44899709.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_md", "label": "B06_db.md", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", "label": "B06_wf3_ProfileCross \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_repository_\ud568\uc218", "label": "Repository \ud568\uc218", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_\ud30c\uc77c_\uacbd\ub85c", "label": "\ud30c\uc77c \uacbd\ub85c", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L29"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_db_schema_route_profile_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_repository_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_\ud30c\uc77c_\uacbd\ub85c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", "source_location": "L35", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/32b6d000932825989e419a4136794b28850890191432179205576bde15298bf5.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/32b6d000932825989e419a4136794b28850890191432179205576bde15298bf5.json new file mode 100644 index 0000000..1361e97 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/32b6d000932825989e419a4136794b28850890191432179205576bde15298bf5.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "label": "files_surface.md", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "label": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_upload_sessions_\uc5c5\ub85c\ub4dc_\uc138\uc158", "label": "upload_sessions (\uc5c5\ub85c\ub4dc \uc138\uc158)", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_upload_chunks_\uc5c5\ub85c\ub4dc_\uccad\ud06c_\ub370\uc774\ud130", "label": "upload_chunks (\uc5c5\ub85c\ub4dc \uccad\ud06c \ub370\uc774\ud130)", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_input_files_\uc785\ub825_\uc6d0\ubcf8_\ud30c\uc77c", "label": "input_files (\uc785\ub825 \uc6d0\ubcf8 \ud30c\uc77c)", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L35"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_processed_point_cloud_\ud544\ud130_\ubcc0\ud658_\ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc", "label": "processed_point_cloud (\ud544\ud130/\ubcc0\ud658 \ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc)", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L48"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_surface_models_\uc9c0\ud45c\uba74_\ubaa8\ub378_\ubc0f_\ub4f1\uace0\uc120", "label": "surface_models (\uc9c0\ud45c\uba74 \ubaa8\ub378 \ubc0f \ub4f1\uace0\uc120)", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L64"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_terrain_layers_\uc9c0\ud615_\ub808\uc774\uc5b4", "label": "terrain_layers (\uc9c0\ud615 \ub808\uc774\uc5b4)", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L77"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_input_files_status_\uac12", "label": "input_files.status \uac12", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L89"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_surface_models_status_processed_point_cloud_status_\uac12", "label": "surface_models.status / processed_point_cloud.status \uac12", "file_type": "document", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L92"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_upload_sessions_\uc5c5\ub85c\ub4dc_\uc138\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_upload_chunks_\uc5c5\ub85c\ub4dc_\uccad\ud06c_\ub370\uc774\ud130", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_input_files_\uc785\ub825_\uc6d0\ubcf8_\ud30c\uc77c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L35", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_processed_point_cloud_\ud544\ud130_\ubcc0\ud658_\ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L48", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_surface_models_\uc9c0\ud45c\uba74_\ubaa8\ub378_\ubc0f_\ub4f1\uace0\uc120", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L64", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_terrain_layers_\uc9c0\ud615_\ub808\uc774\uc5b4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L77", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_input_files_status_\uac12", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L89", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_surface_models_status_processed_point_cloud_status_\uac12", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L92", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b04_wf1_surface_b04_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L95", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/files_surface.md", "source_location": "L95", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/36e9c3aa280793956998877458fc2ac0767eeec0172efa0542cb863877908fcb.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/36e9c3aa280793956998877458fc2ac0767eeec0172efa0542cb863877908fcb.json new file mode 100644 index 0000000..d5f979f --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/36e9c3aa280793956998877458fc2ac0767eeec0172efa0542cb863877908fcb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_md", "label": "B05_db.md", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", "label": "B05_wf2_Route \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_repository_\ud568\uc218", "label": "Repository \ud568\uc218", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_\uc800\uc7a5_\uacbd\ub85c", "label": "\uc800\uc7a5 \uacbd\ub85c", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L30"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_db_schema_route_profile_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_repository_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_\uc800\uc7a5_\uacbd\ub85c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_db.md", "source_location": "L36", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/37aa0d07aa6c480aa555897c7a3b552f3c4918332701b292c8140bd177fae0f3.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/37aa0d07aa6c480aa555897c7a3b552f3c4918332701b292c8140bd177fae0f3.json new file mode 100644 index 0000000..b8b57b8 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/37aa0d07aa6c480aa555897c7a3b552f3c4918332701b292c8140bd177fae0f3.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_md", "label": "B06_frontend.md", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", "label": "B06_wf3_ProfileCross \u2014 Frontend", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_\ud654\uba74_workflow", "label": "\ud654\uba74\u00b7workflow", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_\uc785\ub825_\uc635\uc158", "label": "\uc785\ub825 \uc635\uc158", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L30"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_\ud654\uba74_workflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_frontend_\uc785\ub825_\uc635\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", "source_location": "L30", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/3db683a2cde7e94a133978113563de2a3fd70d54fdde9b2002e15145901824c1.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/3db683a2cde7e94a133978113563de2a3fd70d54fdde9b2002e15145901824c1.json new file mode 100644 index 0000000..aaae741 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/3db683a2cde7e94a133978113563de2a3fd70d54fdde9b2002e15145901824c1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "label": "A09_frontend.md", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "label": "A09_Security \u2014 Frontend", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L25"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc57d\uad00_\ub370\uc774\ud130_a09_security_terms_ts", "label": "\uc57d\uad00 \ub370\uc774\ud130 (A09_Security_Terms.ts)", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218_\ubbf8\uc0ac\uc6a9_\uc815\uc758\ub9cc", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218 (\u26a0\ufe0f \ubbf8\uc0ac\uc6a9, \uc815\uc758\ub9cc)", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L40"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L53"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L64"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc57d\uad00_\ud14d\uc2a4\ud2b8\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", "label": "\u26a0\ufe0f \uc57d\uad00 \ud14d\uc2a4\ud2b8\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L69"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L75"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_security_a09_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a06_login_a06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L25", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc57d\uad00_\ub370\uc774\ud130_a09_security_terms_ts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218_\ubbf8\uc0ac\uc6a9_\uc815\uc758\ub9cc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L55", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L64", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc57d\uad00_\ud14d\uc2a4\ud2b8\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L69", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L72", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_a09_security_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_frontend.md", "source_location": "L75", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/430bcc25e31726266357a8339dcac795f30c714099326f504dcf44364ffdfd63.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/430bcc25e31726266357a8339dcac795f30c714099326f504dcf44364ffdfd63.json new file mode 100644 index 0000000..036a734 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/430bcc25e31726266357a8339dcac795f30c714099326f504dcf44364ffdfd63.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_md", "label": "A02_frontend.md", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", "label": "A02_ProgDetail \u2014 Frontend", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\uad6c\uc870", "label": "\uad6c\uc870", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ubd84\uc11d", "label": "\ucef4\ud3ec\ub10c\ud2b8 \ubd84\uc11d", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L16"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\uc81c\uc57d_\uc900\uc218", "label": "\uc81c\uc57d \uc900\uc218", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\uc138\ubd80_\uad6c\ud604", "label": "\uc138\ubd80 \uad6c\ud604", "file_type": "document", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L31"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_progdetail_a02_components_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ubd84\uc11d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L16", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\uc81c\uc57d_\uc900\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a02_progdetail_a02_frontend_\uc138\ubd80_\uad6c\ud604", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A02_ProgDetail/A02_frontend.md", "source_location": "L31", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/464194e04c304a155a3445c411403400b6239ad5460dfad3ccdeb03da87f41fb.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/464194e04c304a155a3445c411403400b6239ad5460dfad3ccdeb03da87f41fb.json new file mode 100644 index 0000000..738dc18 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/464194e04c304a155a3445c411403400b6239ad5460dfad3ccdeb03da87f41fb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_md", "label": "B06_backend.md", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", "label": "B06_wf3_ProfileCross \u2014 Backend", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", "label": "\uc694\uccad\u00b7\uc751\ub2f5 \ubaa8\ub378", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\uc0dd\uc131_\uc5d4\uc9c4", "label": "\uc0dd\uc131 \uc5d4\uc9c4", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\ub77c\uc6b0\ud130_workflow", "label": "\ub77c\uc6b0\ud130\u00b7workflow", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\uc7ac\uc2e4\ud589", "label": "\uc7ac\uc2e4\ud589", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L39"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\uc0dd\uc131_\uc5d4\uc9c4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\ub77c\uc6b0\ud130_workflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_backend_\uc7ac\uc2e4\ud589", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", "source_location": "L39", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/474c775ef5ef23ed26e38b39828a52131bedb7f8a770ad07dc99148df7e87c5b.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/474c775ef5ef23ed26e38b39828a52131bedb7f8a770ad07dc99148df7e87c5b.json new file mode 100644 index 0000000..d1a62ad --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/474c775ef5ef23ed26e38b39828a52131bedb7f8a770ad07dc99148df7e87c5b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "label": "B04_backend.md", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "label": "B04_wf1_Surface \u2014 Backend", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\ud30c\uc77c_\uad6c\uc131_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130_\uc800\uc7a5\uc18c_\ub77c\uc6b0\ud130", "label": "\ud30c\uc77c \uad6c\uc131 (\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130/\uc800\uc7a5\uc18c/\ub77c\uc6b0\ud130)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc5d4\uc9c4_\uc11c\ube0c\ubaa8\ub4c8", "label": "\uc5d4\uc9c4 \uc11c\ube0c\ubaa8\ub4c8", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc8fc\uc694_\ud568\uc218_router", "label": "\uc8fc\uc694 \ud568\uc218 (Router)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L35"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc804\uc774", "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc0c1\ud0dc \uc804\uc774", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L44"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\ub808\uac70\uc2dc_\ud3f4\ubc31_416_420\uc904", "label": "\u26a0\ufe0f \ub808\uac70\uc2dc \ud3f4\ubc31 (416,420\uc904)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L53"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\ucc45\uc784", "label": "\ucc45\uc784", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L62"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L66"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\ud30c\uc77c_\uad6c\uc131_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130_\uc800\uc7a5\uc18c_\ub77c\uc6b0\ud130", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc5d4\uc9c4_\uc11c\ube0c\ubaa8\ub4c8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc8fc\uc694_\ud568\uc218_router", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L35", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc804\uc774", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L51", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\ub808\uac70\uc2dc_\ud3f4\ubc31_416_420\uc904", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\ucc45\uc784", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L66", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_backend.md", "source_location": "L68", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/479a8e4089e3bb7a2cc81032c56fd9af63de315e299c5bfaa734f3dc729d25a1.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/479a8e4089e3bb7a2cc81032c56fd9af63de315e299c5bfaa734f3dc729d25a1.json new file mode 100644 index 0000000..b85aeb9 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/479a8e4089e3bb7a2cc81032c56fd9af63de315e299c5bfaa734f3dc729d25a1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "label": "route_profile.md", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "label": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_routes_\ub178\uc120_\uacbd\ub85c", "label": "routes (\ub178\uc120 \uacbd\ub85c)", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_route_points_\uacbd\ub85c_\uc88c\ud45c\uc810", "label": "route_points (\uacbd\ub85c \uc88c\ud45c\uc810)", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_route_statistics_\ub178\uc120_\ud1b5\uacc4", "label": "route_statistics (\ub178\uc120 \ud1b5\uacc4)", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L36"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", "label": "longitudinal_sections (\uc885\ub2e8\uba74 \uc124\uacc4)", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_cross_sections_\ud6a1\ub2e8\uba74_\uc124\uacc4", "label": "cross_sections (\ud6a1\ub2e8\uba74 \uc124\uacc4)", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L55"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_routes_status_\ud750\ub984", "label": "routes.status \ud750\ub984", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L65"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_cross_sections_data_structures", "label": "cross_sections.data.structures", "file_type": "document", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L68"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_routes_\ub178\uc120_\uacbd\ub85c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_route_points_\uacbd\ub85c_\uc88c\ud45c\uc810", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_route_statistics_\ub178\uc120_\ud1b5\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_cross_sections_\ud6a1\ub2e8\uba74_\uc124\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L55", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_routes_status_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_cross_sections_data_structures", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L68", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/route_profile.md", "source_location": "L69", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/49fd7d94d4b60db667d3b09b49911f92d55600a624ab7905ccbc6e3ad42a3352.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/49fd7d94d4b60db667d3b09b49911f92d55600a624ab7905ccbc6e3ad42a3352.json new file mode 100644 index 0000000..ce0ab54 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/49fd7d94d4b60db667d3b09b49911f92d55600a624ab7905ccbc6e3ad42a3352.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_md", "label": "A01_components.md", "file_type": "document", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", "label": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", "file_type": "document", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\uc2a4\ud0c0\uc77c", "label": "\uc2a4\ud0c0\uc77c", "file_type": "document", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\ub370\uc774\ud130_\ud750\ub984", "label": "\ub370\uc774\ud130 \ud750\ub984", "file_type": "document", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\ubbf8\ud574\uacb0", "label": "\ubbf8\ud574\uacb0", "file_type": "document", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L34"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\uc2a4\ud0c0\uc77c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\ub370\uc774\ud130_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_components_\ubbf8\ud574\uacb0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_components.md", "source_location": "L34", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/4a5f18486fb810daf3f1c5b1551536726d973ee824de69be0d36d0a60322cdaa.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/4a5f18486fb810daf3f1c5b1551536726d973ee824de69be0d36d0a60322cdaa.json new file mode 100644 index 0000000..b773414 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/4a5f18486fb810daf3f1c5b1551536726d973ee824de69be0d36d0a60322cdaa.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_md", "label": "B02_frontend.md", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "label": "B02_ProjRegister \u2014 Frontend", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc785\ub825_\ud544\ub4dc", "label": "\uc785\ub825 \ud544\ub4dc", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L26"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc81c\ucd9c_\ub85c\uc9c1", "label": "\uc81c\ucd9c \ub85c\uc9c1", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L37"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L57"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L66"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L72"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L80"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_projregister_b02_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc785\ub825_\ud544\ub4dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L26", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc81c\ucd9c_\ub85c\uc9c1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L57", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L66", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L72", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_b02_projregister_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b02_projregister_b02_frontend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B02_ProjRegister/B02_frontend.md", "source_location": "L80", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/4b09b67e025ab679214a595ed4288633a2c58d466bff1f2e195d8ad42e74d686.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/4b09b67e025ab679214a595ed4288633a2c58d466bff1f2e195d8ad42e74d686.json new file mode 100644 index 0000000..53c6dff --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/4b09b67e025ab679214a595ed4288633a2c58d466bff1f2e195d8ad42e74d686.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_md", "label": "B08_db.md", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_b08_wf5_quantity_db", "label": "B08_wf5_Quantity \u2014 DB", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_\uad6c\ud604_\ub300\uae30_\ud56d\ubaa9", "label": "\uad6c\ud604 \ub300\uae30 \ud56d\ubaa9", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L19"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_b08_wf5_quantity_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_db_schema_structure_output_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L16", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L17", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_b08_wf5_quantity_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_\uad6c\ud604_\ub300\uae30_\ud56d\ubaa9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_db.md", "source_location": "L29", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/4df26e4d9121bc917f5542182c4d4b90fe7405d00db5ca205080ab8b2fcba450.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/4df26e4d9121bc917f5542182c4d4b90fe7405d00db5ca205080ab8b2fcba450.json new file mode 100644 index 0000000..376bdb7 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/4df26e4d9121bc917f5542182c4d4b90fe7405d00db5ca205080ab8b2fcba450.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "label": "index.md", "file_type": "document", "source_file": "index.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_wiki_index", "label": "Wiki Index", "file_type": "document", "source_file": "index.md", "source_location": "L6"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "label": "\ud398\uc774\uc9c0 \u2014 \ub85c\uadf8\uc778 \ud6c4 \uc6cc\ud06c\ud50c\ub85c\uc6b0 (B01~B09)", "file_type": "document", "source_file": "index.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b01_dashboard_b01_backend_b01_dashboard", "label": "[[B01_Dashboard/B01_backend|B01_Dashboard]]", "file_type": "document", "source_file": "index.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b02_projregister_b02_backend_b02_projregister", "label": "[[B02_ProjRegister/B02_backend|B02_ProjRegister]]", "file_type": "document", "source_file": "index.md", "source_location": "L15"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b03_fileinput_b03_backend_b03_fileinput", "label": "[[B03_FileInput/B03_backend|B03_FileInput]]", "file_type": "document", "source_file": "index.md", "source_location": "L18"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b04_wf1_surface_b04_backend_b04_wf1_surface", "label": "[[B04_wf1_Surface/B04_backend|B04_wf1_Surface]]", "file_type": "document", "source_file": "index.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b05_wf2_route_b05_backend_b05_wf2_route", "label": "[[B05_wf2_Route/B05_backend|B05_wf2_Route]]", "file_type": "document", "source_file": "index.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross", "label": "[[B06_wf3_ProfileCross/B06_backend|B06_wf3_ProfileCross]]", "file_type": "document", "source_file": "index.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail", "label": "[[B07_wf4_DesignDetail/B07_frontend|B07_wf4_DesignDetail]]", "file_type": "document", "source_file": "index.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b08_wf5_quantity_b08_frontend_b08_wf5_quantity", "label": "[[B08_wf5_Quantity/B08_frontend|B08_wf5_Quantity]]", "file_type": "document", "source_file": "index.md", "source_location": "L33"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b09_wf6_estimation_b09_frontend_b09_wf6_estimation", "label": "[[B09_wf6_Estimation/B09_frontend|B09_wf6_Estimation]]", "file_type": "document", "source_file": "index.md", "source_location": "L36"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "label": "\ud398\uc774\uc9c0 \u2014 \ub85c\uadf8\uc778 \uc804 (A01~A09)", "file_type": "document", "source_file": "index.md", "source_location": "L39"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a01_home_a01_frontend_a01_home", "label": "[[A01_Home/A01_frontend|A01_Home]]", "file_type": "document", "source_file": "index.md", "source_location": "L41"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a02_progdetail_a02_frontend_a02_progdetail", "label": "[[A02_ProgDetail/A02_frontend|A02_ProgDetail]]", "file_type": "document", "source_file": "index.md", "source_location": "L44"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a03_compdetail_a03_frontend_a03_compdetail", "label": "[[A03_CompDetail/A03_frontend|A03_CompDetail]]", "file_type": "document", "source_file": "index.md", "source_location": "L47"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a04_newshistory_a04_frontend_a04_newshistory", "label": "[[A04_NewsHistory/A04_frontend|A04_NewsHistory]]", "file_type": "document", "source_file": "index.md", "source_location": "L50"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a05_edudetail_a05_frontend_a05_edudetail", "label": "[[A05_EduDetail/A05_frontend|A05_EduDetail]]", "file_type": "document", "source_file": "index.md", "source_location": "L53"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a06_login_a06_backend_a06_login", "label": "[[A06_Login/A06_backend|A06_Login]]", "file_type": "document", "source_file": "index.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a07_register_a07_backend_a07_register", "label": "[[A07_Register/A07_backend|A07_Register]]", "file_type": "document", "source_file": "index.md", "source_location": "L59"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a08_support_a08_backend_a08_support", "label": "[[A08_Support/A08_backend|A08_Support]]", "file_type": "document", "source_file": "index.md", "source_location": "L62"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a09_security_a09_backend_a09_security", "label": "[[A09_Security/A09_backend|A09_Security]]", "file_type": "document", "source_file": "index.md", "source_location": "L65"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "label": "\uac1c\ub150 (Concepts)", "file_type": "document", "source_file": "index.md", "source_location": "L68"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a00_app_shell_framework", "label": "[[a00_app_shell_framework]]", "file_type": "document", "source_file": "index.md", "source_location": "L70"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a00_app_shell_framework_scaffold", "label": "[[a00_app_shell_framework_scaffold]]", "file_type": "document", "source_file": "index.md", "source_location": "L73"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_ui_templates", "label": "[[ui_templates]]", "file_type": "document", "source_file": "index.md", "source_location": "L76"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_db_\uc2a4\ud0a4\ub9c8", "label": "DB \uc2a4\ud0a4\ub9c8", "file_type": "document", "source_file": "index.md", "source_location": "L79"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_auth_rbac", "label": "[[auth_rbac]]", "file_type": "document", "source_file": "index.md", "source_location": "L89"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_storage_paths", "label": "[[storage_paths]]", "file_type": "document", "source_file": "index.md", "source_location": "L92"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_common_util", "label": "[[common_util]]", "file_type": "document", "source_file": "index.md", "source_location": "L95"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uacf5\ud1b5 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8)", "file_type": "document", "source_file": "index.md", "source_location": "L98"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uc758\uc874\uc131_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac", "label": "\uc758\uc874\uc131 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac)", "file_type": "document", "source_file": "index.md", "source_location": "L101"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", "label": "\uacf5\ud1b5 \uc2a4\ud0a4\ub9c8 (Pydantic \uc694\uccad/\uc751\ub2f5 \ubaa8\ub378)", "file_type": "document", "source_file": "index.md", "source_location": "L104"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_workflow_\uc0c1\ud0dc_\uad00\ub9ac", "label": "Workflow \uc0c1\ud0dc \uad00\ub9ac", "file_type": "document", "source_file": "index.md", "source_location": "L107"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ubbf8\ud574\uacb0_\ud56d\ubaa9", "label": "\u26a0\ufe0f \ubbf8\ud574\uacb0 \ud56d\ubaa9", "file_type": "document", "source_file": "index.md", "source_location": "L110"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\uc774\uc288", "label": "A\uadf8\ub8f9 \uc778\uc81c\uc2a4\ud2b8 \uc774\uc288", "file_type": "document", "source_file": "index.md", "source_location": "L116"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_wiki_index", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L6", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_wiki_index", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b01_dashboard_b01_backend_b01_dashboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b02_projregister_b02_backend_b02_projregister", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b03_fileinput_b03_backend_b03_fileinput", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b04_wf1_surface_b04_backend_b04_wf1_surface", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b05_wf2_route_b05_backend_b05_wf2_route", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b07_wf4_designdetail_b07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b08_wf5_quantity_b08_frontend_b08_wf5_quantity", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b09_wf6_estimation_b09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_b09_wf6_estimation_b09_frontend_b09_wf6_estimation", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_wiki_index", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L39", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L41", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a01_home_a01_frontend_a01_home", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L41", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a02_progdetail_a02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a02_progdetail_a02_frontend_a02_progdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a03_compdetail_a03_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L47", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a03_compdetail_a03_frontend_a03_compdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L47", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a04_newshistory_a04_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L50", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a04_newshistory_a04_frontend_a04_newshistory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L50", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a05_edudetail_a05_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a05_edudetail_a05_frontend_a05_edudetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a06_login_a06_backend_a06_login", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a07_register_a07_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a07_register_a07_backend_a07_register", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a08_support_a08_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a08_support_a08_backend_a08_support", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a09_security_a09_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a09_security_a09_backend_a09_security", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_wiki_index", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L68", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L70", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a00_app_shell_framework", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L70", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a00_app_shell_framework_scaffold_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L73", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a00_app_shell_framework_scaffold", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L73", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L76", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_ui_templates", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L76", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_db_\uc2a4\ud0a4\ub9c8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L79", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L80", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_users_auth_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L81", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L82", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_projects_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L83", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_files_surface_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L84", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_route_profile_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L85", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_structure_output_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L86", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_unconfirmed_readme_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L87", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L89", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_auth_rbac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L89", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L92", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_storage_paths", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L92", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L95", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_common_util", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L95", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L98", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_api_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L99", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uc758\uc874\uc131_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L101", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L102", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L104", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_schema_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L105", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\uac1c\ub150_concepts", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_workflow_\uc0c1\ud0dc_\uad00\ub9ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L107", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L108", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_wiki_index", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ubbf8\ud574\uacb0_\ud56d\ubaa9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L110", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_\ubbf8\ud574\uacb0_\ud56d\ubaa9", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_index_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\uc774\uc288", "relation": "contains", "confidence": "EXTRACTED", "source_file": "index.md", "source_location": "L116", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/50e6b6bf0066bb5b891dbcf8988ee06ec3918a47e2e33f1bba85cc3d586c424c.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/50e6b6bf0066bb5b891dbcf8988ee06ec3918a47e2e33f1bba85cc3d586c424c.json new file mode 100644 index 0000000..62ed5fe --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/50e6b6bf0066bb5b891dbcf8988ee06ec3918a47e2e33f1bba85cc3d586c424c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_md", "label": "A08_frontend.md", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "label": "A08_Support \u2014 Frontend", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc81c\ucd9c_\ub85c\uc9c1", "label": "\uc81c\ucd9c \ub85c\uc9c1", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc138\uc158_\uc790\ub3d9_\ucc44\uc6c0", "label": "\uc138\uc158 \uc790\ub3d9 \ucc44\uc6c0", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L34"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L39"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L51"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L59"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L65"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L73"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_support_a08_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc81c\ucd9c_\ub85c\uc9c1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc138\uc158_\uc790\ub3d9_\ucc44\uc6c0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L34", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a06_login_a06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L39", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L51", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_a08_support_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a08_support_a08_frontend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A08_Support/A08_frontend.md", "source_location": "L73", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/52811408853b074f152e72eca98203c800db677004bc8ae75c253e28b0464ee1.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/52811408853b074f152e72eca98203c800db677004bc8ae75c253e28b0464ee1.json new file mode 100644 index 0000000..fbf4cea --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/52811408853b074f152e72eca98203c800db677004bc8ae75c253e28b0464ee1.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "label": "overview.md", "file_type": "document", "source_file": "concepts/db_schema/overview.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", "label": "DB \uc2a4\ud0a4\ub9c8 \uac1c\uc694", "file_type": "document", "source_file": "concepts/db_schema/overview.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\ud14c\uc774\ube14_\uadf8\ub8f9_9\uac1c", "label": "\ud14c\uc774\ube14 \uadf8\ub8f9 (9\uac1c)", "file_type": "document", "source_file": "concepts/db_schema/overview.md", "source_location": "L22"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\ud30c\uc77c_\uacbd\ub85c_\ucd94\uc801_\uceec\ub7fc_db\uc5d0_\uacbd\ub85c\ub9cc_\uae30\ub85d_\uc2e4_\ud30c\uc77c\uc740_\ud30c\uc77c\uc2dc\uc2a4\ud15c", "label": "\ud30c\uc77c \uacbd\ub85c \ucd94\uc801 \uceec\ub7fc (DB\uc5d0 \uacbd\ub85c\ub9cc \uae30\ub85d, \uc2e4 \ud30c\uc77c\uc740 \ud30c\uc77c\uc2dc\uc2a4\ud15c)", "file_type": "document", "source_file": "concepts/db_schema/overview.md", "source_location": "L34"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\uc124\uacc4_\uc6d0\uce59", "label": "\uc124\uacc4 \uc6d0\uce59", "file_type": "document", "source_file": "concepts/db_schema/overview.md", "source_location": "L51"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\ud14c\uc774\ube14_\uad00\uacc4_\ud575\uc2ec_\ud750\ub984", "label": "\ud14c\uc774\ube14 \uad00\uacc4 (\ud575\uc2ec \ud750\ub984)", "file_type": "document", "source_file": "concepts/db_schema/overview.md", "source_location": "L56"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L16", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L17", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_unconfirmed_readme_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\ud14c\uc774\ube14_\uadf8\ub8f9_9\uac1c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L26", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L28", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_files_surface_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_route_profile_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\ud30c\uc77c_\uacbd\ub85c_\ucd94\uc801_\uceec\ub7fc_db\uc5d0_\uacbd\ub85c\ub9cc_\uae30\ub85d_\uc2e4_\ud30c\uc77c\uc740_\ud30c\uc77c\uc2dc\uc2a4\ud15c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L34", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L49", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\uc124\uacc4_\uc6d0\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L51", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_\ud14c\uc774\ube14_\uad00\uacc4_\ud575\uc2ec_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/overview.md", "source_location": "L56", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/54d5ac3300a973b62932c4e49e96e3aefea664dc1af074865d994a02ceea83e7.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/54d5ac3300a973b62932c4e49e96e3aefea664dc1af074865d994a02ceea83e7.json new file mode 100644 index 0000000..9237eb1 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/54d5ac3300a973b62932c4e49e96e3aefea664dc1af074865d994a02ceea83e7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "label": "B06_api.md", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_b06_wf3_profilecross_api", "label": "B06_wf3_ProfileCross \u2014 API", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_\uc0dd\uc131_\uc751\ub2f5", "label": "\uc0dd\uc131 \uc751\ub2f5", "file_type": "document", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L20"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_wf3_profilecross_b06_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_b06_wf3_profilecross_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_b06_wf3_profilecross_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b06_wf3_profilecross_b06_api_\uc0dd\uc131_\uc751\ub2f5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", "source_location": "L20", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/5fec6364bd060aef3f2afe819bea5354565d898bbb2169efed8ae55d8aba79cc.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/5fec6364bd060aef3f2afe819bea5354565d898bbb2169efed8ae55d8aba79cc.json new file mode 100644 index 0000000..8c3d229 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/5fec6364bd060aef3f2afe819bea5354565d898bbb2169efed8ae55d8aba79cc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "label": "A01_frontend.md", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "label": "A01_Home \u2014 Frontend", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", "label": "\ucef4\ud3ec\ub10c\ud2b8", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_hero_\uc139\uc158", "label": "Hero \uc139\uc158", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucd5c\uc2e0_\uc18c\uc2dd_\uc139\uc158", "label": "\ucd5c\uc2e0 \uc18c\uc2dd \uc139\uc158", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L26"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\uc8fc\uc694_\uae30\ub2a5_\uc139\uc158", "label": "\uc8fc\uc694 \uae30\ub2a5 \uc139\uc158", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L36"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L43"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\uc138\ubd80_\uad6c\ud604", "label": "\uc138\ubd80 \uad6c\ud604", "file_type": "document", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L58"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a02_progdetail_a02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a04_newshistory_a04_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_hero_\uc139\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucd5c\uc2e0_\uc18c\uc2dd_\uc139\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L26", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\uc8fc\uc694_\uae30\ub2a5_\uc139\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L43", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_a01_home_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_\uc138\ubd80_\uad6c\ud604", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L58", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a01_home_a01_home_a01_components_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A01_Home/A01_frontend.md", "source_location": "L60", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/645ae1caf18f1055571c195d5af0488bcb975554ef4227b5d294117aa14d35bc.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/645ae1caf18f1055571c195d5af0488bcb975554ef4227b5d294117aa14d35bc.json new file mode 100644 index 0000000..75ade42 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/645ae1caf18f1055571c195d5af0488bcb975554ef4227b5d294117aa14d35bc.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "label": "projects.md", "file_type": "document", "source_file": "concepts/db_schema/projects.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", "label": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/db_schema/projects.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_projects_\ud504\ub85c\uc81d\ud2b8", "label": "projects (\ud504\ub85c\uc81d\ud2b8)", "file_type": "document", "source_file": "concepts/db_schema/projects.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_project_versions_\ud504\ub85c\uc81d\ud2b8_\ubc84\uc804_\uc2a4\ub0c5\uc0f7", "label": "project_versions (\ud504\ub85c\uc81d\ud2b8 \ubc84\uc804 \uc2a4\ub0c5\uc0f7)", "file_type": "document", "source_file": "concepts/db_schema/projects.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_project_automations_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654_\uc815\ucc45", "label": "project_automations (\ud504\ub85c\uc81d\ud2b8 \uc790\ub3d9\ud654 \uc815\ucc45)", "file_type": "document", "source_file": "concepts/db_schema/projects.md", "source_location": "L40"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_project_workflow_stages_\ub2e8\uacc4\ubcc4_\uc0c1\uc138_\uc0c1\ud0dc", "label": "project_workflow_stages (\ub2e8\uacc4\ubcc4 \uc0c1\uc138 \uc0c1\ud0dc)", "file_type": "document", "source_file": "concepts/db_schema/projects.md", "source_location": "L54"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_projects_\ud504\ub85c\uc81d\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L25", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_project_versions_\ud504\ub85c\uc81d\ud2b8_\ubc84\uc804_\uc2a4\ub0c5\uc0f7", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_project_automations_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654_\uc815\ucc45", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_project_workflow_stages_\ub2e8\uacc4\ubcc4_\uc0c1\uc138_\uc0c1\ud0dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_projects_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/projects.md", "source_location": "L56", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/646d6ab79be622a7ff0a6e70be8cff4eba1d7a96287360cb7c92afbf09ce3094.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/646d6ab79be622a7ff0a6e70be8cff4eba1d7a96287360cb7c92afbf09ce3094.json new file mode 100644 index 0000000..ed1d571 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/646d6ab79be622a7ff0a6e70be8cff4eba1d7a96287360cb7c92afbf09ce3094.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_md", "label": "B01_backend.md", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_b01_dashboard_backend", "label": "B01_Dashboard \u2014 Backend", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\ub77c\uc6b0\ud130_\uad8c\ud55c_\ud5ec\ud37c", "label": "\ub77c\uc6b0\ud130 \uad8c\ud55c \ud5ec\ud37c", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\uc800\uc7a5\uc18c_\ud568\uc218", "label": "\uc800\uc7a5\uc18c \ud568\uc218", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8", "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L44"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\uae30\uc220\ubd80\ucc44", "label": "\uae30\uc220\ubd80\ucc44", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L54"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_b01_dashboard_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_b01_dashboard_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\ub77c\uc6b0\ud130_\uad8c\ud55c_\ud5ec\ud37c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_b01_dashboard_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\uc800\uc7a5\uc18c_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_b01_dashboard_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_b01_dashboard_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_backend_\uae30\uc220\ubd80\ucc44", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_backend.md", "source_location": "L54", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/671505750d39bdfee5448654c63c865bd82059e3dd905065e164202716f19204.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/671505750d39bdfee5448654c63c865bd82059e3dd905065e164202716f19204.json new file mode 100644 index 0000000..3d3d957 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/671505750d39bdfee5448654c63c865bd82059e3dd905065e164202716f19204.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "label": "structure_output.md", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "label": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_structures_\ubc30\uce58_\uad6c\uc870\ubb3c", "label": "structures (\ubc30\uce58 \uad6c\uc870\ubb3c)", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_quantity_items_\uc218\ub7c9_\uc0b0\ucd9c_\ud56d\ubaa9", "label": "quantity_items (\uc218\ub7c9 \uc0b0\ucd9c \ud56d\ubaa9)", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L29"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_outputs_\ucd5c\uc885_\uacac\uc801_\ub3c4\uba74_\uc0b0\ucd9c_\uc138\uc158", "label": "outputs (\ucd5c\uc885 \uacac\uc801/\ub3c4\uba74 \uc0b0\ucd9c \uc138\uc158)", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L42"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_output_files_\uac1c\ubcc4_\uc0b0\ucd9c_\ud30c\uc77c_\ub9ac\uc2a4\ud2b8", "label": "output_files (\uac1c\ubcc4 \uc0b0\ucd9c \ud30c\uc77c \ub9ac\uc2a4\ud2b8)", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L54"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_quantity_items_\ucd1d\ube44\uc6a9_\uacc4\uc0b0_\uc608", "label": "quantity_items \ucd1d\ube44\uc6a9 \uacc4\uc0b0 \uc608", "file_type": "document", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L65"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b07_wf4_designdetail_b07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b09_wf6_estimation_b09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_structures_\ubc30\uce58_\uad6c\uc870\ubb3c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_quantity_items_\uc218\ub7c9_\uc0b0\ucd9c_\ud56d\ubaa9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_outputs_\ucd5c\uc885_\uacac\uc801_\ub3c4\uba74_\uc0b0\ucd9c_\uc138\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L42", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_output_files_\uac1c\ubcc4_\uc0b0\ucd9c_\ud30c\uc77c_\ub9ac\uc2a4\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_structure_output_quantity_items_\ucd1d\ube44\uc6a9_\uacc4\uc0b0_\uc608", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/structure_output.md", "source_location": "L65", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/777dc18c8da82ae19d1ef4696015cf4a4f34c2c07d0b440fe86da472081038b8.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/777dc18c8da82ae19d1ef4696015cf4a4f34c2c07d0b440fe86da472081038b8.json new file mode 100644 index 0000000..81fe0a9 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/777dc18c8da82ae19d1ef4696015cf4a4f34c2c07d0b440fe86da472081038b8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_md", "label": "AGENTS.md", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_wiki_\ud3f4\ub354_\uaddc\uce59", "label": "wiki/ \ud3f4\ub354 \uaddc\uce59", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_\uad6c\uc870", "label": "\uad6c\uc870", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L5"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_\uc791\uc131_\uaddc\uce59", "label": "\uc791\uc131 \uaddc\uce59", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L11"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_wiki_\ud3f4\ub354_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L1", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_wiki_\ud3f4\ub354_\uaddc\uce59", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_wiki_\ud3f4\ub354_\uaddc\uce59", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_\uc791\uc131_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_agents_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_\ud398\uc774\uc9c0\uba85_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L14", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/7a20bcee60ba41e229ef85f767421d7179a7ae138805534d5a8f104afc477a40.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/7a20bcee60ba41e229ef85f767421d7179a7ae138805534d5a8f104afc477a40.json new file mode 100644 index 0000000..2a8bb4a --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/7a20bcee60ba41e229ef85f767421d7179a7ae138805534d5a8f104afc477a40.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_md", "label": "CLAUDE.md", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_wiki_\ud3f4\ub354_\uaddc\uce59", "label": "wiki/ \ud3f4\ub354 \uaddc\uce59", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_\uad6c\uc870", "label": "\uad6c\uc870", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L5"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_\uc791\uc131_\uaddc\uce59", "label": "\uc791\uc131 \uaddc\uce59", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L11"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_wiki_\ud3f4\ub354_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L1", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_wiki_\ud3f4\ub354_\uaddc\uce59", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_wiki_\ud3f4\ub354_\uaddc\uce59", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_\uc791\uc131_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_claude_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_\ud398\uc774\uc9c0\uba85_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L14", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/7b7b025371ec01828e5296e1181ed9c5c4381d26906e595e1bf74b413f559880.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/7b7b025371ec01828e5296e1181ed9c5c4381d26906e595e1bf74b413f559880.json new file mode 100644 index 0000000..4ebb1a1 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/7b7b025371ec01828e5296e1181ed9c5c4381d26906e595e1bf74b413f559880.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_md", "label": "schema_common.md", "file_type": "document", "source_file": "concepts/schema_common.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", "label": "\uacf5\ud1b5 \uc2a4\ud0a4\ub9c8 (Pydantic \uc694\uccad/\uc751\ub2f5 \uaddc\uce59)", "file_type": "document", "source_file": "concepts/schema_common.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uac80\uc99d_\uc6d0\uce59_backend_md_4\uc808", "label": "\uac80\uc99d \uc6d0\uce59 (backend.md 4\uc808)", "file_type": "document", "source_file": "concepts/schema_common.md", "source_location": "L11"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uba85\uba85_\uaddc\uce59", "label": "\uba85\uba85 \uaddc\uce59", "file_type": "document", "source_file": "concepts/schema_common.md", "source_location": "L16"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/schema_common.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uac80\uc99d_\uc6d0\uce59_backend_md_4\uc808", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/schema_common.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_\uba85\uba85_\uaddc\uce59", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/schema_common.md", "source_location": "L16", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/7fb3857a81e71036c1ce149c4b7245df62a5739b3547ecf4cabbdad69ea26f7d.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/7fb3857a81e71036c1ce149c4b7245df62a5739b3547ecf4cabbdad69ea26f7d.json new file mode 100644 index 0000000..9dd018f --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/7fb3857a81e71036c1ce149c4b7245df62a5739b3547ecf4cabbdad69ea26f7d.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "label": "logs_monitoring.md", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "label": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_login_logs_\ub85c\uadf8\uc778_\uc2dc\ub3c4_\ub85c\uadf8", "label": "login_logs (\ub85c\uadf8\uc778 \uc2dc\ub3c4 \ub85c\uadf8)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_activity_logs_\uc0ac\uc6a9\uc790_\ud65c\ub3d9_\ub85c\uadf8", "label": "activity_logs (\uc0ac\uc6a9\uc790 \ud65c\ub3d9 \ub85c\uadf8)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L23"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_audit_logs_\uac10\uc0ac_\ub85c\uadf8", "label": "audit_logs (\uac10\uc0ac \ub85c\uadf8)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L33"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_audit_logs_\ud504\ub85c\uc81d\ud2b8_\uc870\uc9c1_\ubcc0\uacbd_\uac10\uc0ac_\ub85c\uadf8", "label": "system_audit_logs (\ud504\ub85c\uc81d\ud2b8/\uc870\uc9c1 \ubcc0\uacbd \uac10\uc0ac \ub85c\uadf8)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L43"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_admin_logs_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\ud589\uc704_\ub85c\uadf8", "label": "system_admin_logs (\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790 \ud589\uc704 \ub85c\uadf8)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L53"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_resources_\uc2dc\uc2a4\ud15c_\uc790\uc6d0_\uacc4\uce21", "label": "system_resources (\uc2dc\uc2a4\ud15c \uc790\uc6d0 \uacc4\uce21)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L62"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_support_requests_\uae30\uc220_\uc9c0\uc6d0_\uc694\uccad", "label": "support_requests (\uae30\uc220 \uc9c0\uc6d0 \uc694\uccad)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L71"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_change_logs_\uc124\uacc4_\ubcc0\uacbd_\uc774\ub825", "label": "change_logs (\uc124\uacc4 \ubcc0\uacbd \uc774\ub825)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L83"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_audit_logs_\uc0ac\uc6a9\ucc98_b01_b02", "label": "system_audit_logs \u2014 \uc0ac\uc6a9\ucc98 (B01, B02)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L96"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_\ub9ac\uc18c\uc2a4_api_system_admin_\uc804\uc6a9", "label": "\ub9ac\uc18c\uc2a4 API (SYSTEM_ADMIN \uc804\uc6a9)", "file_type": "document", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L100"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_login_logs_\ub85c\uadf8\uc778_\uc2dc\ub3c4_\ub85c\uadf8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_activity_logs_\uc0ac\uc6a9\uc790_\ud65c\ub3d9_\ub85c\uadf8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_audit_logs_\uac10\uc0ac_\ub85c\uadf8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_audit_logs_\ud504\ub85c\uc81d\ud2b8_\uc870\uc9c1_\ubcc0\uacbd_\uac10\uc0ac_\ub85c\uadf8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L43", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_admin_logs_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\ud589\uc704_\ub85c\uadf8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_resources_\uc2dc\uc2a4\ud15c_\uc790\uc6d0_\uacc4\uce21", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_support_requests_\uae30\uc220_\uc9c0\uc6d0_\uc694\uccad", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L71", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_change_logs_\uc124\uacc4_\ubcc0\uacbd_\uc774\ub825", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L83", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_a08_support_a08_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L94", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_system_audit_logs_\uc0ac\uc6a9\ucc98_b01_b02", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L96", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L97", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_logs_monitoring_\ub9ac\uc18c\uc2a4_api_system_admin_\uc804\uc6a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/db_schema/logs_monitoring.md", "source_location": "L100", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/864c1304191de6468d4edc50434ec59bea00a7f2d0eee6bacc57ecbf7b4f7e04.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/864c1304191de6468d4edc50434ec59bea00a7f2d0eee6bacc57ecbf7b4f7e04.json new file mode 100644 index 0000000..d8c2b48 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/864c1304191de6468d4edc50434ec59bea00a7f2d0eee6bacc57ecbf7b4f7e04.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "label": "storage_paths.md", "file_type": "document", "source_file": "concepts/storage_paths.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", "label": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", "file_type": "document", "source_file": "concepts/storage_paths.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uacbd\ub85c_\ud328\ud134", "label": "\uacbd\ub85c \ud328\ud134", "file_type": "document", "source_file": "concepts/storage_paths.md", "source_location": "L11"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc6d0\uce59_backend_md_3\uc808", "label": "\uc6d0\uce59 (backend.md 3\uc808)", "file_type": "document", "source_file": "concepts/storage_paths.md", "source_location": "L23"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_db_\uceec\ub7fc_\uc2e4\uc81c_\uacbd\ub85c_\ub9e4\ud551", "label": "DB \uceec\ub7fc \u2194 \uc2e4\uc81c \uacbd\ub85c \ub9e4\ud551", "file_type": "document", "source_file": "concepts/storage_paths.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\ud30c\uc77c\uba85_\uaddc\uce59_structure_md_1\uc808", "label": "\ud30c\uc77c\uba85 \uaddc\uce59 (structure.md 1\uc808)", "file_type": "document", "source_file": "concepts/storage_paths.md", "source_location": "L33"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b07_wf4_designdetail_b07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b09_wf6_estimation_b09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uacbd\ub85c_\ud328\ud134", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc6d0\uce59_backend_md_3\uc808", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_db_\uceec\ub7fc_\uc2e4\uc81c_\uacbd\ub85c_\ub9e4\ud551", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_\ud30c\uc77c\uba85_\uaddc\uce59_structure_md_1\uc808", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/storage_paths.md", "source_location": "L33", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/87a19225130d879a47fa512b619a4dfcd67d6a13bcfed08f9280892d055b7aec.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/87a19225130d879a47fa512b619a4dfcd67d6a13bcfed08f9280892d055b7aec.json new file mode 100644 index 0000000..b67e1b7 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/87a19225130d879a47fa512b619a4dfcd67d6a13bcfed08f9280892d055b7aec.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "label": "A06_frontend.md", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "label": "A06_Login \u2014 Frontend", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", "label": "\uc81c\ucd9c \ub85c\uc9c1 (2\ub2e8\uacc4 \ud3fc \uc804\ud658)", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L40"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L51"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L64"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L72"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L79"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a07_register_a07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L38", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L51", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L64", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L72", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_a06_login_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_frontend.md", "source_location": "L79", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/890159057c1b315dc2f987cc22cff3d9f78d8a6b70c16341450a63a15eea1e79.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/890159057c1b315dc2f987cc22cff3d9f78d8a6b70c16341450a63a15eea1e79.json new file mode 100644 index 0000000..029d493 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/890159057c1b315dc2f987cc22cff3d9f78d8a6b70c16341450a63a15eea1e79.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_md", "label": "A04_frontend.md", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "label": "A04_NewsHistory \u2014 Frontend", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_mock_\ub370\uc774\ud130_\uad6c\uc870", "label": "Mock \ub370\uc774\ud130 \uad6c\uc870", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L48"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L60"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L62"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ubc18\uc751\ud615", "label": "\ubc18\uc751\ud615", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L75"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L78"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ubbf8\ud574\uacb0_\uc0ac\ud56d", "label": "\ubbf8\ud574\uacb0 \uc0ac\ud56d", "file_type": "document", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L83"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_mock_\ub370\uc774\ud130_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L48", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L60", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ubc18\uc751\ud615", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L75", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L78", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a04_newshistory_a04_frontend_\ubbf8\ud574\uacb0_\uc0ac\ud56d", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A04_NewsHistory/A04_frontend.md", "source_location": "L83", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/8d85ff410419578b818f52078b23e7a3d3a4a7c9d3c18d6994a3d65420b74bd8.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/8d85ff410419578b818f52078b23e7a3d3a4a7c9d3c18d6994a3d65420b74bd8.json new file mode 100644 index 0000000..b7a1ce4 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/8d85ff410419578b818f52078b23e7a3d3a4a7c9d3c18d6994a3d65420b74bd8.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "label": "B04_frontend.md", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "label": "B04_wf1_Surface \u2014 Frontend", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58_3d_\ubdf0\uc5b4", "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58 (3D \ubdf0\uc5b4)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L22"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L32"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L40"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\ucc98\ub9ac_\ud750\ub984", "label": "\ucc98\ub9ac \ud750\ub984", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L53"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L60"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58_3d_\ubdf0\uc5b4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L32", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\ucc98\ub9ac_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L60", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_frontend.md", "source_location": "L62", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/90d7356198e73e4cc9f6377549bb422cac5171f209ac35465cb3cf6afd457c55.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/90d7356198e73e4cc9f6377549bb422cac5171f209ac35465cb3cf6afd457c55.json new file mode 100644 index 0000000..5142a68 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/90d7356198e73e4cc9f6377549bb422cac5171f209ac35465cb3cf6afd457c55.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "label": "a00_app_shell_framework.md", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "label": "A00_Common \u2014 App Shell Framework", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud30c\uc77c_\uad6c\uc131", "label": "\ud30c\uc77c \uad6c\uc131", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "label": "app_shell \uad6c\uc131\uc694\uc18c", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud14c\ub9c8_\uc5b8\uc5b4_\uad00\ub9ac", "label": "\ud14c\ub9c8 & \uc5b8\uc5b4 \uad00\ub9ac", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L22"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud5e4\ub354_\uad6c\uc131_64px_\ub192\uc774_sticky", "label": "\ud5e4\ub354 \uad6c\uc131 (64px \ub192\uc774, sticky)", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\uc778\uc99d_\ubc84\ud2bc_\ube44\ub3d9\uae30_fillauthactions", "label": "\uc778\uc99d \ubc84\ud2bc (\ube44\ub3d9\uae30 fillAuthActions)", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L40"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ub85c\uadf8\uc544\uc6c3_onapp_logout_click", "label": "\ub85c\uadf8\uc544\uc6c3 (onApp_Logout_Click)", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L44"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud478\ud130", "label": "\ud478\ud130", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L48"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_router_\ub77c\uc6b0\ud305_\ud14c\uc774\ube14", "label": "router \ub77c\uc6b0\ud305 \ud14c\uc774\ube14", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L52"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\uc778\uc99d_\uac00\ub4dc", "label": "\uc778\uc99d \uac00\ub4dc", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L77"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\uc138\ubd80_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "label": "\uc138\ubd80 \uc2a4\uce90\ud3f4\ub4dc\u00b7CSS\u00b7\uc885\uc18d\uc131", "file_type": "document", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L84"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a02_progdetail_a02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud30c\uc77c_\uad6c\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud14c\ub9c8_\uc5b8\uc5b4_\uad00\ub9ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud5e4\ub354_\uad6c\uc131_64px_\ub192\uc774_sticky", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\uc778\uc99d_\ubc84\ud2bc_\ube44\ub3d9\uae30_fillauthactions", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ub85c\uadf8\uc544\uc6c3_onapp_logout_click", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\ud478\ud130", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L48", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_router_\ub77c\uc6b0\ud305_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L52", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\uc778\uc99d_\uac00\ub4dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L77", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_a00_common_app_shell_framework", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_\uc138\ubd80_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L84", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_scaffold_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/a00_app_shell_framework.md", "source_location": "L86", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/913554bc65be372e31038c5b6db99ffb11804957097d503d81077bbf581c6403.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/913554bc65be372e31038c5b6db99ffb11804957097d503d81077bbf581c6403.json new file mode 100644 index 0000000..ee9bab0 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/913554bc65be372e31038c5b6db99ffb11804957097d503d81077bbf581c6403.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "label": "workflow_state.md", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "label": "Workflow \uc0c1\ud0dc \uad00\ub9ac \u2014 \uad6c\ud604 \uc644\ub8cc (\uc2e4 DB \ud655\uc778\ub428)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_ssot_project_workflow_stages_\ud14c\uc774\ube14_\uc2e4_db_\ud655\uc778", "label": "SSOT: `project_workflow_stages` \ud14c\uc774\ube14 (\uc2e4 DB \ud655\uc778)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L13"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uacf5\ud1b5_\uc720\ud2f8_common_util_common_util_workflow_state_py", "label": "\uacf5\ud1b5 \uc720\ud2f8 `common_util/common_util_workflow_state.py`", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uc2e4_\uc5f0\ub3d9_\ud604\ud669_\ud30c\uc77c_\uc904\ubc88\ud638", "label": "\uc2e4 \uc5f0\ub3d9 \ud604\ud669 (\ud30c\uc77c:\uc904\ubc88\ud638)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L37"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uc870\ud68c_api_\uc2e4\uc81c_\uc874\uc7ac_\uacc4\ud68d\uc11c\uc640_\uacbd\ub85c_\uc77c\uce58", "label": "\uc870\ud68c API (\uc2e4\uc81c \uc874\uc7ac, \uacc4\ud68d\uc11c\uc640 \uacbd\ub85c \uc77c\uce58)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L47"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uc0c1\ud0dc_\uc804\uc774_\uad6c\ud604\ub300\ub85c", "label": "\uc0c1\ud0dc \uc804\uc774 (\uad6c\ud604\ub300\ub85c)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L54"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_projects_status_\ubb38\uc790\uc5f4_\uce90\uc2dc_\ud638\ud658\uc6a9_\uacc4\ud68d\uc11c_\ubc29\uce68\ub300\ub85c_\uc720\uc9c0_\uc911", "label": "projects.status \ubb38\uc790\uc5f4 \uce90\uc2dc (\ud638\ud658\uc6a9, \uacc4\ud68d\uc11c \ubc29\uce68\ub300\ub85c \uc720\uc9c0 \uc911)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L62"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_b04_\uc0c1\ud0dc_\uc870\ud68c_\ub808\uac70\uc2dc_\ud3f4\ubc31_\ub2f9\ucd08_\uc794\uc7ac_\ub85c_\ud45c\uae30\ud588\uc73c\ub098_\uc815\uc815", "label": "B04 \uc0c1\ud0dc \uc870\ud68c \u2014 \ub808\uac70\uc2dc \ud3f4\ubc31 (\ub2f9\ucd08 \"\uc794\uc7ac\"\ub85c \ud45c\uae30\ud588\uc73c\ub098 \uc815\uc815)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L65"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\ubbf8\ud574\uacb0_\uc0ac\ud56d_\uacc4\ud68d\uc11c_\uc6d0\ubb38_\uc544\uc9c1_\uacb0\uc815_\uc548_\ub428", "label": "\ubbf8\ud574\uacb0 \uc0ac\ud56d (\uacc4\ud68d\uc11c \uc6d0\ubb38, \uc544\uc9c1 \uacb0\uc815 \uc548 \ub428)", "file_type": "document", "source_file": "concepts/workflow_state.md", "source_location": "L72"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b07_wf4_designdetail_b07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b09_wf6_estimation_b09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_ssot_project_workflow_stages_\ud14c\uc774\ube14_\uc2e4_db_\ud655\uc778", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uacf5\ud1b5_\uc720\ud2f8_common_util_common_util_workflow_state_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uc2e4_\uc5f0\ub3d9_\ud604\ud669_\ud30c\uc77c_\uc904\ubc88\ud638", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uc870\ud68c_api_\uc2e4\uc81c_\uc874\uc7ac_\uacc4\ud68d\uc11c\uc640_\uacbd\ub85c_\uc77c\uce58", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L47", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\uc0c1\ud0dc_\uc804\uc774_\uad6c\ud604\ub300\ub85c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_projects_status_\ubb38\uc790\uc5f4_\uce90\uc2dc_\ud638\ud658\uc6a9_\uacc4\ud68d\uc11c_\ubc29\uce68\ub300\ub85c_\uc720\uc9c0_\uc911", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_b04_\uc0c1\ud0dc_\uc870\ud68c_\ub808\uac70\uc2dc_\ud3f4\ubc31_\ub2f9\ucd08_\uc794\uc7ac_\ub85c_\ud45c\uae30\ud588\uc73c\ub098_\uc815\uc815", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_\ubbf8\ud574\uacb0_\uc0ac\ud56d_\uacc4\ud68d\uc11c_\uc6d0\ubb38_\uc544\uc9c1_\uacb0\uc815_\uc548_\ub428", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/workflow_state.md", "source_location": "L72", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/9216484c57c256629ee59314bc7d4b9e8ef66c3d8458b9ea16a3f73dd370fe52.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/9216484c57c256629ee59314bc7d4b9e8ef66c3d8458b9ea16a3f73dd370fe52.json new file mode 100644 index 0000000..a6b4e78 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/9216484c57c256629ee59314bc7d4b9e8ef66c3d8458b9ea16a3f73dd370fe52.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_md", "label": "B08_frontend.md", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", "label": "B08_wf5_Quantity \u2014 Frontend", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\ud604\uc7ac_\uad6c\ud604", "label": "\ud604\uc7ac \uad6c\ud604", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\ud654\uba74_\uc0c1\ud0dc", "label": "\ud654\uba74 \uc0c1\ud0dc", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\uacc4\ud68d_\ucc45\uc784", "label": "\uacc4\ud68d \ucc45\uc784", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\uae30\uc220\ubd80\ucc44", "label": "\uae30\uc220\ubd80\ucc44", "file_type": "document", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L39"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_wf5_quantity_b08_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\ud604\uc7ac_\uad6c\ud604", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\ud654\uba74_\uc0c1\ud0dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\uacc4\ud68d_\ucc45\uc784", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b08_wf5_quantity_b08_frontend_\uae30\uc220\ubd80\ucc44", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", "source_location": "L39", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/944204e569fb7c208be3dd6b08b83c70b5229be9c7f932926aeb285b77807561.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/944204e569fb7c208be3dd6b08b83c70b5229be9c7f932926aeb285b77807561.json new file mode 100644 index 0000000..6f683e0 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/944204e569fb7c208be3dd6b08b83c70b5229be9c7f932926aeb285b77807561.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "label": "B03_dependencies.md", "file_type": "document", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", "label": "B03_FileInput \u2014 Dependencies", "file_type": "document", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", "label": "\uacf5\ud1b5 \ubaa8\ub4c8", "file_type": "document", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L24"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_dependencies.md", "source_location": "L28", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/9691ebb53407e479750a796e82774905fe22139f5b049c3f7dc0ad6534c378cf.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/9691ebb53407e479750a796e82774905fe22139f5b049c3f7dc0ad6534c378cf.json new file mode 100644 index 0000000..ff1bebf --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/9691ebb53407e479750a796e82774905fe22139f5b049c3f7dc0ad6534c378cf.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_md", "label": "B05_dependencies.md", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_b05_wf2_route_dependencies", "label": "B05_wf2_Route \u2014 Dependencies", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_\ud398\uc774\uc9c0_\ud30c\uc77c\ubcc4_\uc5f0\uacb0", "label": "\ud398\uc774\uc9c0 \ud30c\uc77c\ubcc4 \uc5f0\uacb0", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L23"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_b05_wf2_route_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_b05_wf2_route_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_dependencies_\ud398\uc774\uc9c0_\ud30c\uc77c\ubcc4_\uc5f0\uacb0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_dependencies.md", "source_location": "L23", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/97478cabbb537844beae71898c5b219a2b94edecb3285f81207390133befebed.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/97478cabbb537844beae71898c5b219a2b94edecb3285f81207390133befebed.json new file mode 100644 index 0000000..dd43ef1 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/97478cabbb537844beae71898c5b219a2b94edecb3285f81207390133befebed.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_md", "label": "B04_dependencies.md", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", "label": "B04_wf1_Surface \u2014 Dependencies", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_\ubc31\uc5d4\ub4dc_python", "label": "\ubc31\uc5d4\ub4dc (Python)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript", "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc (TypeScript)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_dependencies_concept_\uc815\uc815_\ud544\uc694", "label": "\u26a0\ufe0f dependencies concept \uc815\uc815 \ud544\uc694", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L30"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_\ubc31\uc5d4\ub4dc_python", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_dependencies_dependencies_concept_\uc815\uc815_\ud544\uc694", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", "source_location": "L30", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/981095fcec47154f4626fb3eab7ecdc4407e949a7aa702a13130c8e1b70920ec.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/981095fcec47154f4626fb3eab7ecdc4407e949a7aa702a13130c8e1b70920ec.json new file mode 100644 index 0000000..1379e4e --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/981095fcec47154f4626fb3eab7ecdc4407e949a7aa702a13130c8e1b70920ec.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "label": "B01_dependencies.md", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", "label": "B01_Dashboard \u2014 Dependencies", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_\ud504\ub85c\uc81d\ud2b8_\uacf5\ud1b5_\ubaa8\ub4c8", "label": "\ud504\ub85c\uc81d\ud2b8 \uacf5\ud1b5 \ubaa8\ub4c8", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L23"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_\ud504\ub85c\uc81d\ud2b8_\uacf5\ud1b5_\ubaa8\ub4c8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L26", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dependencies_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_dependencies.md", "source_location": "L28", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/a38a8ca962fdacc272da8439e0d7d9d1e1c542bc8b65333fd5579891c9857361.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/a38a8ca962fdacc272da8439e0d7d9d1e1c542bc8b65333fd5579891c9857361.json new file mode 100644 index 0000000..fdc66c5 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/a38a8ca962fdacc272da8439e0d7d9d1e1c542bc8b65333fd5579891c9857361.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "label": "api_common.md", "file_type": "document", "source_file": "concepts/api_common.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uacf5\ud1b5 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8)", "file_type": "document", "source_file": "concepts/api_common.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_\uacf5\ud1b5_\uc624\ub958_\uc751\ub2f5_\ud3ec\ub9f7_\uc804_\ub77c\uc6b0\ud130", "label": "\uacf5\ud1b5 \uc624\ub958 \uc751\ub2f5 \ud3ec\ub9f7 (\uc804 \ub77c\uc6b0\ud130)", "file_type": "document", "source_file": "concepts/api_common.md", "source_location": "L11"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc870\ud68c", "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc0c1\ud0dc \uc870\ud68c", "file_type": "document", "source_file": "concepts/api_common.md", "source_location": "L17"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_\ud3f4\ub9c1_\ud328\ud134_legacy_workflow_json_\uc124\uacc4_\ud604\uc7ac_\uad6c\ud604\uc740_workflow_state_api_\uc0ac\uc6a9", "label": "\ud3f4\ub9c1 \ud328\ud134 (legacy workflow.json \uc124\uacc4; \ud604\uc7ac \uad6c\ud604\uc740 workflow-state API \uc0ac\uc6a9)", "file_type": "document", "source_file": "concepts/api_common.md", "source_location": "L25"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_\uacf5\ud1b5_\uc624\ub958_\uc751\ub2f5_\ud3ec\ub9f7_\uc804_\ub77c\uc6b0\ud130", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_schema_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc870\ud68c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L17", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_\ud3f4\ub9c1_\ud328\ud134_legacy_workflow_json_\uc124\uacc4_\ud604\uc7ac_\uad6c\ud604\uc740_workflow_state_api_\uc0ac\uc6a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/api_common.md", "source_location": "L25", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/a6d3afe6fc8285143b839973bd8506e5c74fa12760a92b9d72930d4a96d07742.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/a6d3afe6fc8285143b839973bd8506e5c74fa12760a92b9d72930d4a96d07742.json new file mode 100644 index 0000000..e5e4a24 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/a6d3afe6fc8285143b839973bd8506e5c74fa12760a92b9d72930d4a96d07742.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_md", "label": "B05_backend.md", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "label": "B05_wf2_Route \u2014 Backend", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", "label": "\uc694\uccad\u00b7\uc751\ub2f5 \ubaa8\ub378", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uacbd\ub85c_\uacc4\uc0b0_\uc5d4\uc9c4", "label": "\uacbd\ub85c \uacc4\uc0b0 \uc5d4\uc9c4", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L20"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uae30\ud558_\uacb0\uacfc_\ubcc0\ud658", "label": "\uae30\ud558\u00b7\uacb0\uacfc \ubcc0\ud658", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\ub77c\uc6b0\ud130_workflow", "label": "\ub77c\uc6b0\ud130\u00b7workflow", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L39"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uae30\uc220\ubd80\ucc44", "label": "\uae30\uc220\ubd80\ucc44", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L46"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uacbd\ub85c_\uacc4\uc0b0_\uc5d4\uc9c4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uae30\ud558_\uacb0\uacfc_\ubcc0\ud658", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\ub77c\uc6b0\ud130_workflow", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L39", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L44", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_backend_\uae30\uc220\ubd80\ucc44", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_backend.md", "source_location": "L46", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/aacc52798876b1c9f1528049e014dfff812e4362029bf2900537a635cea03345.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/aacc52798876b1c9f1528049e014dfff812e4362029bf2900537a635cea03345.json new file mode 100644 index 0000000..1348d63 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/aacc52798876b1c9f1528049e014dfff812e4362029bf2900537a635cea03345.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "label": "A06_backend.md", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "label": "A06_Login \u2014 Backend", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ub0b4\ubd80_\ud5ec\ud37c", "label": "\ub0b4\ubd80 \ud5ec\ud37c", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L29"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L37"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ub85c\uadf8\uc778_\ub85c\uc9c1_\ud750\ub984", "label": "\ub85c\uadf8\uc778 \ub85c\uc9c1 \ud750\ub984", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ubcf4\uc548_\uc815\ucc45_\uc2e4_\ucf54\ub4dc_\uae30\uc900", "label": "\ubcf4\uc548 \uc815\ucc45 (\uc2e4 \ucf54\ub4dc \uae30\uc900)", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L54"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L60"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58", "file_type": "document", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L66"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_login_a06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a07_register_a07_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a09_security_a09_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ub0b4\ubd80_\ud5ec\ud37c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L29", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L37", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ub85c\uadf8\uc778_\ub85c\uc9c1_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\ubcf4\uc548_\uc815\ucc45_\uc2e4_\ucf54\ub4dc_\uae30\uc900", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L60", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_a06_login_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a06_login_a06_backend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A06_Login/A06_backend.md", "source_location": "L66", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/ab34ed804dca07323ea78583add067fd18e7d17a741c99321bd6c782e82c7c82.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/ab34ed804dca07323ea78583add067fd18e7d17a741c99321bd6c782e82c7c82.json new file mode 100644 index 0000000..3214b02 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/ab34ed804dca07323ea78583add067fd18e7d17a741c99321bd6c782e82c7c82.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_md", "label": "A05_frontend.md", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "label": "A05_EduDetail \u2014 Frontend", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L28"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L41"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L43"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ubc18\uc751\ud615", "label": "\ubc18\uc751\ud615", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L59"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L65"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L28", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L41", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L43", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\ubc18\uc751\ud615", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a05_edudetail_a05_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A05_EduDetail/A05_frontend.md", "source_location": "L65", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/b274d5ee1fd61e7bc3013ac1dfaba29d570264ad0322202e9f907db6a7cd5717.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/b274d5ee1fd61e7bc3013ac1dfaba29d570264ad0322202e9f907db6a7cd5717.json new file mode 100644 index 0000000..bad2616 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/b274d5ee1fd61e7bc3013ac1dfaba29d570264ad0322202e9f907db6a7cd5717.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "label": "A09_backend.md", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "label": "A09_Security \u2014 Backend", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\ub9c8\uc2a4\ud130_\ud68c\uc0ac_\uad00\ub9ac\uc790_\uc804\uc6a9_require_master", "label": "\ub9c8\uc2a4\ud130(\ud68c\uc0ac \uad00\ub9ac\uc790) \uc804\uc6a9 \u2014 `require_master`", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\uc804\uc6a9_require_system_admin", "label": "\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790 \uc804\uc6a9 \u2014 `require_system_admin`", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc778\uc99d_\uc0ac\uc6a9\uc790_\uacf5\ud1b5_verify_session", "label": "\uc778\uc99d \uc0ac\uc6a9\uc790 \uacf5\ud1b5 \u2014 `verify_session`", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L39"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L45"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_db_\uc800\uc7a5_activity_logs", "label": "DB \uc800\uc7a5 (activity_logs)", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L55"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uad8c\ud55c_\ud5ec\ud37c", "label": "\uad8c\ud55c \ud5ec\ud37c", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L60"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L67"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L73"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_security_a09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a07_register_a07_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\ub9c8\uc2a4\ud130_\ud68c\uc0ac_\uad00\ub9ac\uc790_\uc804\uc6a9_require_master", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\uc804\uc6a9_require_system_admin", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc778\uc99d_\uc0ac\uc6a9\uc790_\uacf5\ud1b5_verify_session", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L39", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L45", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_db_\uc800\uc7a5_activity_logs", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L55", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L58", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uad8c\ud55c_\ud5ec\ud37c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L60", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L67", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L69", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L70", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_db_schema_users_auth_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L71", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_a09_security_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a09_security_a09_backend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A09_Security/A09_backend.md", "source_location": "L73", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/bc8f362e6683fa0ae51daf283b5d2a7813c06e0dc3f073f5680c831ecf7292f0.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/bc8f362e6683fa0ae51daf283b5d2a7813c06e0dc3f073f5680c831ecf7292f0.json new file mode 100644 index 0000000..9344507 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/bc8f362e6683fa0ae51daf283b5d2a7813c06e0dc3f073f5680c831ecf7292f0.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "label": "log.md", "file_type": "document", "source_file": "log.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "label": "Wiki Log", "file_type": "document", "source_file": "log.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uad6c\ud615_\uc0c1\uc704_\ud3f4\ub354_\ud0c8\ucd9c_\ub9c1\ud06c_concepts_\uc804\uc218_\uc815\ubc00_\uad50\uc815", "label": "[2026-07-12] lint | \uad6c\ud615 \uc0c1\uc704 \ud3f4\ub354 \ud0c8\ucd9c \ub9c1\ud06c(../../concepts/) \uc804\uc218 \uc815\ubc00 \uad50\uc815", "file_type": "document", "source_file": "log.md", "source_location": "L6"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_5\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\uba54\ud0c0_\uc815\ubcf4_\uc815\ubc00_\ubcf4\uc644", "label": "[2026-07-12] lint | 5\ud68c \ubc18\ubcf5 \ub9b0\ud2b8-\uac1c\uc120 \uc0ac\uc774\ud074 \uc218\ud589 \ubc0f \uc704\ud0a4 \uba54\ud0c0 \uc815\ubcf4 \uc815\ubc00 \ubcf4\uc644", "file_type": "document", "source_file": "log.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_db_34\uac1c_\ud14c\uc774\ube14_\uc804\uc218_\uceec\ub7fc_\uc2e4\uce21_\ubc0f_\uc704\ud0a4_\ucd5c\uc2e0\ud654", "label": "[2026-07-12] ingest | DB 34\uac1c \ud14c\uc774\ube14 \uc804\uc218 \uceec\ub7fc \uc2e4\uce21 \ubc0f \uc704\ud0a4 \ucd5c\uc2e0\ud654", "file_type": "document", "source_file": "log.md", "source_location": "L17"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_lint_3\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\ubb34\uacb0\uc131_\ud655\ubcf4", "label": "[2026-07-12] ingest+lint | 3\ud68c \ubc18\ubcf5 \ub9b0\ud2b8-\uac1c\uc120 \uc0ac\uc774\ud074 \uc218\ud589 \ubc0f \uc704\ud0a4 \ubb34\uacb0\uc131 \ud655\ubcf4", "file_type": "document", "source_file": "log.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b09_wf6_estimation_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", "label": "[2026-07-12] ingest | B09_wf6_Estimation (\uc2e4 \ucf54\ub4dc \ub300\uc870, \ubbf8\ucc29\uc218 \ud655\uc778)", "file_type": "document", "source_file": "log.md", "source_location": "L36"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b07_wf4_designdetail_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", "label": "[2026-07-12] ingest | B07_wf4_DesignDetail (\uc2e4 \ucf54\ub4dc \ub300\uc870, \ubbf8\ucc29\uc218 \ud655\uc778)", "file_type": "document", "source_file": "log.md", "source_location": "L47"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b04_wf1_surface_\uc2e4_\ucf54\ub4dc_\ub300\uc870_5\ubd84\ud560_\uc0c1\uc138\ud654", "label": "[2026-07-12] ingest | B04_wf1_Surface (\uc2e4 \ucf54\ub4dc \ub300\uc870\u00b75\ubd84\ud560 \uc0c1\uc138\ud654)", "file_type": "document", "source_file": "log.md", "source_location": "L57"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b02_projregister_backend_frontend_db_\uc0c1\uc138\ud654", "label": "[2026-07-12] ingest | B02_ProjRegister (backend + frontend + db \uc0c1\uc138\ud654)", "file_type": "document", "source_file": "log.md", "source_location": "L69"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b01_dashboard_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "label": "[2026-07-12] query | B01_Dashboard \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", "file_type": "document", "source_file": "log.md", "source_location": "L85"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b03_fileinput_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "label": "[2026-07-12] query | B03_FileInput \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", "file_type": "document", "source_file": "log.md", "source_location": "L93"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b05_wf2_route_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "label": "[2026-07-12] query | B05_wf2_Route \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", "file_type": "document", "source_file": "log.md", "source_location": "L102"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b06_wf3_profilecross_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "label": "[2026-07-12] query | B06_wf3_ProfileCross \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", "file_type": "document", "source_file": "log.md", "source_location": "L111"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b08_wf5_quantity_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "label": "[2026-07-12] query | B08_wf5_Quantity \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", "file_type": "document", "source_file": "log.md", "source_location": "L119"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac", "label": "[2026-07-12] lint | \uc804\uccb4 \uc704\ud0a4 \uad6c\uc870\u00b7\uc0c1\ud0dc\u00b7\uacf5\uc720 \uac1c\ub150 \uc815\ub9ac", "file_type": "document", "source_file": "log.md", "source_location": "L126"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac_134", "label": "[2026-07-12] lint | \uc804\uccb4 \uc704\ud0a4 \uad6c\uc870\u00b7\uc0c1\ud0dc\u00b7\uacf5\uc720 \uac1c\ub150 \uc815\ub9ac", "file_type": "document", "source_file": "log.md", "source_location": "L134"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uc704\ud0a4_\uc2dc\uc2a4\ud15c_\ucd08\uae30_\uc138\ud305", "label": "[2026-07-12] lint | \uc704\ud0a4 \uc2dc\uc2a4\ud15c \ucd08\uae30 \uc138\ud305", "file_type": "document", "source_file": "log.md", "source_location": "L141"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_guidelines_plans_7\uac74_\uc77c\uad04_\ubc18\uc601", "label": "[2026-07-12] ingest | guidelines/plans 7\uac74 \uc77c\uad04 \ubc18\uc601", "file_type": "document", "source_file": "log.md", "source_location": "L148"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_lint_\uc2e4_db_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\uac80\uc99d_\uc77d\uae30_\uc804\uc6a9", "label": "[2026-07-12] query+lint | \uc2e4 DB/\uc2e4 \ucf54\ub4dc \ub300\uc870 \uac80\uc99d (\uc77d\uae30 \uc804\uc6a9)", "file_type": "document", "source_file": "log.md", "source_location": "L157"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_page_id_frontmatter_\ud544\ub4dc_\ub3c4\uc785", "label": "[2026-07-12] lint | page_id frontmatter \ud544\ub4dc \ub3c4\uc785", "file_type": "document", "source_file": "log.md", "source_location": "L167"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a01_home_\uc2e4_\ucf54\ub4dc_\ubc18\uc601", "label": "[2026-07-12] ingest | A01_Home \uc2e4 \ucf54\ub4dc \ubc18\uc601", "file_type": "document", "source_file": "log.md", "source_location": "L173"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_refactor_\ud30c\uc77c\uba85_\uaddc\uce59_\ub3c4\uc785_\ubc0f_\ub9c1\ud06c_\uc218\uc815", "label": "[2026-07-12] refactor | \ud30c\uc77c\uba85 \uaddc\uce59 \ub3c4\uc785 \ubc0f \ub9c1\ud06c \uc218\uc815", "file_type": "document", "source_file": "log.md", "source_location": "L180"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_a\uadf8\ub8f9_a01_a09_\uc804\uccb4_\uac80\uc99d_\ubc0f_\uc815\ud569\uc131_\uc810\uac80", "label": "[2026-07-12] lint | A\uadf8\ub8f9(A01~A09) \uc804\uccb4 \uac80\uc99d \ubc0f \uc815\ud569\uc131 \uc810\uac80", "file_type": "document", "source_file": "log.md", "source_location": "L188"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a09_security_backend_frontend_\uc0c1\uc138\ud654", "label": "[2026-07-12] ingest | A09_Security (backend + frontend \uc0c1\uc138\ud654)", "file_type": "document", "source_file": "log.md", "source_location": "L204"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a08_support_backend_frontend_\uc0c1\uc138\ud654", "label": "[2026-07-12] ingest | A08_Support (backend + frontend \uc0c1\uc138\ud654)", "file_type": "document", "source_file": "log.md", "source_location": "L219"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a07_register_backend_frontend_\uc0c1\uc138\ud654", "label": "[2026-07-12] ingest | A07_Register (backend + frontend \uc0c1\uc138\ud654)", "file_type": "document", "source_file": "log.md", "source_location": "L233"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a06_login_backend_frontend_\uc0c1\uc138\ud654", "label": "[2026-07-12] ingest | A06_Login (backend + frontend \uc0c1\uc138\ud654)", "file_type": "document", "source_file": "log.md", "source_location": "L248"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_a03_a05_\uc778\uc81c\uc2a4\ud2b8_\uc7ac\uc810\uac80", "label": "[2026-07-12] lint | A03~A05 \uc778\uc81c\uc2a4\ud2b8 \uc7ac\uc810\uac80", "file_type": "document", "source_file": "log.md", "source_location": "L263"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a05_edudetail", "label": "[2026-07-12] ingest | A05_EduDetail", "file_type": "document", "source_file": "log.md", "source_location": "L274"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a04_newshistory", "label": "[2026-07-12] ingest | A04_NewsHistory", "file_type": "document", "source_file": "log.md", "source_location": "L284"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a03_compdetail", "label": "[2026-07-12] ingest | A03_CompDetail", "file_type": "document", "source_file": "log.md", "source_location": "L295"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_a01_home_\ud398\uc774\uc9c0_\uac80\uc0ac_\ubc0f_\uc218\uc815", "label": "[2026-07-12] lint | A01_Home \ud398\uc774\uc9c0 \uac80\uc0ac \ubc0f \uc218\uc815", "file_type": "document", "source_file": "log.md", "source_location": "L305"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a02_progdetail_a00_common_framework", "label": "[2026-07-12] ingest | A02_ProgDetail + A00_Common Framework", "file_type": "document", "source_file": "log.md", "source_location": "L318"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L1", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uad6c\ud615_\uc0c1\uc704_\ud3f4\ub354_\ud0c8\ucd9c_\ub9c1\ud06c_concepts_\uc804\uc218_\uc815\ubc00_\uad50\uc815", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L6", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_concepts_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L7", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_5\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\uba54\ud0c0_\uc815\ubcf4_\uc815\ubc00_\ubcf4\uc644", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b02_projregister_b02_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L14", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b07_wf4_designdetail_b07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b09_wf6_estimation_b09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_db_34\uac1c_\ud14c\uc774\ube14_\uc804\uc218_\uceec\ub7fc_\uc2e4\uce21_\ubc0f_\uc704\ud0a4_\ucd5c\uc2e0\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L17", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_unconfirmed_readme_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_lint_3\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\ubb34\uacb0\uc131_\ud655\ubcf4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b09_wf6_estimation_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b09_wf6_estimation_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L43", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b07_wf4_designdetail_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L47", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b07_wf4_designdetail_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b04_wf1_surface_\uc2e4_\ucf54\ub4dc_\ub300\uc870_5\ubd84\ud560_\uc0c1\uc138\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L57", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_b02_projregister_backend_frontend_db_\uc0c1\uc138\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L69", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b02_projregister_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L82", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b01_dashboard_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L85", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b03_fileinput_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L93", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b05_wf2_route_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L102", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b06_wf3_profilecross_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L111", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_b08_wf5_quantity_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L119", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L126", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac_134", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L134", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_\uc704\ud0a4_\uc2dc\uc2a4\ud15c_\ucd08\uae30_\uc138\ud305", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L141", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_guidelines_plans_7\uac74_\uc77c\uad04_\ubc18\uc601", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L148", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L153", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L154", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_query_lint_\uc2e4_db_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\uac80\uc99d_\uc77d\uae30_\uc804\uc6a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L157", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_concepts_db_schema_overview_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L159", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L161", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_page_id_frontmatter_\ud544\ub4dc_\ub3c4\uc785", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L167", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a01_home_\uc2e4_\ucf54\ub4dc_\ubc18\uc601", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L173", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_refactor_\ud30c\uc77c\uba85_\uaddc\uce59_\ub3c4\uc785_\ubc0f_\ub9c1\ud06c_\uc218\uc815", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L180", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a01_home_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L184", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L184", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_a\uadf8\ub8f9_a01_a09_\uc804\uccb4_\uac80\uc99d_\ubc0f_\uc815\ud569\uc131_\uc810\uac80", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L188", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_b01_dashboard_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L200", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a09_security_backend_frontend_\uc0c1\uc138\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L204", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a09_security_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L217", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a09_security_a09_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L217", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a08_support_backend_frontend_\uc0c1\uc138\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L219", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a08_support_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L231", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a08_support_a08_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L231", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a07_register_backend_frontend_\uc0c1\uc138\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L233", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a07_register_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L246", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a07_register_a07_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L246", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a06_login_backend_frontend_\uc0c1\uc138\ud654", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L248", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L260", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a06_login_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L261", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L261", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_a03_a05_\uc778\uc81c\uc2a4\ud2b8_\uc7ac\uc810\uac80", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L263", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a00_common_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L270", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L270", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a05_edudetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L274", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a04_newshistory", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L284", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a03_compdetail", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L295", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_lint_a01_home_\ud398\uc774\uc9c0_\uac80\uc0ac_\ubc0f_\uc218\uc815", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L305", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_ui_template_locale_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L310", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_ui_template_elements_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L310", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L314", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_wiki_log", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_log_2026_07_12_ingest_a02_progdetail_a00_common_framework", "relation": "contains", "confidence": "EXTRACTED", "source_file": "log.md", "source_location": "L318", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/c0a1926f8af61577dc912e4ca9824e1459355dd7538f1577120a4b7ec9f8a0b6.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/c0a1926f8af61577dc912e4ca9824e1459355dd7538f1577120a4b7ec9f8a0b6.json new file mode 100644 index 0000000..4379bda --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/c0a1926f8af61577dc912e4ca9824e1459355dd7538f1577120a4b7ec9f8a0b6.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "label": "A07_backend.md", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "label": "A07_Register \u2014 Backend", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\uac00\uc785_\ub85c\uc9c1_\ud750\ub984", "label": "\uac00\uc785 \ub85c\uc9c1 \ud750\ub984", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L36"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L48"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L54"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_register_a07_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\uac00\uc785_\ub85c\uc9c1_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L36", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L48", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_common_util_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L50", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_db_schema_users_auth_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L52", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_a07_register_backend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_backend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_backend.md", "source_location": "L57", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/c3a3a40df2648ee75578c94723b6824b1050d0df0b0ee7719b7da9115e3e9d5b.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/c3a3a40df2648ee75578c94723b6824b1050d0df0b0ee7719b7da9115e3e9d5b.json new file mode 100644 index 0000000..30812f7 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/c3a3a40df2648ee75578c94723b6824b1050d0df0b0ee7719b7da9115e3e9d5b.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "label": "ui_templates.md", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "label": "UI Templates \u2014 Localization & Components", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", "label": "ui_template_locale.ts (\ub2e4\uad6d\uc5b4 \uad00\ub9ac)", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\ud575\uc2ec_\uae30\ub2a5", "label": "\ud575\uc2ec \uae30\ub2a5", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L16"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", "label": "ui_template_elements.ts (\uacf5\ud1b5 \ucef4\ud3ec\ub10c\ud2b8)", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc81c\uacf5_\ucef4\ud3ec\ub10c\ud2b8", "label": "\uc81c\uacf5 \ucef4\ud3ec\ub10c\ud2b8", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L34"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870_50", "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L50"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", "label": "theme.css (\uc2a4\ud0c0\uc77c \ubcc0\uc218)", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L59"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\ud575\uc2ec_\ubcc0\uc218", "label": "\ud575\uc2ec \ubcc0\uc218", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L63"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc81c\uc57d_backend_md_1", "label": "\uc81c\uc57d (backend.md \u00a71)", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L75"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "concepts/ui_templates.md", "source_location": "L82"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a01_home_a01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a02_progdetail_a02_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L3", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\ud575\uc2ec_\uae30\ub2a5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L16", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc81c\uacf5_\ucef4\ud3ec\ub10c\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L34", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870_50", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L50", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a03_compdetail_a03_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a04_newshistory_a04_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L54", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a05_edudetail_a05_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L55", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\ud575\uc2ec_\ubcc0\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L63", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc81c\uc57d_backend_md_1", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L75", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_ui_templates_localization_components", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/ui_templates.md", "source_location": "L82", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/c6652706034c525ffeec3bbaf4f9f371698a1070a1adbdffb079bbdb1ce3eb2c.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/c6652706034c525ffeec3bbaf4f9f371698a1070a1adbdffb079bbdb1ce3eb2c.json new file mode 100644 index 0000000..dbe85a1 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/c6652706034c525ffeec3bbaf4f9f371698a1070a1adbdffb079bbdb1ce3eb2c.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "label": "B04_db.md", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", "label": "B04_wf1_Surface \u2014 DB", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_\uc4f0\ub294_\ud14c\uc774\ube14", "label": "\uc4f0\ub294 \ud14c\uc774\ube14", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_repository_\ud568\uc218", "label": "Repository \ud568\uc218", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L23"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L31"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_db_schema_files_surface_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_\uc4f0\ub294_\ud14c\uc774\ube14", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_db_schema_projects_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_repository_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_db_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_db.md", "source_location": "L31", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/c7645ac1d9ed01c49738b733aa69361b91e27034b72846bf1083ee3a0b9aaf35.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/c7645ac1d9ed01c49738b733aa69361b91e27034b72846bf1083ee3a0b9aaf35.json new file mode 100644 index 0000000..36f25ef --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/c7645ac1d9ed01c49738b733aa69361b91e27034b72846bf1083ee3a0b9aaf35.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "label": "B05_api.md", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_b05_wf2_route_api", "label": "B05_wf2_Route \u2014 API", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_solve_\ucc98\ub9ac_\uacb0\uacfc", "label": "solve \ucc98\ub9ac \uacb0\uacfc", "file_type": "document", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L19"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_wf2_route_b05_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_b05_wf2_route_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_b05_wf2_route_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b05_wf2_route_b05_api_solve_\ucc98\ub9ac_\uacb0\uacfc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B05_wf2_Route/B05_api.md", "source_location": "L19", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/c82e36238d3bc7e9f58d7a65a208efd22932d394b41f00de2f065920df19c7b7.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/c82e36238d3bc7e9f58d7a65a208efd22932d394b41f00de2f065920df19c7b7.json new file mode 100644 index 0000000..e1066a7 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/c82e36238d3bc7e9f58d7a65a208efd22932d394b41f00de2f065920df19c7b7.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "label": "common_util.md", "file_type": "document", "source_file": "concepts/common_util.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", "label": "\uacf5\ud1b5 \uc720\ud2f8 (common_util/)", "file_type": "document", "source_file": "concepts/common_util.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\uc774\uba54\uc77c_\ubc1c\uc1a1_common_util_email_py", "label": "\uc774\uba54\uc77c \ubc1c\uc1a1 (common_util_email.py)", "file_type": "document", "source_file": "concepts/common_util.md", "source_location": "L27"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\ub9ac\uc18c\uc2a4_\ubaa8\ub2c8\ud130\ub9c1_common_util_resource_monitor_py", "label": "\ub9ac\uc18c\uc2a4 \ubaa8\ub2c8\ud130\ub9c1 (common_util_resource_monitor.py)", "file_type": "document", "source_file": "concepts/common_util.md", "source_location": "L31"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b05_wf2_route_b05_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L16", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\uc774\uba54\uc77c_\ubc1c\uc1a1_common_util_email_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_common_util_\ub9ac\uc18c\uc2a4_\ubaa8\ub2c8\ud130\ub9c1_common_util_resource_monitor_py", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/common_util.md", "source_location": "L31", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/dbc60034a717404e311f43e3f724df0f5db7fc40240c9b2dea195710e80aa456.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/dbc60034a717404e311f43e3f724df0f5db7fc40240c9b2dea195710e80aa456.json new file mode 100644 index 0000000..4b10a1d --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/dbc60034a717404e311f43e3f724df0f5db7fc40240c9b2dea195710e80aa456.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "label": "A07_frontend.md", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "label": "A07_Register \u2014 Frontend", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218_ui_auth_page_\uc2e4\uc0ac\uc6a9", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218 (UI_Auth_Page \u2014 \uc2e4\uc0ac\uc6a9)", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L33"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", "label": "\uc81c\ucd9c \ub85c\uc9c1 (2\ub2e8\uacc4 \ud3fc \uc804\ud658)", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L43"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc57d\uad00_\ub3d9\uc758_\uc544\ucf54\ub514\uc5b8", "label": "\uc57d\uad00 \ub3d9\uc758 (\uc544\ucf54\ub514\uc5b8)", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L50"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc2a4\ud0c0\uc77c_css", "label": "\uc2a4\ud0c0\uc77c (CSS)", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L70"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L77"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L85"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_register_a07_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a06_login_a06_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218_ui_auth_page_\uc2e4\uc0ac\uc6a9", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L43", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc57d\uad00_\ub3d9\uc758_\uc544\ucf54\ub514\uc5b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L50", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L58", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc2a4\ud0c0\uc77c_css", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L70", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L77", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_a07_register_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L85", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_a07_register_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/A07_Register/A07_frontend.md", "source_location": "L87", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/dc48367a69497d4965a076e5baa28ca167883c8abfb32eff54161c461fcde509.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/dc48367a69497d4965a076e5baa28ca167883c8abfb32eff54161c461fcde509.json new file mode 100644 index 0000000..a35574f --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/dc48367a69497d4965a076e5baa28ca167883c8abfb32eff54161c461fcde509.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "label": "B03_api.md", "file_type": "document", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_b03_fileinput_api", "label": "B03_FileInput \u2014 API", "file_type": "document", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_\uc77c\ubc18_\uc5c5\ub85c\ub4dc", "label": "\uc77c\ubc18 \uc5c5\ub85c\ub4dc", "file_type": "document", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L14"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_\uccad\ud06c_\uc5c5\ub85c\ub4dc", "label": "\uccad\ud06c \uc5c5\ub85c\ub4dc", "file_type": "document", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L19"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_workflow_\uc870\ud68c", "label": "workflow \uc870\ud68c", "file_type": "document", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L27"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_b03_fileinput_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_api_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_b03_fileinput_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_\uc77c\ubc18_\uc5c5\ub85c\ub4dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L14", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_b03_fileinput_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_\uccad\ud06c_\uc5c5\ub85c\ub4dc", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_b03_fileinput_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_workflow_\uc870\ud68c", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L27", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_api.md", "source_location": "L32", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/dc90c884f2f276e80a57bfc0e2b82b3cf72360db91b22dd9337ef082385050cb.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/dc90c884f2f276e80a57bfc0e2b82b3cf72360db91b22dd9337ef082385050cb.json new file mode 100644 index 0000000..dcfd616 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/dc90c884f2f276e80a57bfc0e2b82b3cf72360db91b22dd9337ef082385050cb.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "label": "B03_frontend.md", "file_type": "document", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", "label": "B03_FileInput \u2014 Frontend", "file_type": "document", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_\ud398\uc774\uc9c0_\uc5c5\ub85c\ub4dc_\ud750\ub984", "label": "\ud398\uc774\uc9c0\u00b7\uc5c5\ub85c\ub4dc \ud750\ub984", "file_type": "document", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", "file_type": "document", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L21"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_\ube0c\ub77c\uc6b0\uc800_\uc0c1\ud0dc_\uc624\ud504\ub77c\uc778_\ubcf4\uc870", "label": "\ube0c\ub77c\uc6b0\uc800 \uc0c1\ud0dc\u00b7\uc624\ud504\ub77c\uc778 \ubcf4\uc870", "file_type": "document", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L31"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_\uae30\uc220\ubd80\ucc44", "label": "\uae30\uc220\ubd80\ucc44", "file_type": "document", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L42"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_fileinput_b03_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_\ud398\uc774\uc9c0_\uc5c5\ub85c\ub4dc_\ud750\ub984", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L21", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_\ube0c\ub77c\uc6b0\uc800_\uc0c1\ud0dc_\uc624\ud504\ub77c\uc778_\ubcf4\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L40", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b03_fileinput_b03_frontend_\uae30\uc220\ubd80\ucc44", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B03_FileInput/B03_frontend.md", "source_location": "L42", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/e5a0d7854dc5f172c997de38f2c4dc21dc761794e098626c17dfffe673b47711.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/e5a0d7854dc5f172c997de38f2c4dc21dc761794e098626c17dfffe673b47711.json new file mode 100644 index 0000000..e0af167 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/e5a0d7854dc5f172c997de38f2c4dc21dc761794e098626c17dfffe673b47711.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "label": "auth_rbac.md", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "label": "\uc778\uc99d / RBAC", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L9"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc138\uc158_\uc778\uc99d_backend_md_6_3", "label": "\uc138\uc158 \uc778\uc99d (backend.md 6.3)", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L11"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_otp_\ube44\ubc00\ubc88\ud638", "label": "OTP / \ube44\ubc00\ubc88\ud638", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L18"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc0ac\uc6a9\uc790_\uc0c1\ud0dc_\uc0dd\uba85\uc8fc\uae30", "label": "\uc0ac\uc6a9\uc790 \uc0c1\ud0dc \uc0dd\uba85\uc8fc\uae30", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L23"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc5ed\ud560_users_role", "label": "\uc5ed\ud560 (users.role)", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L33"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uad8c\ud55c_\uac80\uc99d_\ud5ec\ud37c_b01_dashboard", "label": "\uad8c\ud55c \uac80\uc99d \ud5ec\ud37c (B01_Dashboard)", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L42"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_\uac31\uc2e0", "label": "\uc778\uc99d \uac31\uc2e0", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L53"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\ub77c\uc6b0\ud305_\uac00\ub4dc_frontend_md_5_2", "label": "\ub77c\uc6b0\ud305 \uac00\ub4dc (frontend.md 5.2)", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L56"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L59"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uacc4\ud68d\uc11c_\uc2e4\ucf54\ub4dc_\ubd88\uc77c\uce58_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\ubc1c\uacac", "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c-\uc2e4\ucf54\ub4dc \ubd88\uc77c\uce58 (A\uadf8\ub8f9 \uc778\uc81c\uc2a4\ud2b8 \ubc1c\uacac)", "file_type": "document", "source_file": "concepts/auth_rbac.md", "source_location": "L65"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L9", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc138\uc158_\uc778\uc99d_backend_md_6_3", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L11", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_db_schema_users_auth_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L13", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_otp_\ube44\ubc00\ubc88\ud638", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc0ac\uc6a9\uc790_\uc0c1\ud0dc_\uc0dd\uba85\uc8fc\uae30", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L23", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc5ed\ud560_users_role", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uad8c\ud55c_\uac80\uc99d_\ud5ec\ud37c_b01_dashboard", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L42", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_\uac31\uc2e0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L53", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\ub77c\uc6b0\ud305_\uac00\ub4dc_frontend_md_5_2", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L56", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L59", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a06_login_a06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L61", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a07_register_a07_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L62", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a09_security_a09_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L63", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uc778\uc99d_rbac", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_\uacc4\ud68d\uc11c_\uc2e4\ucf54\ub4dc_\ubd88\uc77c\uce58_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\ubc1c\uacac", "relation": "contains", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L65", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_auth_rbac_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_concepts_a09_security_a09_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "concepts/auth_rbac.md", "source_location": "L68", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/ec26c30de18a4df2b859538b4a3b5c4381fb4e5151386baa77d1ca9e6ce185a9.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/ec26c30de18a4df2b859538b4a3b5c4381fb4e5151386baa77d1ca9e6ce185a9.json new file mode 100644 index 0000000..16a6df6 --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/ec26c30de18a4df2b859538b4a3b5c4381fb4e5151386baa77d1ca9e6ce185a9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "label": "B01_db.md", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", "label": "B01_Dashboard \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L10"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_\ud2b8\ub79c\uc7ad\uc158_\uacbd\uacc4", "label": "\ud2b8\ub79c\uc7ad\uc158 \uacbd\uacc4", "file_type": "document", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L25"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_dashboard_b01_api_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L5", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L10", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_db_schema_users_auth_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L16", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_db_schema_projects_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L19", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_workflow_state_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L20", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_db_schema_logs_monitoring_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L22", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b01_dashboard_b01_db_\ud2b8\ub79c\uc7ad\uc158_\uacbd\uacc4", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B01_Dashboard/B01_db.md", "source_location": "L25", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/f43d7fb7c134b25445c9b5d16d30a4b864c03ee044607301107af0e64c3d9bd9.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/f43d7fb7c134b25445c9b5d16d30a4b864c03ee044607301107af0e64c3d9bd9.json new file mode 100644 index 0000000..1d8bded --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/f43d7fb7c134b25445c9b5d16d30a4b864c03ee044607301107af0e64c3d9bd9.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "label": "B07_frontend.md", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "label": "B07_wf4_DesignDetail \u2014 Frontend", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ud30c\uc77c_\uad6c\uc870", "label": "\ud30c\uc77c \uad6c\uc870", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L12"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L18"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L24"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\uc758\uc874\uc131", "label": "\uc758\uc874\uc131", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L30"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218_\uacc4\ud68d\uc801_\ubc94\uc704_\uc81c\uc678", "label": "\ubc31\uc5d4\ub4dc/DB \u2014 \ubbf8\ucc29\uc218 (\uacc4\ud68d\uc801 \ubc94\uc704 \uc81c\uc678)", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L35"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ucc38\uace0", "label": "\ucc38\uace0", "file_type": "document", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L42"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b06_wf3_profilecross_b06_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b08_wf5_quantity_b08_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_db_schema_structure_output_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_storage_paths_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ud30c\uc77c_\uad6c\uc870", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L12", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L18", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L24", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\uc758\uc874\uc131", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L30", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_a00_app_shell_framework_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L32", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_ui_templates_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L33", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218_\uacc4\ud68d\uc801_\ubc94\uc704_\uc81c\uc678", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L35", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b07_wf4_designdetail_b07_frontend_\ucc38\uace0", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", "source_location": "L42", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/ast/v0.9.12/f849b661543b4f07113704a24786a67a90cebd48ce726060f43d64c696689583.json b/docs/wiki/graphify-out/cache/ast/v0.9.12/f849b661543b4f07113704a24786a67a90cebd48ce726060f43d64c696689583.json new file mode 100644 index 0000000..9ed6c8f --- /dev/null +++ b/docs/wiki/graphify-out/cache/ast/v0.9.12/f849b661543b4f07113704a24786a67a90cebd48ce726060f43d64c696689583.json @@ -0,0 +1 @@ +{"nodes": [{"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "label": "B04_api.md", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L1"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", "label": "B04_wf1_Surface \u2014 API", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L8"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "label": "\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L15"}, {"id": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", "label": "\uc694\uccad/\uc751\ub2f5 \uc2a4\ud0a4\ub9c8 (Pydantic)", "file_type": "document", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L31"}], "edges": [{"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_backend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_frontend_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_db_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_wf1_surface_b04_dependencies_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L4", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L8", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L15", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", "relation": "contains", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L31", "weight": 1.0}, {"source": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_b04_api_md", "target": "c_program_coding_\uc784\ub3c4\uc124\uacc4_\ubc0f_\uacac\uc801\uc790\ub3d9\ud654_\ud504\ub85c\uadf8\ub7a8_\uac1c\ubc1c_docs_wiki_pages_b04_wf1_surface_schema_common_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "pages/B04_wf1_Surface/B04_api.md", "source_location": "L42", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0} \ No newline at end of file diff --git a/docs/wiki/graphify-out/cache/stat-index.json b/docs/wiki/graphify-out/cache/stat-index.json new file mode 100644 index 0000000..40b8f99 --- /dev/null +++ b/docs/wiki/graphify-out/cache/stat-index.json @@ -0,0 +1 @@ +{"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\AGENTS.md":{"size":2464,"mtime_ns":1783834983060468500,"word_count":251,"hash":"777dc18c8da82ae19d1ef4696015cf4a4f34c2c07d0b440fe86da472081038b8"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\CLAUDE.md":{"size":2464,"mtime_ns":1783834983060468500,"word_count":251,"hash":"7a20bcee60ba41e229ef85f767421d7179a7ae138805534d5a8f104afc477a40"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\a00_app_shell_framework.md":{"size":3819,"mtime_ns":1783850530414116200,"word_count":373,"hash":"90d7356198e73e4cc9f6377549bb422cac5171f209ac35465cb3cf6afd457c55"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\a00_app_shell_framework_scaffold.md":{"size":1287,"mtime_ns":1783844389012691200,"word_count":150,"hash":"0f5b6dbb9bebbfa33f4d635f070de504af4b359fb90f4b29ba9688d1d6e17d2e"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\api_common.md":{"size":1211,"mtime_ns":1783849575585575500,"word_count":113,"hash":"a38a8ca962fdacc272da8439e0d7d9d1e1c542bc8b65333fd5579891c9857361"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\auth_rbac.md":{"size":3720,"mtime_ns":1783849578467314400,"word_count":424,"hash":"e5a0d7854dc5f172c997de38f2c4dc21dc761794e098626c17dfffe673b47711"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\common_util.md":{"size":2298,"mtime_ns":1783849579200175200,"word_count":227,"hash":"c82e36238d3bc7e9f58d7a65a208efd22932d394b41f00de2f065920df19c7b7"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\files_surface.md":{"size":5079,"mtime_ns":1783850268591737200,"word_count":826,"hash":"32b6d000932825989e419a4136794b28850890191432179205576bde15298bf5"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\logs_monitoring.md":{"size":5440,"mtime_ns":1783850257642213500,"word_count":848,"hash":"7fb3857a81e71036c1ce149c4b7245df62a5739b3547ecf4cabbdad69ea26f7d"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\overview.md":{"size":3515,"mtime_ns":1783850340580860400,"word_count":380,"hash":"52811408853b074f152e72eca98203c800db677004bc8ae75c253e28b0464ee1"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\projects.md":{"size":2769,"mtime_ns":1783850262520236500,"word_count":410,"hash":"645ae1caf18f1055571c195d5af0488bcb975554ef4227b5d294117aa14d35bc"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\route_profile.md":{"size":3423,"mtime_ns":1783850288182818000,"word_count":560,"hash":"479a8e4089e3bb7a2cc81032c56fd9af63de315e299c5bfaa734f3dc729d25a1"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\structure_output.md":{"size":3789,"mtime_ns":1783850297429242900,"word_count":618,"hash":"671505750d39bdfee5448654c63c865bd82059e3dd905065e164202716f19204"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\unconfirmed\\README.md":{"size":851,"mtime_ns":1783850335081333800,"word_count":79,"hash":"1b226e5d018fc38a72090165fa26143b93b6e1c0a7e1073d8c15e0cdddbeb171"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\db_schema\\users_auth.md":{"size":4342,"mtime_ns":1783850220271142800,"word_count":689,"hash":"29bd2bdc39958157c52fe4e872b1c1b0ff6b6f91aa809ee33b6be89c57ccd9fa"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\dependencies.md":{"size":2620,"mtime_ns":1783850549511564200,"word_count":244,"hash":"0dddf33216964b4bf97f34f8bce4436bfa31f27f00ed2057e251ff2f7a31623a"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\schema_common.md":{"size":855,"mtime_ns":1783844389016639700,"word_count":99,"hash":"7b7b025371ec01828e5296e1181ed9c5c4381d26906e595e1bf74b413f559880"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\storage_paths.md":{"size":2305,"mtime_ns":1783850555214286100,"word_count":197,"hash":"864c1304191de6468d4edc50434ec59bea00a7f2d0eee6bacc57ecbf7b4f7e04"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\ui_templates.md":{"size":4829,"mtime_ns":1783850532482036500,"word_count":463,"hash":"c3a3a40df2648ee75578c94723b6824b1050d0df0b0ee7719b7da9115e3e9d5b"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\concepts\\workflow_state.md":{"size":6332,"mtime_ns":1783850560332646600,"word_count":494,"hash":"913554bc65be372e31038c5b6db99ffb11804957097d503d81077bbf581c6403"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\index.md":{"size":7464,"mtime_ns":1783850468542085500,"word_count":617,"hash":"4df26e4d9121bc917f5542182c4d4b90fe7405d00db5ca205080ab8b2fcba450"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\log.md":{"size":34477,"mtime_ns":1783850724188808200,"word_count":3348,"hash":"bc8f362e6683fa0ae51daf283b5d2a7813c06e0dc3f073f5680c831ecf7292f0"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A01_Home\\A01_components.md":{"size":1202,"mtime_ns":1783849656616777200,"word_count":150,"hash":"49fd7d94d4b60db667d3b09b49911f92d55600a624ab7905ccbc6e3ad42a3352"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A01_Home\\A01_frontend.md":{"size":2355,"mtime_ns":1783849659828017600,"word_count":245,"hash":"5fec6364bd060aef3f2afe819bea5354565d898bbb2169efed8ae55d8aba79cc"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A02_ProgDetail\\A02_components.md":{"size":1807,"mtime_ns":1783849775265680000,"word_count":203,"hash":"2808d040f080236ab87ff5d059ee801796b07a63f6a114bd2a2109e0b5806e12"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A02_ProgDetail\\A02_frontend.md":{"size":1459,"mtime_ns":1783849775266683300,"word_count":119,"hash":"430bcc25e31726266357a8339dcac795f30c714099326f504dcf44364ffdfd63"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A03_CompDetail\\A03_frontend.md":{"size":2898,"mtime_ns":1783844088302852900,"word_count":305,"hash":"2be5bc2fd35d20f0f1eb7c1c707e58347f2b10bcc8843f04fffa74fbdca4d2a7"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A04_NewsHistory\\A04_frontend.md":{"size":3337,"mtime_ns":1783844098325878300,"word_count":353,"hash":"890159057c1b315dc2f987cc22cff3d9f78d8a6b70c16341450a63a15eea1e79"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A05_EduDetail\\A05_frontend.md":{"size":2731,"mtime_ns":1783844108812844900,"word_count":294,"hash":"ab34ed804dca07323ea78583add067fd18e7d17a741c99321bd6c782e82c7c82"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A06_Login\\A06_backend.md":{"size":3844,"mtime_ns":1783849775268766500,"word_count":400,"hash":"aacc52798876b1c9f1528049e014dfff812e4362029bf2900537a635cea03345"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A06_Login\\A06_frontend.md":{"size":3934,"mtime_ns":1783849775268766500,"word_count":398,"hash":"87a19225130d879a47fa512b619a4dfcd67d6a13bcfed08f9280892d055b7aec"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A07_Register\\A07_backend.md":{"size":2748,"mtime_ns":1783849775269772500,"word_count":258,"hash":"c0a1926f8af61577dc912e4ca9824e1459355dd7538f1577120a4b7ec9f8a0b6"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A07_Register\\A07_frontend.md":{"size":5058,"mtime_ns":1783849775270772200,"word_count":464,"hash":"dbc60034a717404e311f43e3f724df0f5db7fc40240c9b2dea195710e80aa456"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A08_Support\\A08_backend.md":{"size":2671,"mtime_ns":1783849900589599200,"word_count":268,"hash":"1d05c804dd886b8148e1a246412e6c96776d60ed81e47cd559330fd26a8da829"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A08_Support\\A08_frontend.md":{"size":3167,"mtime_ns":1783849775273060500,"word_count":321,"hash":"50e6b6bf0066bb5b891dbcf8988ee06ec3918a47e2e33f1bba85cc3d586c424c"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A09_Security\\A09_backend.md":{"size":4013,"mtime_ns":1783849775274067100,"word_count":354,"hash":"b274d5ee1fd61e7bc3013ac1dfaba29d570264ad0322202e9f907db6a7cd5717"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\A09_Security\\A09_frontend.md":{"size":4171,"mtime_ns":1783849775275076800,"word_count":380,"hash":"3db683a2cde7e94a133978113563de2a3fd70d54fdde9b2002e15145901824c1"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B01_Dashboard\\B01_api.md":{"size":3782,"mtime_ns":1783849775277077100,"word_count":405,"hash":"118279706a1eb23a45441e1ff8903d5dbd50d4d0b51975d3a17b60f7780055ca"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B01_Dashboard\\B01_backend.md":{"size":5363,"mtime_ns":1783849775278077000,"word_count":440,"hash":"646d6ab79be622a7ff0a6e70be8cff4eba1d7a96287360cb7c92afbf09ce3094"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B01_Dashboard\\B01_db.md":{"size":2201,"mtime_ns":1783850631766598100,"word_count":216,"hash":"ec26c30de18a4df2b859538b4a3b5c4381fb4e5151386baa77d1ca9e6ce185a9"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B01_Dashboard\\B01_dependencies.md":{"size":1523,"mtime_ns":1783849775280134300,"word_count":157,"hash":"981095fcec47154f4626fb3eab7ecdc4407e949a7aa702a13130c8e1b70920ec"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B01_Dashboard\\B01_frontend.md":{"size":3177,"mtime_ns":1783849775280134300,"word_count":337,"hash":"1e373af97a118ae3015a3afa398085bf5df4a98ba74866cbe2f8697b00379869"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B02_ProjRegister\\B02_backend.md":{"size":4260,"mtime_ns":1783849775282399000,"word_count":382,"hash":"2511b51e4eb20cf62e268122c88d3fb89dbd706320402a4eccb759b58281fa0a"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B02_ProjRegister\\B02_db.md":{"size":1450,"mtime_ns":1783849775282399000,"word_count":129,"hash":"0624d255f06a43b161abeb6fdee9630e320fd97ac8bfcec25673ffef09e4d059"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B02_ProjRegister\\B02_frontend.md":{"size":3727,"mtime_ns":1783849775283398800,"word_count":379,"hash":"4a5f18486fb810daf3f1c5b1551536726d973ee824de69be0d36d0a60322cdaa"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B03_FileInput\\B03_api.md":{"size":1547,"mtime_ns":1783849775284398900,"word_count":151,"hash":"dc48367a69497d4965a076e5baa28ca167883c8abfb32eff54161c461fcde509"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B03_FileInput\\B03_backend.md":{"size":2973,"mtime_ns":1783849775285399000,"word_count":290,"hash":"145e767fcb59085a1ee13d461285411d8b86d513511ea6df46b3348775ca49a4"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B03_FileInput\\B03_db.md":{"size":1423,"mtime_ns":1783850637448416300,"word_count":147,"hash":"186d47f554f2e797fb63a3167221e324a92f283cd57fa229bc6d47bb5224d32b"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B03_FileInput\\B03_dependencies.md":{"size":1552,"mtime_ns":1783849775287398800,"word_count":160,"hash":"944204e569fb7c208be3dd6b08b83c70b5229be9c7f932926aeb285b77807561"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B03_FileInput\\B03_frontend.md":{"size":2550,"mtime_ns":1783849775287398800,"word_count":278,"hash":"dc90c884f2f276e80a57bfc0e2b82b3cf72360db91b22dd9337ef082385050cb"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B04_wf1_Surface\\B04_api.md":{"size":3006,"mtime_ns":1783849775291034500,"word_count":262,"hash":"f849b661543b4f07113704a24786a67a90cebd48ce726060f43d64c696689583"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B04_wf1_Surface\\B04_backend.md":{"size":4043,"mtime_ns":1783849775292158500,"word_count":355,"hash":"474c775ef5ef23ed26e38b39828a52131bedb7f8a770ad07dc99148df7e87c5b"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B04_wf1_Surface\\B04_db.md":{"size":1681,"mtime_ns":1783849775292957100,"word_count":160,"hash":"c6652706034c525ffeec3bbaf4f9f371698a1070a1adbdffb079bbdb1ce3eb2c"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B04_wf1_Surface\\B04_dependencies.md":{"size":1295,"mtime_ns":1783849775292957100,"word_count":142,"hash":"97478cabbb537844beae71898c5b219a2b94edecb3285f81207390133befebed"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B04_wf1_Surface\\B04_frontend.md":{"size":3750,"mtime_ns":1783849775293959500,"word_count":321,"hash":"8d85ff410419578b818f52078b23e7a3d3a4a7c9d3c18d6994a3d65420b74bd8"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B05_wf2_Route\\B05_api.md":{"size":1194,"mtime_ns":1783849775295465300,"word_count":123,"hash":"c7645ac1d9ed01c49738b733aa69361b91e27034b72846bf1083ee3a0b9aaf35"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B05_wf2_Route\\B05_backend.md":{"size":3005,"mtime_ns":1783849775295465300,"word_count":303,"hash":"a6d3afe6fc8285143b839973bd8506e5c74fa12760a92b9d72930d4a96d07742"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B05_wf2_Route\\B05_db.md":{"size":1676,"mtime_ns":1783850658484400400,"word_count":175,"hash":"36e9c3aa280793956998877458fc2ac0767eeec0172efa0542cb863877908fcb"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B05_wf2_Route\\B05_dependencies.md":{"size":1133,"mtime_ns":1783849775298166400,"word_count":131,"hash":"9691ebb53407e479750a796e82774905fe22139f5b049c3f7dc0ad6534c378cf"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B05_wf2_Route\\B05_frontend.md":{"size":2138,"mtime_ns":1783849775298166400,"word_count":236,"hash":"1e9e4be64167f23705811ee00b005b84faf8b3e44cc65a78ac00683ff4cc92ea"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B06_wf3_ProfileCross\\B06_api.md":{"size":1332,"mtime_ns":1783849775299166300,"word_count":126,"hash":"54d5ac3300a973b62932c4e49e96e3aefea664dc1af074865d994a02ceea83e7"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B06_wf3_ProfileCross\\B06_backend.md":{"size":2674,"mtime_ns":1783849775300166200,"word_count":259,"hash":"464194e04c304a155a3445c411403400b6239ad5460dfad3ccdeb03da87f41fb"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B06_wf3_ProfileCross\\B06_db.md":{"size":1718,"mtime_ns":1783850703123485300,"word_count":158,"hash":"2db81e60642ebe8f3ec8f7c3673d57ad41156fa1bf6f636be896aa2d44899709"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B06_wf3_ProfileCross\\B06_dependencies.md":{"size":1348,"mtime_ns":1783849775301572100,"word_count":130,"hash":"1dad047374ae3b973fcdcaa189f843557fcfffe8364feccc7ebc92f3ddc04155"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B06_wf3_ProfileCross\\B06_frontend.md":{"size":2137,"mtime_ns":1783849775302093500,"word_count":221,"hash":"37aa0d07aa6c480aa555897c7a3b552f3c4918332701b292c8140bd177fae0f3"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B07_wf4_DesignDetail\\B07_frontend.md":{"size":2037,"mtime_ns":1783844389053690900,"word_count":192,"hash":"f43d7fb7c134b25445c9b5d16d30a4b864c03ee044607301107af0e64c3d9bd9"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B08_wf5_Quantity\\B08_db.md":{"size":1112,"mtime_ns":1783850708284249100,"word_count":134,"hash":"4b09b67e025ab679214a595ed4288633a2c58d466bff1f2e195d8ad42e74d686"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B08_wf5_Quantity\\B08_frontend.md":{"size":1694,"mtime_ns":1783849775303746000,"word_count":203,"hash":"9216484c57c256629ee59314bc7d4b9e8ef66c3d8458b9ea16a3f73dd370fe52"},"C:\\Program_coding\\\uc784\ub3c4\uc124\uacc4 \ubc0f \uacac\uc801\uc790\ub3d9\ud654 \ud504\ub85c\uadf8\ub7a8 \uac1c\ubc1c\\docs\\wiki\\pages\\B09_wf6_Estimation\\B09_frontend.md":{"size":1941,"mtime_ns":1783844389057481200,"word_count":187,"hash":"0b2cdc6e3ca674d334281585329d084ff2d4d330ad6ed1e67b99ee2b144d4d7d"}} \ No newline at end of file diff --git a/docs/wiki/graphify-out/graph.html b/docs/wiki/graphify-out/graph.html new file mode 100644 index 0000000..7e33393 --- /dev/null +++ b/docs/wiki/graphify-out/graph.html @@ -0,0 +1,307 @@ + + + + +graphify - graphify-out\graph.html + + + + +
+ + + + + \ No newline at end of file diff --git a/docs/wiki/graphify-out/graph.json b/docs/wiki/graphify-out/graph.json new file mode 100644 index 0000000..08ca336 --- /dev/null +++ b/docs/wiki/graphify-out/graph.json @@ -0,0 +1,10421 @@ +{ + "directed": false, + "multigraph": false, + "graph": {}, + "nodes": [ + { + "label": "AGENTS.md", + "file_type": "document", + "source_file": "AGENTS.md", + "source_location": "L1", + "_origin": "ast", + "id": "agents", + "community": 38, + "norm_label": "agents.md" + }, + { + "label": "wiki/ \ud3f4\ub354 \uaddc\uce59", + "file_type": "document", + "source_file": "AGENTS.md", + "source_location": "L1", + "_origin": "ast", + "id": "agents_wiki_\ud3f4\ub354_\uaddc\uce59", + "community": 38, + "norm_label": "wiki/ \u1111\u1169\u11af\u1103\u1165 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uad6c\uc870", + "file_type": "document", + "source_file": "AGENTS.md", + "source_location": "L5", + "_origin": "ast", + "id": "agents_\uad6c\uc870", + "community": 38, + "norm_label": "\u1100\u116e\u110c\u1169" + }, + { + "label": "\uc791\uc131 \uaddc\uce59", + "file_type": "document", + "source_file": "AGENTS.md", + "source_location": "L11", + "_origin": "ast", + "id": "agents_\uc791\uc131_\uaddc\uce59", + "community": 38, + "norm_label": "\u110c\u1161\u11a8\u1109\u1165\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "CLAUDE.md", + "file_type": "document", + "source_file": "CLAUDE.md", + "source_location": "L1", + "_origin": "ast", + "id": "claude", + "community": 39, + "norm_label": "claude.md" + }, + { + "label": "wiki/ \ud3f4\ub354 \uaddc\uce59", + "file_type": "document", + "source_file": "CLAUDE.md", + "source_location": "L1", + "_origin": "ast", + "id": "claude_wiki_\ud3f4\ub354_\uaddc\uce59", + "community": 39, + "norm_label": "wiki/ \u1111\u1169\u11af\u1103\u1165 \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "\uad6c\uc870", + "file_type": "document", + "source_file": "CLAUDE.md", + "source_location": "L5", + "_origin": "ast", + "id": "claude_\uad6c\uc870", + "community": 39, + "norm_label": "\u1100\u116e\u110c\u1169" + }, + { + "label": "\uc791\uc131 \uaddc\uce59", + "file_type": "document", + "source_file": "CLAUDE.md", + "source_location": "L11", + "_origin": "ast", + "id": "claude_\uc791\uc131_\uaddc\uce59", + "community": 39, + "norm_label": "\u110c\u1161\u11a8\u1109\u1165\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "a00_app_shell_framework.md", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework", + "community": 5, + "norm_label": "a00_app_shell_framework.md" + }, + { + "label": "A00_Common \u2014 App Shell Framework", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L8", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "community": 7, + "norm_label": "a00_common \u2014 app shell framework" + }, + { + "label": "\ud30c\uc77c \uad6c\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L12", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud30c\uc77c_\uad6c\uc131", + "community": 7, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u1109\u1165\u11bc" + }, + { + "label": "app_shell \uad6c\uc131\uc694\uc18c", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L20", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "community": 7, + "norm_label": "app_shell \u1100\u116e\u1109\u1165\u11bc\u110b\u116d\u1109\u1169" + }, + { + "label": "\ud14c\ub9c8 & \uc5b8\uc5b4 \uad00\ub9ac", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud14c\ub9c8_\uc5b8\uc5b4_\uad00\ub9ac", + "community": 7, + "norm_label": "\u1110\u1166\u1106\u1161 & \u110b\u1165\u11ab\u110b\u1165 \u1100\u116a\u11ab\u1105\u1175" + }, + { + "label": "\ud5e4\ub354 \uad6c\uc131 (64px \ub192\uc774, sticky)", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud5e4\ub354_\uad6c\uc131_64px_\ub192\uc774_sticky", + "community": 7, + "norm_label": "\u1112\u1166\u1103\u1165 \u1100\u116e\u1109\u1165\u11bc (64px \u1102\u1169\u11c1\u110b\u1175, sticky)" + }, + { + "label": "\uc778\uc99d \ubc84\ud2bc (\ube44\ub3d9\uae30 fillAuthActions)", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\uc778\uc99d_\ubc84\ud2bc_\ube44\ub3d9\uae30_fillauthactions", + "community": 7, + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1107\u1165\u1110\u1173\u11ab (\u1107\u1175\u1103\u1169\u11bc\u1100\u1175 fillauthactions)" + }, + { + "label": "\ub85c\uadf8\uc544\uc6c3 (onApp_Logout_Click)", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L44", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ub85c\uadf8\uc544\uc6c3_onapp_logout_click", + "community": 7, + "norm_label": "\u1105\u1169\u1100\u1173\u110b\u1161\u110b\u116e\u11ba (onapp_logout_click)" + }, + { + "label": "\ud478\ud130", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L48", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\ud478\ud130", + "community": 7, + "norm_label": "\u1111\u116e\u1110\u1165" + }, + { + "label": "router \ub77c\uc6b0\ud305 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L52", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_router_\ub77c\uc6b0\ud305_\ud14c\uc774\ube14", + "community": 7, + "norm_label": "router \u1105\u1161\u110b\u116e\u1110\u1175\u11bc \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "\uc778\uc99d \uac00\ub4dc", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L77", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\uc778\uc99d_\uac00\ub4dc", + "community": 7, + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1100\u1161\u1103\u1173" + }, + { + "label": "\uc138\ubd80 \uc2a4\uce90\ud3f4\ub4dc\u00b7CSS\u00b7\uc885\uc18d\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L84", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_\uc138\ubd80_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "community": 7, + "norm_label": "\u1109\u1166\u1107\u116e \u1109\u1173\u110f\u1162\u1111\u1169\u11af\u1103\u1173\u00b7css\u00b7\u110c\u1169\u11bc\u1109\u1169\u11a8\u1109\u1165\u11bc" + }, + { + "label": "a00_app_shell_framework_scaffold.md", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold", + "community": 5, + "norm_label": "a00_app_shell_framework_scaffold.md" + }, + { + "label": "A00_Common \u2014 \uc2a4\uce90\ud3f4\ub4dc\u00b7CSS\u00b7\uc885\uc18d\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "community": 5, + "norm_label": "a00_common \u2014 \u1109\u1173\u110f\u1162\u1111\u1169\u11af\u1103\u1173\u00b7css\u00b7\u110c\u1169\u11bc\u1109\u1169\u11a8\u1109\u1165\u11bc" + }, + { + "label": "b_page_scaffold", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_b_page_scaffold", + "community": 5, + "norm_label": "b_page_scaffold" + }, + { + "label": "CSS \uc778\uc81d\uc158", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_css_\uc778\uc81d\uc158", + "community": 5, + "norm_label": "css \u110b\u1175\u11ab\u110c\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\uc885\uc18d\uc131", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L25", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_\uc885\uc18d\uc131", + "community": 5, + "norm_label": "\u110c\u1169\u11bc\u1109\u1169\u11a8\u1109\u1165\u11bc" + }, + { + "label": "\uc0ac\uc6a9\ucc98", + "file_type": "document", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L33", + "_origin": "ast", + "id": "concepts_a00_app_shell_framework_scaffold_\uc0ac\uc6a9\ucc98", + "community": 5, + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165" + }, + { + "label": "api_common.md", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_api_common", + "community": 1, + "norm_label": "api_common.md" + }, + { + "label": "API \uacf5\ud1b5 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8)", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 1, + "norm_label": "api \u1100\u1169\u11bc\u1110\u1169\u11bc (\u110b\u1167\u1105\u1165 \u1111\u1166\u110b\u1175\u110c\u1175\u1100\u1161 \u1100\u1169\u11bc\u110b\u1172\u1112\u1161\u1102\u1173\u11ab \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173)" + }, + { + "label": "\uacf5\ud1b5 \uc624\ub958 \uc751\ub2f5 \ud3ec\ub9f7 (\uc804 \ub77c\uc6b0\ud130)", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_api_common_\uacf5\ud1b5_\uc624\ub958_\uc751\ub2f5_\ud3ec\ub9f7_\uc804_\ub77c\uc6b0\ud130", + "community": 1, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1169\u1105\u1172 \u110b\u1173\u11bc\u1103\u1161\u11b8 \u1111\u1169\u1106\u1162\u11ba (\u110c\u1165\u11ab \u1105\u1161\u110b\u116e\u1110\u1165)" + }, + { + "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc0c1\ud0dc \uc870\ud68c", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L17", + "_origin": "ast", + "id": "concepts_api_common_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc870\ud68c", + "community": 1, + "norm_label": "\u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e \u1109\u1161\u11bc\u1110\u1162 \u110c\u1169\u1112\u116c" + }, + { + "label": "\ud3f4\ub9c1 \ud328\ud134 (legacy workflow.json \uc124\uacc4; \ud604\uc7ac \uad6c\ud604\uc740 workflow-state API \uc0ac\uc6a9)", + "file_type": "document", + "source_file": "concepts/api_common.md", + "source_location": "L25", + "_origin": "ast", + "id": "concepts_api_common_\ud3f4\ub9c1_\ud328\ud134_legacy_workflow_json_\uc124\uacc4_\ud604\uc7ac_\uad6c\ud604\uc740_workflow_state_api_\uc0ac\uc6a9", + "community": 1, + "norm_label": "\u1111\u1169\u11af\u1105\u1175\u11bc \u1111\u1162\u1110\u1165\u11ab (legacy workflow.json \u1109\u1165\u11af\u1100\u1168; \u1112\u1167\u11ab\u110c\u1162 \u1100\u116e\u1112\u1167\u11ab\u110b\u1173\u11ab workflow-state api \u1109\u1161\u110b\u116d\u11bc)" + }, + { + "label": "auth_rbac.md", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_auth_rbac", + "community": 1, + "norm_label": "auth_rbac.md" + }, + { + "label": "\uc778\uc99d / RBAC", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc778\uc99d_rbac", + "community": 14, + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc / rbac" + }, + { + "label": "\uc138\uc158 \uc778\uc99d (backend.md 6.3)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc138\uc158_\uc778\uc99d_backend_md_6_3", + "community": 14, + "norm_label": "\u1109\u1166\u1109\u1167\u11ab \u110b\u1175\u11ab\u110c\u1173\u11bc (backend.md 6.3)" + }, + { + "label": "OTP / \ube44\ubc00\ubc88\ud638", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L18", + "_origin": "ast", + "id": "concepts_auth_rbac_otp_\ube44\ubc00\ubc88\ud638", + "community": 14, + "norm_label": "otp / \u1107\u1175\u1106\u1175\u11af\u1107\u1165\u11ab\u1112\u1169" + }, + { + "label": "\uc0ac\uc6a9\uc790 \uc0c1\ud0dc \uc0dd\uba85\uc8fc\uae30", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc0ac\uc6a9\uc790_\uc0c1\ud0dc_\uc0dd\uba85\uc8fc\uae30", + "community": 14, + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1109\u1161\u11bc\u1110\u1162 \u1109\u1162\u11bc\u1106\u1167\u11bc\u110c\u116e\u1100\u1175" + }, + { + "label": "\uc5ed\ud560 (users.role)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L33", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc5ed\ud560_users_role", + "community": 14, + "norm_label": "\u110b\u1167\u11a8\u1112\u1161\u11af (users.role)" + }, + { + "label": "\uad8c\ud55c \uac80\uc99d \ud5ec\ud37c (B01_Dashboard)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L42", + "_origin": "ast", + "id": "concepts_auth_rbac_\uad8c\ud55c_\uac80\uc99d_\ud5ec\ud37c_b01_dashboard", + "community": 14, + "norm_label": "\u1100\u116f\u11ab\u1112\u1161\u11ab \u1100\u1165\u11b7\u110c\u1173\u11bc \u1112\u1166\u11af\u1111\u1165 (b01_dashboard)" + }, + { + "label": "\uc778\uc99d \uac31\uc2e0", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L53", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc778\uc99d_\uac31\uc2e0", + "community": 14, + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1100\u1162\u11bc\u1109\u1175\u11ab" + }, + { + "label": "\ub77c\uc6b0\ud305 \uac00\ub4dc (frontend.md 5.2)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L56", + "_origin": "ast", + "id": "concepts_auth_rbac_\ub77c\uc6b0\ud305_\uac00\ub4dc_frontend_md_5_2", + "community": 14, + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1175\u11bc \u1100\u1161\u1103\u1173 (frontend.md 5.2)" + }, + { + "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L59", + "_origin": "ast", + "id": "concepts_auth_rbac_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", + "community": 14, + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165 (\u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169)" + }, + { + "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c-\uc2e4\ucf54\ub4dc \ubd88\uc77c\uce58 (A\uadf8\ub8f9 \uc778\uc81c\uc2a4\ud2b8 \ubc1c\uacac)", + "file_type": "document", + "source_file": "concepts/auth_rbac.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_auth_rbac_\uacc4\ud68d\uc11c_\uc2e4\ucf54\ub4dc_\ubd88\uc77c\uce58_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\ubc1c\uacac", + "community": 14, + "norm_label": "\u26a0\ufe0f \u1100\u1168\u1112\u116c\u11a8\u1109\u1165-\u1109\u1175\u11af\u110f\u1169\u1103\u1173 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175 (a\u1100\u1173\u1105\u116e\u11b8 \u110b\u1175\u11ab\u110c\u1166\u1109\u1173\u1110\u1173 \u1107\u1161\u11af\u1100\u1167\u11ab)" + }, + { + "label": "common_util.md", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_common_util", + "community": 2, + "norm_label": "common_util.md" + }, + { + "label": "\uacf5\ud1b5 \uc720\ud2f8 (common_util/)", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "community": 2, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af (common_util/)" + }, + { + "label": "\uc774\uba54\uc77c \ubc1c\uc1a1 (common_util_email.py)", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_common_util_\uc774\uba54\uc77c_\ubc1c\uc1a1_common_util_email_py", + "community": 2, + "norm_label": "\u110b\u1175\u1106\u1166\u110b\u1175\u11af \u1107\u1161\u11af\u1109\u1169\u11bc (common_util_email.py)" + }, + { + "label": "\ub9ac\uc18c\uc2a4 \ubaa8\ub2c8\ud130\ub9c1 (common_util_resource_monitor.py)", + "file_type": "document", + "source_file": "concepts/common_util.md", + "source_location": "L31", + "_origin": "ast", + "id": "concepts_common_util_\ub9ac\uc18c\uc2a4_\ubaa8\ub2c8\ud130\ub9c1_common_util_resource_monitor_py", + "community": 2, + "norm_label": "\u1105\u1175\u1109\u1169\u1109\u1173 \u1106\u1169\u1102\u1175\u1110\u1165\u1105\u1175\u11bc (common_util_resource_monitor.py)" + }, + { + "label": "files_surface.md", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_files_surface", + "community": 0, + "norm_label": "files_surface.md" + }, + { + "label": "DB: \ud30c\uc77c/\uc9c0\ud45c\uba74\ubd84\uc11d \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "community": 0, + "norm_label": "db: \u1111\u1161\u110b\u1175\u11af/\u110c\u1175\u1111\u116d\u1106\u1167\u11ab\u1107\u116e\u11ab\u1109\u1165\u11a8 \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "upload_sessions (\uc5c5\ub85c\ub4dc \uc138\uc158)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_upload_sessions_\uc5c5\ub85c\ub4dc_\uc138\uc158", + "community": 0, + "norm_label": "upload_sessions (\u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u1109\u1166\u1109\u1167\u11ab)" + }, + { + "label": "upload_chunks (\uc5c5\ub85c\ub4dc \uccad\ud06c \ub370\uc774\ud130)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L24", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_upload_chunks_\uc5c5\ub85c\ub4dc_\uccad\ud06c_\ub370\uc774\ud130", + "community": 0, + "norm_label": "upload_chunks (\u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u110e\u1165\u11bc\u110f\u1173 \u1103\u1166\u110b\u1175\u1110\u1165)" + }, + { + "label": "input_files (\uc785\ub825 \uc6d0\ubcf8 \ud30c\uc77c)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L35", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_input_files_\uc785\ub825_\uc6d0\ubcf8_\ud30c\uc77c", + "community": 0, + "norm_label": "input_files (\u110b\u1175\u11b8\u1105\u1167\u11a8 \u110b\u116f\u11ab\u1107\u1169\u11ab \u1111\u1161\u110b\u1175\u11af)" + }, + { + "label": "processed_point_cloud (\ud544\ud130/\ubcc0\ud658 \ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L48", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_processed_point_cloud_\ud544\ud130_\ubcc0\ud658_\ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc", + "community": 0, + "norm_label": "processed_point_cloud (\u1111\u1175\u11af\u1110\u1165/\u1107\u1167\u11ab\u1112\u116a\u11ab \u1111\u1169\u110b\u1175\u11ab\u1110\u1173\u110f\u1173\u11af\u1105\u1161\u110b\u116e\u1103\u1173)" + }, + { + "label": "surface_models (\uc9c0\ud45c\uba74 \ubaa8\ub378 \ubc0f \ub4f1\uace0\uc120)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L64", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_surface_models_\uc9c0\ud45c\uba74_\ubaa8\ub378_\ubc0f_\ub4f1\uace0\uc120", + "community": 0, + "norm_label": "surface_models (\u110c\u1175\u1111\u116d\u1106\u1167\u11ab \u1106\u1169\u1103\u1166\u11af \u1106\u1175\u11be \u1103\u1173\u11bc\u1100\u1169\u1109\u1165\u11ab)" + }, + { + "label": "terrain_layers (\uc9c0\ud615 \ub808\uc774\uc5b4)", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L77", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_terrain_layers_\uc9c0\ud615_\ub808\uc774\uc5b4", + "community": 0, + "norm_label": "terrain_layers (\u110c\u1175\u1112\u1167\u11bc \u1105\u1166\u110b\u1175\u110b\u1165)" + }, + { + "label": "input_files.status \uac12", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L89", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_input_files_status_\uac12", + "community": 0, + "norm_label": "input_files.status \u1100\u1161\u11b9" + }, + { + "label": "surface_models.status / processed_point_cloud.status \uac12", + "file_type": "document", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L92", + "_origin": "ast", + "id": "concepts_db_schema_files_surface_surface_models_status_processed_point_cloud_status_\uac12", + "community": 0, + "norm_label": "surface_models.status / processed_point_cloud.status \u1100\u1161\u11b9" + }, + { + "label": "logs_monitoring.md", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring", + "community": 0, + "norm_label": "logs_monitoring.md" + }, + { + "label": "DB: \ub85c\uadf8/\ubaa8\ub2c8\ud130\ub9c1 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "community": 0, + "norm_label": "db: \u1105\u1169\u1100\u1173/\u1106\u1169\u1102\u1175\u1110\u1165\u1105\u1175\u11bc \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "login_logs (\ub85c\uadf8\uc778 \uc2dc\ub3c4 \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_login_logs_\ub85c\uadf8\uc778_\uc2dc\ub3c4_\ub85c\uadf8", + "community": 0, + "norm_label": "login_logs (\u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u1109\u1175\u1103\u1169 \u1105\u1169\u1100\u1173)" + }, + { + "label": "activity_logs (\uc0ac\uc6a9\uc790 \ud65c\ub3d9 \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_activity_logs_\uc0ac\uc6a9\uc790_\ud65c\ub3d9_\ub85c\uadf8", + "community": 0, + "norm_label": "activity_logs (\u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1112\u116a\u11af\u1103\u1169\u11bc \u1105\u1169\u1100\u1173)" + }, + { + "label": "audit_logs (\uac10\uc0ac \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L33", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_audit_logs_\uac10\uc0ac_\ub85c\uadf8", + "community": 0, + "norm_label": "audit_logs (\u1100\u1161\u11b7\u1109\u1161 \u1105\u1169\u1100\u1173)" + }, + { + "label": "system_audit_logs (\ud504\ub85c\uc81d\ud2b8/\uc870\uc9c1 \ubcc0\uacbd \uac10\uc0ac \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L43", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_audit_logs_\ud504\ub85c\uc81d\ud2b8_\uc870\uc9c1_\ubcc0\uacbd_\uac10\uc0ac_\ub85c\uadf8", + "community": 0, + "norm_label": "system_audit_logs (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173/\u110c\u1169\u110c\u1175\u11a8 \u1107\u1167\u11ab\u1100\u1167\u11bc \u1100\u1161\u11b7\u1109\u1161 \u1105\u1169\u1100\u1173)" + }, + { + "label": "system_admin_logs (\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790 \ud589\uc704 \ub85c\uadf8)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L53", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_admin_logs_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\ud589\uc704_\ub85c\uadf8", + "community": 0, + "norm_label": "system_admin_logs (\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161 \u1112\u1162\u11bc\u110b\u1171 \u1105\u1169\u1100\u1173)" + }, + { + "label": "system_resources (\uc2dc\uc2a4\ud15c \uc790\uc6d0 \uacc4\uce21)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L62", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_resources_\uc2dc\uc2a4\ud15c_\uc790\uc6d0_\uacc4\uce21", + "community": 0, + "norm_label": "system_resources (\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u110c\u1161\u110b\u116f\u11ab \u1100\u1168\u110e\u1173\u11a8)" + }, + { + "label": "support_requests (\uae30\uc220 \uc9c0\uc6d0 \uc694\uccad)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L71", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_support_requests_\uae30\uc220_\uc9c0\uc6d0_\uc694\uccad", + "community": 0, + "norm_label": "support_requests (\u1100\u1175\u1109\u116e\u11af \u110c\u1175\u110b\u116f\u11ab \u110b\u116d\u110e\u1165\u11bc)" + }, + { + "label": "change_logs (\uc124\uacc4 \ubcc0\uacbd \uc774\ub825)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L83", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_change_logs_\uc124\uacc4_\ubcc0\uacbd_\uc774\ub825", + "community": 0, + "norm_label": "change_logs (\u1109\u1165\u11af\u1100\u1168 \u1107\u1167\u11ab\u1100\u1167\u11bc \u110b\u1175\u1105\u1167\u11a8)" + }, + { + "label": "system_audit_logs \u2014 \uc0ac\uc6a9\ucc98 (B01, B02)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L96", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_system_audit_logs_\uc0ac\uc6a9\ucc98_b01_b02", + "community": 0, + "norm_label": "system_audit_logs \u2014 \u1109\u1161\u110b\u116d\u11bc\u110e\u1165 (b01, b02)" + }, + { + "label": "\ub9ac\uc18c\uc2a4 API (SYSTEM_ADMIN \uc804\uc6a9)", + "file_type": "document", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L100", + "_origin": "ast", + "id": "concepts_db_schema_logs_monitoring_\ub9ac\uc18c\uc2a4_api_system_admin_\uc804\uc6a9", + "community": 0, + "norm_label": "\u1105\u1175\u1109\u1169\u1109\u1173 api (system_admin \u110c\u1165\u11ab\u110b\u116d\u11bc)" + }, + { + "label": "overview.md", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_overview", + "community": 0, + "norm_label": "overview.md" + }, + { + "label": "DB \uc2a4\ud0a4\ub9c8 \uac1c\uc694", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "community": 0, + "norm_label": "db \u1109\u1173\u110f\u1175\u1106\u1161 \u1100\u1162\u110b\u116d" + }, + { + "label": "\ud14c\uc774\ube14 \uadf8\ub8f9 (9\uac1c)", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L22", + "_origin": "ast", + "id": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uadf8\ub8f9_9\uac1c", + "community": 0, + "norm_label": "\u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1100\u1173\u1105\u116e\u11b8 (9\u1100\u1162)" + }, + { + "label": "\ud30c\uc77c \uacbd\ub85c \ucd94\uc801 \uceec\ub7fc (DB\uc5d0 \uacbd\ub85c\ub9cc \uae30\ub85d, \uc2e4 \ud30c\uc77c\uc740 \ud30c\uc77c\uc2dc\uc2a4\ud15c)", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L34", + "_origin": "ast", + "id": "concepts_db_schema_overview_\ud30c\uc77c_\uacbd\ub85c_\ucd94\uc801_\uceec\ub7fc_db\uc5d0_\uacbd\ub85c\ub9cc_\uae30\ub85d_\uc2e4_\ud30c\uc77c\uc740_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "community": 0, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u1167\u11bc\u1105\u1169 \u110e\u116e\u110c\u1165\u11a8 \u110f\u1165\u11af\u1105\u1165\u11b7 (db\u110b\u1166 \u1100\u1167\u11bc\u1105\u1169\u1106\u1161\u11ab \u1100\u1175\u1105\u1169\u11a8, \u1109\u1175\u11af \u1111\u1161\u110b\u1175\u11af\u110b\u1173\u11ab \u1111\u1161\u110b\u1175\u11af\u1109\u1175\u1109\u1173\u1110\u1166\u11b7)" + }, + { + "label": "\uc124\uacc4 \uc6d0\uce59", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L51", + "_origin": "ast", + "id": "concepts_db_schema_overview_\uc124\uacc4_\uc6d0\uce59", + "community": 0, + "norm_label": "\u1109\u1165\u11af\u1100\u1168 \u110b\u116f\u11ab\u110e\u1175\u11a8" + }, + { + "label": "\ud14c\uc774\ube14 \uad00\uacc4 (\ud575\uc2ec \ud750\ub984)", + "file_type": "document", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L56", + "_origin": "ast", + "id": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uad00\uacc4_\ud575\uc2ec_\ud750\ub984", + "community": 0, + "norm_label": "\u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1100\u116a\u11ab\u1100\u1168 (\u1112\u1162\u11a8\u1109\u1175\u11b7 \u1112\u1173\u1105\u1173\u11b7)" + }, + { + "label": "projects.md", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_projects", + "community": 0, + "norm_label": "projects.md" + }, + { + "label": "DB: \ud504\ub85c\uc81d\ud2b8 \uad00\ub9ac \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "community": 0, + "norm_label": "db: \u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1100\u116a\u11ab\u1105\u1175 \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "projects (\ud504\ub85c\uc81d\ud2b8)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_projects_projects_\ud504\ub85c\uc81d\ud2b8", + "community": 0, + "norm_label": "projects (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173)" + }, + { + "label": "project_versions (\ud504\ub85c\uc81d\ud2b8 \ubc84\uc804 \uc2a4\ub0c5\uc0f7)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_db_schema_projects_project_versions_\ud504\ub85c\uc81d\ud2b8_\ubc84\uc804_\uc2a4\ub0c5\uc0f7", + "community": 0, + "norm_label": "project_versions (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1107\u1165\u110c\u1165\u11ab \u1109\u1173\u1102\u1162\u11b8\u1109\u1163\u11ba)" + }, + { + "label": "project_automations (\ud504\ub85c\uc81d\ud2b8 \uc790\ub3d9\ud654 \uc815\ucc45)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L40", + "_origin": "ast", + "id": "concepts_db_schema_projects_project_automations_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654_\uc815\ucc45", + "community": 0, + "norm_label": "project_automations (\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u110c\u1161\u1103\u1169\u11bc\u1112\u116a \u110c\u1165\u11bc\u110e\u1162\u11a8)" + }, + { + "label": "project_workflow_stages (\ub2e8\uacc4\ubcc4 \uc0c1\uc138 \uc0c1\ud0dc)", + "file_type": "document", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L54", + "_origin": "ast", + "id": "concepts_db_schema_projects_project_workflow_stages_\ub2e8\uacc4\ubcc4_\uc0c1\uc138_\uc0c1\ud0dc", + "community": 0, + "norm_label": "project_workflow_stages (\u1103\u1161\u11ab\u1100\u1168\u1107\u1167\u11af \u1109\u1161\u11bc\u1109\u1166 \u1109\u1161\u11bc\u1110\u1162)" + }, + { + "label": "route_profile.md", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_route_profile", + "community": 0, + "norm_label": "route_profile.md" + }, + { + "label": "DB: \uacbd\ub85c/\uc885\ud6a1\ub2e8 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "community": 24, + "norm_label": "db: \u1100\u1167\u11bc\u1105\u1169/\u110c\u1169\u11bc\u1112\u116c\u11bc\u1103\u1161\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "routes (\ub178\uc120 \uacbd\ub85c)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_routes_\ub178\uc120_\uacbd\ub85c", + "community": 24, + "norm_label": "routes (\u1102\u1169\u1109\u1165\u11ab \u1100\u1167\u11bc\u1105\u1169)" + }, + { + "label": "route_points (\uacbd\ub85c \uc88c\ud45c\uc810)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_route_points_\uacbd\ub85c_\uc88c\ud45c\uc810", + "community": 24, + "norm_label": "route_points (\u1100\u1167\u11bc\u1105\u1169 \u110c\u116a\u1111\u116d\u110c\u1165\u11b7)" + }, + { + "label": "route_statistics (\ub178\uc120 \ud1b5\uacc4)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L36", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_route_statistics_\ub178\uc120_\ud1b5\uacc4", + "community": 24, + "norm_label": "route_statistics (\u1102\u1169\u1109\u1165\u11ab \u1110\u1169\u11bc\u1100\u1168)" + }, + { + "label": "longitudinal_sections (\uc885\ub2e8\uba74 \uc124\uacc4)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L45", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", + "community": 24, + "norm_label": "longitudinal_sections (\u110c\u1169\u11bc\u1103\u1161\u11ab\u1106\u1167\u11ab \u1109\u1165\u11af\u1100\u1168)" + }, + { + "label": "cross_sections (\ud6a1\ub2e8\uba74 \uc124\uacc4)", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L55", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_cross_sections_\ud6a1\ub2e8\uba74_\uc124\uacc4", + "community": 24, + "norm_label": "cross_sections (\u1112\u116c\u11bc\u1103\u1161\u11ab\u1106\u1167\u11ab \u1109\u1165\u11af\u1100\u1168)" + }, + { + "label": "routes.status \ud750\ub984", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_routes_status_\ud750\ub984", + "community": 24, + "norm_label": "routes.status \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "cross_sections.data.structures", + "file_type": "document", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L68", + "_origin": "ast", + "id": "concepts_db_schema_route_profile_cross_sections_data_structures", + "community": 24, + "norm_label": "cross_sections.data.structures" + }, + { + "label": "structure_output.md", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_structure_output", + "community": 0, + "norm_label": "structure_output.md" + }, + { + "label": "DB: \uad6c\uc870\ubb3c/\uc218\ub7c9/\uc0b0\ucd9c\ubb3c \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "community": 0, + "norm_label": "db: \u1100\u116e\u110c\u1169\u1106\u116e\u11af/\u1109\u116e\u1105\u1163\u11bc/\u1109\u1161\u11ab\u110e\u116e\u11af\u1106\u116e\u11af \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "structures (\ubc30\uce58 \uad6c\uc870\ubb3c)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_structures_\ubc30\uce58_\uad6c\uc870\ubb3c", + "community": 0, + "norm_label": "structures (\u1107\u1162\u110e\u1175 \u1100\u116e\u110c\u1169\u1106\u116e\u11af)" + }, + { + "label": "quantity_items (\uc218\ub7c9 \uc0b0\ucd9c \ud56d\ubaa9)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L29", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_quantity_items_\uc218\ub7c9_\uc0b0\ucd9c_\ud56d\ubaa9", + "community": 0, + "norm_label": "quantity_items (\u1109\u116e\u1105\u1163\u11bc \u1109\u1161\u11ab\u110e\u116e\u11af \u1112\u1161\u11bc\u1106\u1169\u11a8)" + }, + { + "label": "outputs (\ucd5c\uc885 \uacac\uc801/\ub3c4\uba74 \uc0b0\ucd9c \uc138\uc158)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L42", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_outputs_\ucd5c\uc885_\uacac\uc801_\ub3c4\uba74_\uc0b0\ucd9c_\uc138\uc158", + "community": 0, + "norm_label": "outputs (\u110e\u116c\u110c\u1169\u11bc \u1100\u1167\u11ab\u110c\u1165\u11a8/\u1103\u1169\u1106\u1167\u11ab \u1109\u1161\u11ab\u110e\u116e\u11af \u1109\u1166\u1109\u1167\u11ab)" + }, + { + "label": "output_files (\uac1c\ubcc4 \uc0b0\ucd9c \ud30c\uc77c \ub9ac\uc2a4\ud2b8)", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L54", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_output_files_\uac1c\ubcc4_\uc0b0\ucd9c_\ud30c\uc77c_\ub9ac\uc2a4\ud2b8", + "community": 0, + "norm_label": "output_files (\u1100\u1162\u1107\u1167\u11af \u1109\u1161\u11ab\u110e\u116e\u11af \u1111\u1161\u110b\u1175\u11af \u1105\u1175\u1109\u1173\u1110\u1173)" + }, + { + "label": "quantity_items \ucd1d\ube44\uc6a9 \uacc4\uc0b0 \uc608", + "file_type": "document", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_db_schema_structure_output_quantity_items_\ucd1d\ube44\uc6a9_\uacc4\uc0b0_\uc608", + "community": 0, + "norm_label": "quantity_items \u110e\u1169\u11bc\u1107\u1175\u110b\u116d\u11bc \u1100\u1168\u1109\u1161\u11ab \u110b\u1168" + }, + { + "label": "README.md", + "file_type": "document", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_unconfirmed_readme", + "community": 0, + "norm_label": "readme.md" + }, + { + "label": "\ubbf8\ud655\uc815 \ud14c\uc774\ube14 \ubcf4\uad00\uc18c (Unconfirmed DB Schemas)", + "file_type": "document", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", + "community": 0, + "norm_label": "\u1106\u1175\u1112\u116a\u11a8\u110c\u1165\u11bc \u1110\u1166\u110b\u1175\u1107\u1173\u11af \u1107\u1169\u1100\u116a\u11ab\u1109\u1169 (unconfirmed db schemas)" + }, + { + "label": "\uc6b4\uc601 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L5", + "_origin": "ast", + "id": "concepts_db_schema_unconfirmed_readme_\uc6b4\uc601_\uaddc\uce59", + "community": 0, + "norm_label": "\u110b\u116e\u11ab\u110b\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "users_auth.md", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_db_schema_users_auth", + "community": 1, + "norm_label": "users_auth.md" + }, + { + "label": "DB: \uc0ac\uc6a9\uc790/\uc778\uc99d/\uc870\uc9c1 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "community": 1, + "norm_label": "db: \u1109\u1161\u110b\u116d\u11bc\u110c\u1161/\u110b\u1175\u11ab\u110c\u1173\u11bc/\u110c\u1169\u110c\u1175\u11a8 \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "users (\uc0ac\uc6a9\uc790)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_users_\uc0ac\uc6a9\uc790", + "community": 1, + "norm_label": "users (\u1109\u1161\u110b\u116d\u11bc\u110c\u1161)" + }, + { + "label": "companies (\ud68c\uc0ac)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L32", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_companies_\ud68c\uc0ac", + "community": 1, + "norm_label": "companies (\u1112\u116c\u1109\u1161)" + }, + { + "label": "sessions (\uc138\uc158)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L45", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_sessions_\uc138\uc158", + "community": 1, + "norm_label": "sessions (\u1109\u1166\u1109\u1167\u11ab)" + }, + { + "label": "email_otps (\uc774\uba54\uc77c OTP)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L56", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_email_otps_\uc774\uba54\uc77c_otp", + "community": 1, + "norm_label": "email_otps (\u110b\u1175\u1106\u1166\u110b\u1175\u11af otp)" + }, + { + "label": "trusted_devices (\uc2e0\ub8b0 \uae30\uae30)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_trusted_devices_\uc2e0\ub8b0_\uae30\uae30", + "community": 1, + "norm_label": "trusted_devices (\u1109\u1175\u11ab\u1105\u116c \u1100\u1175\u1100\u1175)" + }, + { + "label": "join_requests (\ud68c\uc0ac \uac00\uc785 \uc2e0\uccad)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L73", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_join_requests_\ud68c\uc0ac_\uac00\uc785_\uc2e0\uccad", + "community": 1, + "norm_label": "join_requests (\u1112\u116c\u1109\u1161 \u1100\u1161\u110b\u1175\u11b8 \u1109\u1175\u11ab\u110e\u1165\u11bc)" + }, + { + "label": "user_consents (\uc57d\uad00 \ub3d9\uc758)", + "file_type": "document", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L84", + "_origin": "ast", + "id": "concepts_db_schema_users_auth_user_consents_\uc57d\uad00_\ub3d9\uc758", + "community": 1, + "norm_label": "user_consents (\u110b\u1163\u11a8\u1100\u116a\u11ab \u1103\u1169\u11bc\u110b\u1174)" + }, + { + "label": "dependencies.md", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_dependencies", + "community": 2, + "norm_label": "dependencies.md" + }, + { + "label": "\uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac \uc758\uc874\uc131", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "community": 2, + "norm_label": "\u110b\u116c\u1107\u116e \u1105\u1161\u110b\u1175\u1107\u1173\u1105\u1165\u1105\u1175 \u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubc31\uc5d4\ub4dc (Python 3.12.7)", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_dependencies_\ubc31\uc5d4\ub4dc_python_3_12_7", + "community": 2, + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 (python 3.12.7)" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc (TypeScript/Node.js)", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript_node_js", + "community": 2, + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 (typescript/node.js)" + }, + { + "label": "\uc120\uc815 \uc6d0\uce59 (agent.md 3\uc808)", + "file_type": "document", + "source_file": "concepts/dependencies.md", + "source_location": "L35", + "_origin": "ast", + "id": "concepts_dependencies_\uc120\uc815_\uc6d0\uce59_agent_md_3\uc808", + "community": 2, + "norm_label": "\u1109\u1165\u11ab\u110c\u1165\u11bc \u110b\u116f\u11ab\u110e\u1175\u11a8 (agent.md 3\u110c\u1165\u11af)" + }, + { + "label": "schema_common.md", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_schema_common", + "community": 1, + "norm_label": "schema_common.md" + }, + { + "label": "\uacf5\ud1b5 \uc2a4\ud0a4\ub9c8 (Pydantic \uc694\uccad/\uc751\ub2f5 \uaddc\uce59)", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "community": 1, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic \u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1100\u1172\u110e\u1175\u11a8)" + }, + { + "label": "\uac80\uc99d \uc6d0\uce59 (backend.md 4\uc808)", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_schema_common_\uac80\uc99d_\uc6d0\uce59_backend_md_4\uc808", + "community": 1, + "norm_label": "\u1100\u1165\u11b7\u110c\u1173\u11bc \u110b\u116f\u11ab\u110e\u1175\u11a8 (backend.md 4\u110c\u1165\u11af)" + }, + { + "label": "\uba85\uba85 \uaddc\uce59", + "file_type": "document", + "source_file": "concepts/schema_common.md", + "source_location": "L16", + "_origin": "ast", + "id": "concepts_schema_common_\uba85\uba85_\uaddc\uce59", + "community": 1, + "norm_label": "\u1106\u1167\u11bc\u1106\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8" + }, + { + "label": "storage_paths.md", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_storage_paths", + "community": 2, + "norm_label": "storage_paths.md" + }, + { + "label": "\uc800\uc7a5 \uacbd\ub85c \uaddc\uce59 (Workflow-based Folder Structure)", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "community": 2, + "norm_label": "\u110c\u1165\u110c\u1161\u11bc \u1100\u1167\u11bc\u1105\u1169 \u1100\u1172\u110e\u1175\u11a8 (workflow-based folder structure)" + }, + { + "label": "\uacbd\ub85c \ud328\ud134", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L11", + "_origin": "ast", + "id": "concepts_storage_paths_\uacbd\ub85c_\ud328\ud134", + "community": 2, + "norm_label": "\u1100\u1167\u11bc\u1105\u1169 \u1111\u1162\u1110\u1165\u11ab" + }, + { + "label": "\uc6d0\uce59 (backend.md 3\uc808)", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L23", + "_origin": "ast", + "id": "concepts_storage_paths_\uc6d0\uce59_backend_md_3\uc808", + "community": 2, + "norm_label": "\u110b\u116f\u11ab\u110e\u1175\u11a8 (backend.md 3\u110c\u1165\u11af)" + }, + { + "label": "DB \uceec\ub7fc \u2194 \uc2e4\uc81c \uacbd\ub85c \ub9e4\ud551", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_storage_paths_db_\uceec\ub7fc_\uc2e4\uc81c_\uacbd\ub85c_\ub9e4\ud551", + "community": 2, + "norm_label": "db \u110f\u1165\u11af\u1105\u1165\u11b7 \u2194 \u1109\u1175\u11af\u110c\u1166 \u1100\u1167\u11bc\u1105\u1169 \u1106\u1162\u1111\u1175\u11bc" + }, + { + "label": "\ud30c\uc77c\uba85 \uaddc\uce59 (structure.md 1\uc808)", + "file_type": "document", + "source_file": "concepts/storage_paths.md", + "source_location": "L33", + "_origin": "ast", + "id": "concepts_storage_paths_\ud30c\uc77c\uba85_\uaddc\uce59_structure_md_1\uc808", + "community": 2, + "norm_label": "\u1111\u1161\u110b\u1175\u11af\u1106\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8 (structure.md 1\u110c\u1165\u11af)" + }, + { + "label": "ui_templates.md", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_ui_templates", + "community": 5, + "norm_label": "ui_templates.md" + }, + { + "label": "UI Templates \u2014 Localization & Components", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L8", + "_origin": "ast", + "id": "concepts_ui_templates_ui_templates_localization_components", + "community": 8, + "norm_label": "ui templates \u2014 localization & components" + }, + { + "label": "ui_template_locale.ts (\ub2e4\uad6d\uc5b4 \uad00\ub9ac)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L12", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", + "community": 8, + "norm_label": "ui_template_locale.ts (\u1103\u1161\u1100\u116e\u11a8\u110b\u1165 \u1100\u116a\u11ab\u1105\u1175)" + }, + { + "label": "\ud575\uc2ec \uae30\ub2a5", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L16", + "_origin": "ast", + "id": "concepts_ui_templates_\ud575\uc2ec_\uae30\ub2a5", + "community": 8, + "norm_label": "\u1112\u1162\u11a8\u1109\u1175\u11b7 \u1100\u1175\u1102\u1173\u11bc" + }, + { + "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L24", + "_origin": "ast", + "id": "concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", + "community": 8, + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165 (\u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169)" + }, + { + "label": "ui_template_elements.ts (\uacf5\ud1b5 \ucef4\ud3ec\ub10c\ud2b8)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L30", + "_origin": "ast", + "id": "concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", + "community": 8, + "norm_label": "ui_template_elements.ts (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173)" + }, + { + "label": "\uc81c\uacf5 \ucef4\ud3ec\ub10c\ud2b8", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L34", + "_origin": "ast", + "id": "concepts_ui_templates_\uc81c\uacf5_\ucef4\ud3ec\ub10c\ud2b8", + "community": 8, + "norm_label": "\u110c\u1166\u1100\u1169\u11bc \u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173" + }, + { + "label": "\uc0ac\uc6a9\ucc98 (\uc5ed\ucc38\uc870)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L50", + "_origin": "ast", + "id": "concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870_50", + "community": 8, + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110e\u1165 (\u110b\u1167\u11a8\u110e\u1161\u11b7\u110c\u1169)" + }, + { + "label": "theme.css (\uc2a4\ud0c0\uc77c \ubcc0\uc218)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L59", + "_origin": "ast", + "id": "concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", + "community": 8, + "norm_label": "theme.css (\u1109\u1173\u1110\u1161\u110b\u1175\u11af \u1107\u1167\u11ab\u1109\u116e)" + }, + { + "label": "\ud575\uc2ec \ubcc0\uc218", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L63", + "_origin": "ast", + "id": "concepts_ui_templates_\ud575\uc2ec_\ubcc0\uc218", + "community": 8, + "norm_label": "\u1112\u1162\u11a8\u1109\u1175\u11b7 \u1107\u1167\u11ab\u1109\u116e" + }, + { + "label": "\uc81c\uc57d (backend.md \u00a71)", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L75", + "_origin": "ast", + "id": "concepts_ui_templates_\uc81c\uc57d_backend_md_1", + "community": 8, + "norm_label": "\u110c\u1166\u110b\u1163\u11a8 (backend.md \u00a71)" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "concepts/ui_templates.md", + "source_location": "L82", + "_origin": "ast", + "id": "concepts_ui_templates_\uc758\uc874\uc131", + "community": 8, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "workflow_state.md", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L1", + "_origin": "ast", + "id": "concepts_workflow_state", + "community": 2, + "norm_label": "workflow_state.md" + }, + { + "label": "Workflow \uc0c1\ud0dc \uad00\ub9ac \u2014 \uad6c\ud604 \uc644\ub8cc (\uc2e4 DB \ud655\uc778\ub428)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L9", + "_origin": "ast", + "id": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "community": 21, + "norm_label": "workflow \u1109\u1161\u11bc\u1110\u1162 \u1100\u116a\u11ab\u1105\u1175 \u2014 \u1100\u116e\u1112\u1167\u11ab \u110b\u116a\u11ab\u1105\u116d (\u1109\u1175\u11af db \u1112\u116a\u11a8\u110b\u1175\u11ab\u1103\u116c\u11b7)" + }, + { + "label": "SSOT: `project_workflow_stages` \ud14c\uc774\ube14 (\uc2e4 DB \ud655\uc778)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L13", + "_origin": "ast", + "id": "concepts_workflow_state_ssot_project_workflow_stages_\ud14c\uc774\ube14_\uc2e4_db_\ud655\uc778", + "community": 21, + "norm_label": "ssot: `project_workflow_stages` \u1110\u1166\u110b\u1175\u1107\u1173\u11af (\u1109\u1175\u11af db \u1112\u116a\u11a8\u110b\u1175\u11ab)" + }, + { + "label": "\uacf5\ud1b5 \uc720\ud2f8 `common_util/common_util_workflow_state.py`", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L27", + "_origin": "ast", + "id": "concepts_workflow_state_\uacf5\ud1b5_\uc720\ud2f8_common_util_common_util_workflow_state_py", + "community": 21, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af `common_util/common_util_workflow_state.py`" + }, + { + "label": "\uc2e4 \uc5f0\ub3d9 \ud604\ud669 (\ud30c\uc77c:\uc904\ubc88\ud638)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L37", + "_origin": "ast", + "id": "concepts_workflow_state_\uc2e4_\uc5f0\ub3d9_\ud604\ud669_\ud30c\uc77c_\uc904\ubc88\ud638", + "community": 21, + "norm_label": "\u1109\u1175\u11af \u110b\u1167\u11ab\u1103\u1169\u11bc \u1112\u1167\u11ab\u1112\u116a\u11bc (\u1111\u1161\u110b\u1175\u11af:\u110c\u116e\u11af\u1107\u1165\u11ab\u1112\u1169)" + }, + { + "label": "\uc870\ud68c API (\uc2e4\uc81c \uc874\uc7ac, \uacc4\ud68d\uc11c\uc640 \uacbd\ub85c \uc77c\uce58)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L47", + "_origin": "ast", + "id": "concepts_workflow_state_\uc870\ud68c_api_\uc2e4\uc81c_\uc874\uc7ac_\uacc4\ud68d\uc11c\uc640_\uacbd\ub85c_\uc77c\uce58", + "community": 21, + "norm_label": "\u110c\u1169\u1112\u116c api (\u1109\u1175\u11af\u110c\u1166 \u110c\u1169\u11ab\u110c\u1162, \u1100\u1168\u1112\u116c\u11a8\u1109\u1165\u110b\u116a \u1100\u1167\u11bc\u1105\u1169 \u110b\u1175\u11af\u110e\u1175)" + }, + { + "label": "\uc0c1\ud0dc \uc804\uc774 (\uad6c\ud604\ub300\ub85c)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L54", + "_origin": "ast", + "id": "concepts_workflow_state_\uc0c1\ud0dc_\uc804\uc774_\uad6c\ud604\ub300\ub85c", + "community": 21, + "norm_label": "\u1109\u1161\u11bc\u1110\u1162 \u110c\u1165\u11ab\u110b\u1175 (\u1100\u116e\u1112\u1167\u11ab\u1103\u1162\u1105\u1169)" + }, + { + "label": "projects.status \ubb38\uc790\uc5f4 \uce90\uc2dc (\ud638\ud658\uc6a9, \uacc4\ud68d\uc11c \ubc29\uce68\ub300\ub85c \uc720\uc9c0 \uc911)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L62", + "_origin": "ast", + "id": "concepts_workflow_state_projects_status_\ubb38\uc790\uc5f4_\uce90\uc2dc_\ud638\ud658\uc6a9_\uacc4\ud68d\uc11c_\ubc29\uce68\ub300\ub85c_\uc720\uc9c0_\uc911", + "community": 21, + "norm_label": "projects.status \u1106\u116e\u11ab\u110c\u1161\u110b\u1167\u11af \u110f\u1162\u1109\u1175 (\u1112\u1169\u1112\u116a\u11ab\u110b\u116d\u11bc, \u1100\u1168\u1112\u116c\u11a8\u1109\u1165 \u1107\u1161\u11bc\u110e\u1175\u11b7\u1103\u1162\u1105\u1169 \u110b\u1172\u110c\u1175 \u110c\u116e\u11bc)" + }, + { + "label": "B04 \uc0c1\ud0dc \uc870\ud68c \u2014 \ub808\uac70\uc2dc \ud3f4\ubc31 (\ub2f9\ucd08 \"\uc794\uc7ac\"\ub85c \ud45c\uae30\ud588\uc73c\ub098 \uc815\uc815)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L65", + "_origin": "ast", + "id": "concepts_workflow_state_b04_\uc0c1\ud0dc_\uc870\ud68c_\ub808\uac70\uc2dc_\ud3f4\ubc31_\ub2f9\ucd08_\uc794\uc7ac_\ub85c_\ud45c\uae30\ud588\uc73c\ub098_\uc815\uc815", + "community": 21, + "norm_label": "b04 \u1109\u1161\u11bc\u1110\u1162 \u110c\u1169\u1112\u116c \u2014 \u1105\u1166\u1100\u1165\u1109\u1175 \u1111\u1169\u11af\u1107\u1162\u11a8 (\u1103\u1161\u11bc\u110e\u1169 \"\u110c\u1161\u11ab\u110c\u1162\"\u1105\u1169 \u1111\u116d\u1100\u1175\u1112\u1162\u11bb\u110b\u1173\u1102\u1161 \u110c\u1165\u11bc\u110c\u1165\u11bc)" + }, + { + "label": "\ubbf8\ud574\uacb0 \uc0ac\ud56d (\uacc4\ud68d\uc11c \uc6d0\ubb38, \uc544\uc9c1 \uacb0\uc815 \uc548 \ub428)", + "file_type": "document", + "source_file": "concepts/workflow_state.md", + "source_location": "L72", + "_origin": "ast", + "id": "concepts_workflow_state_\ubbf8\ud574\uacb0_\uc0ac\ud56d_\uacc4\ud68d\uc11c_\uc6d0\ubb38_\uc544\uc9c1_\uacb0\uc815_\uc548_\ub428", + "community": 21, + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af \u1109\u1161\u1112\u1161\u11bc (\u1100\u1168\u1112\u116c\u11a8\u1109\u1165 \u110b\u116f\u11ab\u1106\u116e\u11ab, \u110b\u1161\u110c\u1175\u11a8 \u1100\u1167\u11af\u110c\u1165\u11bc \u110b\u1161\u11ab \u1103\u116c\u11b7)" + }, + { + "label": "index.md", + "file_type": "document", + "source_file": "index.md", + "source_location": "L1", + "_origin": "ast", + "id": "index", + "community": 3, + "norm_label": "index.md" + }, + { + "label": "Wiki Index", + "file_type": "document", + "source_file": "index.md", + "source_location": "L6", + "_origin": "ast", + "id": "index_wiki_index", + "community": 3, + "norm_label": "wiki index" + }, + { + "label": "\ud398\uc774\uc9c0 \u2014 \ub85c\uadf8\uc778 \ud6c4 \uc6cc\ud06c\ud50c\ub85c\uc6b0 (B01~B09)", + "file_type": "document", + "source_file": "index.md", + "source_location": "L10", + "_origin": "ast", + "id": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "community": 3, + "norm_label": "\u1111\u1166\u110b\u1175\u110c\u1175 \u2014 \u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u1112\u116e \u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e (b01~b09)" + }, + { + "label": "[[B01_Dashboard/B01_backend|B01_Dashboard]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L12", + "_origin": "ast", + "id": "index_b01_dashboard_b01_backend_b01_dashboard", + "community": 3, + "norm_label": "[[b01_dashboard/b01_backend|b01_dashboard]]" + }, + { + "label": "[[B02_ProjRegister/B02_backend|B02_ProjRegister]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L15", + "_origin": "ast", + "id": "index_b02_projregister_b02_backend_b02_projregister", + "community": 3, + "norm_label": "[[b02_projregister/b02_backend|b02_projregister]]" + }, + { + "label": "[[B03_FileInput/B03_backend|B03_FileInput]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L18", + "_origin": "ast", + "id": "index_b03_fileinput_b03_backend_b03_fileinput", + "community": 3, + "norm_label": "[[b03_fileinput/b03_backend|b03_fileinput]]" + }, + { + "label": "[[B04_wf1_Surface/B04_backend|B04_wf1_Surface]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L21", + "_origin": "ast", + "id": "index_b04_wf1_surface_b04_backend_b04_wf1_surface", + "community": 3, + "norm_label": "[[b04_wf1_surface/b04_backend|b04_wf1_surface]]" + }, + { + "label": "[[B05_wf2_Route/B05_backend|B05_wf2_Route]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L24", + "_origin": "ast", + "id": "index_b05_wf2_route_b05_backend_b05_wf2_route", + "community": 3, + "norm_label": "[[b05_wf2_route/b05_backend|b05_wf2_route]]" + }, + { + "label": "[[B06_wf3_ProfileCross/B06_backend|B06_wf3_ProfileCross]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L27", + "_origin": "ast", + "id": "index_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross", + "community": 3, + "norm_label": "[[b06_wf3_profilecross/b06_backend|b06_wf3_profilecross]]" + }, + { + "label": "[[B07_wf4_DesignDetail/B07_frontend|B07_wf4_DesignDetail]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L30", + "_origin": "ast", + "id": "index_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail", + "community": 3, + "norm_label": "[[b07_wf4_designdetail/b07_frontend|b07_wf4_designdetail]]" + }, + { + "label": "[[B08_wf5_Quantity/B08_frontend|B08_wf5_Quantity]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L33", + "_origin": "ast", + "id": "index_b08_wf5_quantity_b08_frontend_b08_wf5_quantity", + "community": 3, + "norm_label": "[[b08_wf5_quantity/b08_frontend|b08_wf5_quantity]]" + }, + { + "label": "[[B09_wf6_Estimation/B09_frontend|B09_wf6_Estimation]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L36", + "_origin": "ast", + "id": "index_b09_wf6_estimation_b09_frontend_b09_wf6_estimation", + "community": 3, + "norm_label": "[[b09_wf6_estimation/b09_frontend|b09_wf6_estimation]]" + }, + { + "label": "\ud398\uc774\uc9c0 \u2014 \ub85c\uadf8\uc778 \uc804 (A01~A09)", + "file_type": "document", + "source_file": "index.md", + "source_location": "L39", + "_origin": "ast", + "id": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "community": 3, + "norm_label": "\u1111\u1166\u110b\u1175\u110c\u1175 \u2014 \u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u110c\u1165\u11ab (a01~a09)" + }, + { + "label": "[[A01_Home/A01_frontend|A01_Home]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L41", + "_origin": "ast", + "id": "index_a01_home_a01_frontend_a01_home", + "community": 3, + "norm_label": "[[a01_home/a01_frontend|a01_home]]" + }, + { + "label": "[[A02_ProgDetail/A02_frontend|A02_ProgDetail]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L44", + "_origin": "ast", + "id": "index_a02_progdetail_a02_frontend_a02_progdetail", + "community": 3, + "norm_label": "[[a02_progdetail/a02_frontend|a02_progdetail]]" + }, + { + "label": "[[A03_CompDetail/A03_frontend|A03_CompDetail]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L47", + "_origin": "ast", + "id": "index_a03_compdetail_a03_frontend_a03_compdetail", + "community": 3, + "norm_label": "[[a03_compdetail/a03_frontend|a03_compdetail]]" + }, + { + "label": "[[A04_NewsHistory/A04_frontend|A04_NewsHistory]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L50", + "_origin": "ast", + "id": "index_a04_newshistory_a04_frontend_a04_newshistory", + "community": 3, + "norm_label": "[[a04_newshistory/a04_frontend|a04_newshistory]]" + }, + { + "label": "[[A05_EduDetail/A05_frontend|A05_EduDetail]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L53", + "_origin": "ast", + "id": "index_a05_edudetail_a05_frontend_a05_edudetail", + "community": 3, + "norm_label": "[[a05_edudetail/a05_frontend|a05_edudetail]]" + }, + { + "label": "[[A06_Login/A06_backend|A06_Login]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L56", + "_origin": "ast", + "id": "index_a06_login_a06_backend_a06_login", + "community": 3, + "norm_label": "[[a06_login/a06_backend|a06_login]]" + }, + { + "label": "[[A07_Register/A07_backend|A07_Register]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L59", + "_origin": "ast", + "id": "index_a07_register_a07_backend_a07_register", + "community": 3, + "norm_label": "[[a07_register/a07_backend|a07_register]]" + }, + { + "label": "[[A08_Support/A08_backend|A08_Support]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L62", + "_origin": "ast", + "id": "index_a08_support_a08_backend_a08_support", + "community": 3, + "norm_label": "[[a08_support/a08_backend|a08_support]]" + }, + { + "label": "[[A09_Security/A09_backend|A09_Security]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L65", + "_origin": "ast", + "id": "index_a09_security_a09_backend_a09_security", + "community": 3, + "norm_label": "[[a09_security/a09_backend|a09_security]]" + }, + { + "label": "\uac1c\ub150 (Concepts)", + "file_type": "document", + "source_file": "index.md", + "source_location": "L68", + "_origin": "ast", + "id": "index_\uac1c\ub150_concepts", + "community": 3, + "norm_label": "\u1100\u1162\u1102\u1167\u11b7 (concepts)" + }, + { + "label": "[[a00_app_shell_framework]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L70", + "_origin": "ast", + "id": "index_a00_app_shell_framework", + "community": 3, + "norm_label": "[[a00_app_shell_framework]]" + }, + { + "label": "[[a00_app_shell_framework_scaffold]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L73", + "_origin": "ast", + "id": "index_a00_app_shell_framework_scaffold", + "community": 3, + "norm_label": "[[a00_app_shell_framework_scaffold]]" + }, + { + "label": "[[ui_templates]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L76", + "_origin": "ast", + "id": "index_ui_templates", + "community": 3, + "norm_label": "[[ui_templates]]" + }, + { + "label": "DB \uc2a4\ud0a4\ub9c8", + "file_type": "document", + "source_file": "index.md", + "source_location": "L79", + "_origin": "ast", + "id": "index_db_\uc2a4\ud0a4\ub9c8", + "community": 3, + "norm_label": "db \u1109\u1173\u110f\u1175\u1106\u1161" + }, + { + "label": "[[auth_rbac]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L89", + "_origin": "ast", + "id": "index_auth_rbac", + "community": 3, + "norm_label": "[[auth_rbac]]" + }, + { + "label": "[[storage_paths]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L92", + "_origin": "ast", + "id": "index_storage_paths", + "community": 3, + "norm_label": "[[storage_paths]]" + }, + { + "label": "[[common_util]]", + "file_type": "document", + "source_file": "index.md", + "source_location": "L95", + "_origin": "ast", + "id": "index_common_util", + "community": 3, + "norm_label": "[[common_util]]" + }, + { + "label": "API \uacf5\ud1b5 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc5d4\ub4dc\ud3ec\uc778\ud2b8)", + "file_type": "document", + "source_file": "index.md", + "source_location": "L98", + "_origin": "ast", + "id": "index_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 3, + "norm_label": "api \u1100\u1169\u11bc\u1110\u1169\u11bc (\u110b\u1167\u1105\u1165 \u1111\u1166\u110b\u1175\u110c\u1175\u1100\u1161 \u1100\u1169\u11bc\u110b\u1172\u1112\u1161\u1102\u1173\u11ab \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173)" + }, + { + "label": "\uc758\uc874\uc131 (\uc5ec\ub7ec \ud398\uc774\uc9c0\uac00 \uacf5\uc720\ud558\ub294 \uc678\ubd80 \ub77c\uc774\ube0c\ub7ec\ub9ac)", + "file_type": "document", + "source_file": "index.md", + "source_location": "L101", + "_origin": "ast", + "id": "index_\uc758\uc874\uc131_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac", + "community": 3, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u110b\u1167\u1105\u1165 \u1111\u1166\u110b\u1175\u110c\u1175\u1100\u1161 \u1100\u1169\u11bc\u110b\u1172\u1112\u1161\u1102\u1173\u11ab \u110b\u116c\u1107\u116e \u1105\u1161\u110b\u1175\u1107\u1173\u1105\u1165\u1105\u1175)" + }, + { + "label": "\uacf5\ud1b5 \uc2a4\ud0a4\ub9c8 (Pydantic \uc694\uccad/\uc751\ub2f5 \ubaa8\ub378)", + "file_type": "document", + "source_file": "index.md", + "source_location": "L104", + "_origin": "ast", + "id": "index_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "community": 3, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic \u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1106\u1169\u1103\u1166\u11af)" + }, + { + "label": "Workflow \uc0c1\ud0dc \uad00\ub9ac", + "file_type": "document", + "source_file": "index.md", + "source_location": "L107", + "_origin": "ast", + "id": "index_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "community": 3, + "norm_label": "workflow \u1109\u1161\u11bc\u1110\u1162 \u1100\u116a\u11ab\u1105\u1175" + }, + { + "label": "\u26a0\ufe0f \ubbf8\ud574\uacb0 \ud56d\ubaa9", + "file_type": "document", + "source_file": "index.md", + "source_location": "L110", + "_origin": "ast", + "id": "index_\ubbf8\ud574\uacb0_\ud56d\ubaa9", + "community": 3, + "norm_label": "\u26a0\ufe0f \u1106\u1175\u1112\u1162\u1100\u1167\u11af \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "A\uadf8\ub8f9 \uc778\uc81c\uc2a4\ud2b8 \uc774\uc288", + "file_type": "document", + "source_file": "index.md", + "source_location": "L116", + "_origin": "ast", + "id": "index_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\uc774\uc288", + "community": 3, + "norm_label": "a\u1100\u1173\u1105\u116e\u11b8 \u110b\u1175\u11ab\u110c\u1166\u1109\u1173\u1110\u1173 \u110b\u1175\u1109\u1172" + }, + { + "label": "log.md", + "file_type": "document", + "source_file": "log.md", + "source_location": "L1", + "_origin": "ast", + "id": "log", + "community": 4, + "norm_label": "log.md" + }, + { + "label": "Wiki Log", + "file_type": "document", + "source_file": "log.md", + "source_location": "L1", + "_origin": "ast", + "id": "log_wiki_log", + "community": 4, + "norm_label": "wiki log" + }, + { + "label": "[2026-07-12] lint | \uad6c\ud615 \uc0c1\uc704 \ud3f4\ub354 \ud0c8\ucd9c \ub9c1\ud06c(../../concepts/) \uc804\uc218 \uc815\ubc00 \uad50\uc815", + "file_type": "document", + "source_file": "log.md", + "source_location": "L6", + "_origin": "ast", + "id": "log_2026_07_12_lint_\uad6c\ud615_\uc0c1\uc704_\ud3f4\ub354_\ud0c8\ucd9c_\ub9c1\ud06c_concepts_\uc804\uc218_\uc815\ubc00_\uad50\uc815", + "community": 4, + "norm_label": "[2026-07-12] lint | \u1100\u116e\u1112\u1167\u11bc \u1109\u1161\u11bc\u110b\u1171 \u1111\u1169\u11af\u1103\u1165 \u1110\u1161\u11af\u110e\u116e\u11af \u1105\u1175\u11bc\u110f\u1173(../../concepts/) \u110c\u1165\u11ab\u1109\u116e \u110c\u1165\u11bc\u1106\u1175\u11af \u1100\u116d\u110c\u1165\u11bc" + }, + { + "label": "[2026-07-12] lint | 5\ud68c \ubc18\ubcf5 \ub9b0\ud2b8-\uac1c\uc120 \uc0ac\uc774\ud074 \uc218\ud589 \ubc0f \uc704\ud0a4 \uba54\ud0c0 \uc815\ubcf4 \uc815\ubc00 \ubcf4\uc644", + "file_type": "document", + "source_file": "log.md", + "source_location": "L10", + "_origin": "ast", + "id": "log_2026_07_12_lint_5\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\uba54\ud0c0_\uc815\ubcf4_\uc815\ubc00_\ubcf4\uc644", + "community": 4, + "norm_label": "[2026-07-12] lint | 5\u1112\u116c \u1107\u1161\u11ab\u1107\u1169\u11a8 \u1105\u1175\u11ab\u1110\u1173-\u1100\u1162\u1109\u1165\u11ab \u1109\u1161\u110b\u1175\u110f\u1173\u11af \u1109\u116e\u1112\u1162\u11bc \u1106\u1175\u11be \u110b\u1171\u110f\u1175 \u1106\u1166\u1110\u1161 \u110c\u1165\u11bc\u1107\u1169 \u110c\u1165\u11bc\u1106\u1175\u11af \u1107\u1169\u110b\u116a\u11ab" + }, + { + "label": "[2026-07-12] ingest | DB 34\uac1c \ud14c\uc774\ube14 \uc804\uc218 \uceec\ub7fc \uc2e4\uce21 \ubc0f \uc704\ud0a4 \ucd5c\uc2e0\ud654", + "file_type": "document", + "source_file": "log.md", + "source_location": "L17", + "_origin": "ast", + "id": "log_2026_07_12_ingest_db_34\uac1c_\ud14c\uc774\ube14_\uc804\uc218_\uceec\ub7fc_\uc2e4\uce21_\ubc0f_\uc704\ud0a4_\ucd5c\uc2e0\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | db 34\u1100\u1162 \u1110\u1166\u110b\u1175\u1107\u1173\u11af \u110c\u1165\u11ab\u1109\u116e \u110f\u1165\u11af\u1105\u1165\u11b7 \u1109\u1175\u11af\u110e\u1173\u11a8 \u1106\u1175\u11be \u110b\u1171\u110f\u1175 \u110e\u116c\u1109\u1175\u11ab\u1112\u116a" + }, + { + "label": "[2026-07-12] ingest+lint | 3\ud68c \ubc18\ubcf5 \ub9b0\ud2b8-\uac1c\uc120 \uc0ac\uc774\ud074 \uc218\ud589 \ubc0f \uc704\ud0a4 \ubb34\uacb0\uc131 \ud655\ubcf4", + "file_type": "document", + "source_file": "log.md", + "source_location": "L30", + "_origin": "ast", + "id": "log_2026_07_12_ingest_lint_3\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\ubb34\uacb0\uc131_\ud655\ubcf4", + "community": 4, + "norm_label": "[2026-07-12] ingest+lint | 3\u1112\u116c \u1107\u1161\u11ab\u1107\u1169\u11a8 \u1105\u1175\u11ab\u1110\u1173-\u1100\u1162\u1109\u1165\u11ab \u1109\u1161\u110b\u1175\u110f\u1173\u11af \u1109\u116e\u1112\u1162\u11bc \u1106\u1175\u11be \u110b\u1171\u110f\u1175 \u1106\u116e\u1100\u1167\u11af\u1109\u1165\u11bc \u1112\u116a\u11a8\u1107\u1169" + }, + { + "label": "[2026-07-12] ingest | B09_wf6_Estimation (\uc2e4 \ucf54\ub4dc \ub300\uc870, \ubbf8\ucc29\uc218 \ud655\uc778)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L36", + "_origin": "ast", + "id": "log_2026_07_12_ingest_b09_wf6_estimation_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", + "community": 4, + "norm_label": "[2026-07-12] ingest | b09_wf6_estimation (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1103\u1162\u110c\u1169, \u1106\u1175\u110e\u1161\u11a8\u1109\u116e \u1112\u116a\u11a8\u110b\u1175\u11ab)" + }, + { + "label": "[2026-07-12] ingest | B07_wf4_DesignDetail (\uc2e4 \ucf54\ub4dc \ub300\uc870, \ubbf8\ucc29\uc218 \ud655\uc778)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L47", + "_origin": "ast", + "id": "log_2026_07_12_ingest_b07_wf4_designdetail_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", + "community": 4, + "norm_label": "[2026-07-12] ingest | b07_wf4_designdetail (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1103\u1162\u110c\u1169, \u1106\u1175\u110e\u1161\u11a8\u1109\u116e \u1112\u116a\u11a8\u110b\u1175\u11ab)" + }, + { + "label": "[2026-07-12] ingest | B04_wf1_Surface (\uc2e4 \ucf54\ub4dc \ub300\uc870\u00b75\ubd84\ud560 \uc0c1\uc138\ud654)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L57", + "_origin": "ast", + "id": "log_2026_07_12_ingest_b04_wf1_surface_\uc2e4_\ucf54\ub4dc_\ub300\uc870_5\ubd84\ud560_\uc0c1\uc138\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | b04_wf1_surface (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1103\u1162\u110c\u1169\u00b75\u1107\u116e\u11ab\u1112\u1161\u11af \u1109\u1161\u11bc\u1109\u1166\u1112\u116a)" + }, + { + "label": "[2026-07-12] ingest | B02_ProjRegister (backend + frontend + db \uc0c1\uc138\ud654)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L69", + "_origin": "ast", + "id": "log_2026_07_12_ingest_b02_projregister_backend_frontend_db_\uc0c1\uc138\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | b02_projregister (backend + frontend + db \u1109\u1161\u11bc\u1109\u1166\u1112\u116a)" + }, + { + "label": "[2026-07-12] query | B01_Dashboard \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", + "file_type": "document", + "source_file": "log.md", + "source_location": "L85", + "_origin": "ast", + "id": "log_2026_07_12_query_b01_dashboard_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "community": 4, + "norm_label": "[2026-07-12] query | b01_dashboard \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab \u110e\u116c\u1109\u1175\u11ab\u1112\u116a" + }, + { + "label": "[2026-07-12] query | B03_FileInput \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", + "file_type": "document", + "source_file": "log.md", + "source_location": "L93", + "_origin": "ast", + "id": "log_2026_07_12_query_b03_fileinput_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "community": 4, + "norm_label": "[2026-07-12] query | b03_fileinput \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab \u110e\u116c\u1109\u1175\u11ab\u1112\u116a" + }, + { + "label": "[2026-07-12] query | B05_wf2_Route \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", + "file_type": "document", + "source_file": "log.md", + "source_location": "L102", + "_origin": "ast", + "id": "log_2026_07_12_query_b05_wf2_route_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "community": 4, + "norm_label": "[2026-07-12] query | b05_wf2_route \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab \u110e\u116c\u1109\u1175\u11ab\u1112\u116a" + }, + { + "label": "[2026-07-12] query | B06_wf3_ProfileCross \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", + "file_type": "document", + "source_file": "log.md", + "source_location": "L111", + "_origin": "ast", + "id": "log_2026_07_12_query_b06_wf3_profilecross_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "community": 4, + "norm_label": "[2026-07-12] query | b06_wf3_profilecross \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab \u110e\u116c\u1109\u1175\u11ab\u1112\u116a" + }, + { + "label": "[2026-07-12] query | B08_wf5_Quantity \uc2e4 \ucf54\ub4dc \uae30\uc900 \ucd5c\uc2e0\ud654", + "file_type": "document", + "source_file": "log.md", + "source_location": "L119", + "_origin": "ast", + "id": "log_2026_07_12_query_b08_wf5_quantity_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "community": 4, + "norm_label": "[2026-07-12] query | b08_wf5_quantity \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab \u110e\u116c\u1109\u1175\u11ab\u1112\u116a" + }, + { + "label": "[2026-07-12] lint | \uc804\uccb4 \uc704\ud0a4 \uad6c\uc870\u00b7\uc0c1\ud0dc\u00b7\uacf5\uc720 \uac1c\ub150 \uc815\ub9ac", + "file_type": "document", + "source_file": "log.md", + "source_location": "L126", + "_origin": "ast", + "id": "log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac", + "community": 4, + "norm_label": "[2026-07-12] lint | \u110c\u1165\u11ab\u110e\u1166 \u110b\u1171\u110f\u1175 \u1100\u116e\u110c\u1169\u00b7\u1109\u1161\u11bc\u1110\u1162\u00b7\u1100\u1169\u11bc\u110b\u1172 \u1100\u1162\u1102\u1167\u11b7 \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "[2026-07-12] lint | \uc804\uccb4 \uc704\ud0a4 \uad6c\uc870\u00b7\uc0c1\ud0dc\u00b7\uacf5\uc720 \uac1c\ub150 \uc815\ub9ac", + "file_type": "document", + "source_file": "log.md", + "source_location": "L134", + "_origin": "ast", + "id": "log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac_134", + "community": 4, + "norm_label": "[2026-07-12] lint | \u110c\u1165\u11ab\u110e\u1166 \u110b\u1171\u110f\u1175 \u1100\u116e\u110c\u1169\u00b7\u1109\u1161\u11bc\u1110\u1162\u00b7\u1100\u1169\u11bc\u110b\u1172 \u1100\u1162\u1102\u1167\u11b7 \u110c\u1165\u11bc\u1105\u1175" + }, + { + "label": "[2026-07-12] lint | \uc704\ud0a4 \uc2dc\uc2a4\ud15c \ucd08\uae30 \uc138\ud305", + "file_type": "document", + "source_file": "log.md", + "source_location": "L141", + "_origin": "ast", + "id": "log_2026_07_12_lint_\uc704\ud0a4_\uc2dc\uc2a4\ud15c_\ucd08\uae30_\uc138\ud305", + "community": 4, + "norm_label": "[2026-07-12] lint | \u110b\u1171\u110f\u1175 \u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u110e\u1169\u1100\u1175 \u1109\u1166\u1110\u1175\u11bc" + }, + { + "label": "[2026-07-12] ingest | guidelines/plans 7\uac74 \uc77c\uad04 \ubc18\uc601", + "file_type": "document", + "source_file": "log.md", + "source_location": "L148", + "_origin": "ast", + "id": "log_2026_07_12_ingest_guidelines_plans_7\uac74_\uc77c\uad04_\ubc18\uc601", + "community": 4, + "norm_label": "[2026-07-12] ingest | guidelines/plans 7\u1100\u1165\u11ab \u110b\u1175\u11af\u1100\u116a\u11af \u1107\u1161\u11ab\u110b\u1167\u11bc" + }, + { + "label": "[2026-07-12] query+lint | \uc2e4 DB/\uc2e4 \ucf54\ub4dc \ub300\uc870 \uac80\uc99d (\uc77d\uae30 \uc804\uc6a9)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L157", + "_origin": "ast", + "id": "log_2026_07_12_query_lint_\uc2e4_db_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\uac80\uc99d_\uc77d\uae30_\uc804\uc6a9", + "community": 4, + "norm_label": "[2026-07-12] query+lint | \u1109\u1175\u11af db/\u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1103\u1162\u110c\u1169 \u1100\u1165\u11b7\u110c\u1173\u11bc (\u110b\u1175\u11b0\u1100\u1175 \u110c\u1165\u11ab\u110b\u116d\u11bc)" + }, + { + "label": "[2026-07-12] lint | page_id frontmatter \ud544\ub4dc \ub3c4\uc785", + "file_type": "document", + "source_file": "log.md", + "source_location": "L167", + "_origin": "ast", + "id": "log_2026_07_12_lint_page_id_frontmatter_\ud544\ub4dc_\ub3c4\uc785", + "community": 4, + "norm_label": "[2026-07-12] lint | page_id frontmatter \u1111\u1175\u11af\u1103\u1173 \u1103\u1169\u110b\u1175\u11b8" + }, + { + "label": "[2026-07-12] ingest | A01_Home \uc2e4 \ucf54\ub4dc \ubc18\uc601", + "file_type": "document", + "source_file": "log.md", + "source_location": "L173", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a01_home_\uc2e4_\ucf54\ub4dc_\ubc18\uc601", + "community": 4, + "norm_label": "[2026-07-12] ingest | a01_home \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1107\u1161\u11ab\u110b\u1167\u11bc" + }, + { + "label": "[2026-07-12] refactor | \ud30c\uc77c\uba85 \uaddc\uce59 \ub3c4\uc785 \ubc0f \ub9c1\ud06c \uc218\uc815", + "file_type": "document", + "source_file": "log.md", + "source_location": "L180", + "_origin": "ast", + "id": "log_2026_07_12_refactor_\ud30c\uc77c\uba85_\uaddc\uce59_\ub3c4\uc785_\ubc0f_\ub9c1\ud06c_\uc218\uc815", + "community": 4, + "norm_label": "[2026-07-12] refactor | \u1111\u1161\u110b\u1175\u11af\u1106\u1167\u11bc \u1100\u1172\u110e\u1175\u11a8 \u1103\u1169\u110b\u1175\u11b8 \u1106\u1175\u11be \u1105\u1175\u11bc\u110f\u1173 \u1109\u116e\u110c\u1165\u11bc" + }, + { + "label": "[2026-07-12] lint | A\uadf8\ub8f9(A01~A09) \uc804\uccb4 \uac80\uc99d \ubc0f \uc815\ud569\uc131 \uc810\uac80", + "file_type": "document", + "source_file": "log.md", + "source_location": "L188", + "_origin": "ast", + "id": "log_2026_07_12_lint_a\uadf8\ub8f9_a01_a09_\uc804\uccb4_\uac80\uc99d_\ubc0f_\uc815\ud569\uc131_\uc810\uac80", + "community": 4, + "norm_label": "[2026-07-12] lint | a\u1100\u1173\u1105\u116e\u11b8(a01~a09) \u110c\u1165\u11ab\u110e\u1166 \u1100\u1165\u11b7\u110c\u1173\u11bc \u1106\u1175\u11be \u110c\u1165\u11bc\u1112\u1161\u11b8\u1109\u1165\u11bc \u110c\u1165\u11b7\u1100\u1165\u11b7" + }, + { + "label": "[2026-07-12] ingest | A09_Security (backend + frontend \uc0c1\uc138\ud654)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L204", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a09_security_backend_frontend_\uc0c1\uc138\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | a09_security (backend + frontend \u1109\u1161\u11bc\u1109\u1166\u1112\u116a)" + }, + { + "label": "[2026-07-12] ingest | A08_Support (backend + frontend \uc0c1\uc138\ud654)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L219", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a08_support_backend_frontend_\uc0c1\uc138\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | a08_support (backend + frontend \u1109\u1161\u11bc\u1109\u1166\u1112\u116a)" + }, + { + "label": "[2026-07-12] ingest | A07_Register (backend + frontend \uc0c1\uc138\ud654)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L233", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a07_register_backend_frontend_\uc0c1\uc138\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | a07_register (backend + frontend \u1109\u1161\u11bc\u1109\u1166\u1112\u116a)" + }, + { + "label": "[2026-07-12] ingest | A06_Login (backend + frontend \uc0c1\uc138\ud654)", + "file_type": "document", + "source_file": "log.md", + "source_location": "L248", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a06_login_backend_frontend_\uc0c1\uc138\ud654", + "community": 4, + "norm_label": "[2026-07-12] ingest | a06_login (backend + frontend \u1109\u1161\u11bc\u1109\u1166\u1112\u116a)" + }, + { + "label": "[2026-07-12] lint | A03~A05 \uc778\uc81c\uc2a4\ud2b8 \uc7ac\uc810\uac80", + "file_type": "document", + "source_file": "log.md", + "source_location": "L263", + "_origin": "ast", + "id": "log_2026_07_12_lint_a03_a05_\uc778\uc81c\uc2a4\ud2b8_\uc7ac\uc810\uac80", + "community": 4, + "norm_label": "[2026-07-12] lint | a03~a05 \u110b\u1175\u11ab\u110c\u1166\u1109\u1173\u1110\u1173 \u110c\u1162\u110c\u1165\u11b7\u1100\u1165\u11b7" + }, + { + "label": "[2026-07-12] ingest | A05_EduDetail", + "file_type": "document", + "source_file": "log.md", + "source_location": "L274", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a05_edudetail", + "community": 4, + "norm_label": "[2026-07-12] ingest | a05_edudetail" + }, + { + "label": "[2026-07-12] ingest | A04_NewsHistory", + "file_type": "document", + "source_file": "log.md", + "source_location": "L284", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a04_newshistory", + "community": 4, + "norm_label": "[2026-07-12] ingest | a04_newshistory" + }, + { + "label": "[2026-07-12] ingest | A03_CompDetail", + "file_type": "document", + "source_file": "log.md", + "source_location": "L295", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a03_compdetail", + "community": 4, + "norm_label": "[2026-07-12] ingest | a03_compdetail" + }, + { + "label": "[2026-07-12] lint | A01_Home \ud398\uc774\uc9c0 \uac80\uc0ac \ubc0f \uc218\uc815", + "file_type": "document", + "source_file": "log.md", + "source_location": "L305", + "_origin": "ast", + "id": "log_2026_07_12_lint_a01_home_\ud398\uc774\uc9c0_\uac80\uc0ac_\ubc0f_\uc218\uc815", + "community": 4, + "norm_label": "[2026-07-12] lint | a01_home \u1111\u1166\u110b\u1175\u110c\u1175 \u1100\u1165\u11b7\u1109\u1161 \u1106\u1175\u11be \u1109\u116e\u110c\u1165\u11bc" + }, + { + "label": "[2026-07-12] ingest | A02_ProgDetail + A00_Common Framework", + "file_type": "document", + "source_file": "log.md", + "source_location": "L318", + "_origin": "ast", + "id": "log_2026_07_12_ingest_a02_progdetail_a00_common_framework", + "community": 4, + "norm_label": "[2026-07-12] ingest | a02_progdetail + a00_common framework" + }, + { + "label": "A01_components.md", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a01_home_a01_components", + "community": 30, + "norm_label": "a01_components.md" + }, + { + "label": "A01_Home \u2014 \uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "community": 30, + "norm_label": "a01_home \u2014 \u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\uc2a4\ud0c0\uc77c", + "community": 30, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\uc758\uc874\uc131", + "community": 30, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\ub370\uc774\ud130_\ud750\ub984", + "community": 30, + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ubbf8\ud574\uacb0", + "file_type": "document", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_a01_home_a01_components_\ubbf8\ud574\uacb0", + "community": 30, + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af" + }, + { + "label": "A01_frontend.md", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend", + "community": 15, + "norm_label": "a01_frontend.md" + }, + { + "label": "A01_Home \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_a01_home_frontend", + "community": 15, + "norm_label": "a01_home \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 15, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "community": 15, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173" + }, + { + "label": "Hero \uc139\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_hero_\uc139\uc158", + "community": 15, + "norm_label": "hero \u1109\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\ucd5c\uc2e0 \uc18c\uc2dd \uc139\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ucd5c\uc2e0_\uc18c\uc2dd_\uc139\uc158", + "community": 15, + "norm_label": "\u110e\u116c\u1109\u1175\u11ab \u1109\u1169\u1109\u1175\u11a8 \u1109\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\uc8fc\uc694 \uae30\ub2a5 \uc139\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\uc8fc\uc694_\uae30\ub2a5_\uc139\uc158", + "community": 15, + "norm_label": "\u110c\u116e\u110b\u116d \u1100\u1175\u1102\u1173\u11bc \u1109\u1166\u11a8\u1109\u1167\u11ab" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L36", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 15, + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 15, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L58", + "_origin": "ast", + "id": "pages_a01_home_a01_frontend_\uc138\ubd80_\uad6c\ud604", + "community": 15, + "norm_label": "\u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "A02_components.md", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components", + "community": 31, + "norm_label": "a02_components.md" + }, + { + "label": "A02_ProgDetail \u2014 \uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "community": 31, + "norm_label": "a02_progdetail \u2014 \u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\uc2a4\ud0c0\uc77c_css", + "community": 31, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\uc758\uc874\uc131", + "community": 31, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ub370\uc774\ud130 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\ub370\uc774\ud130_\ud750\ub984", + "community": 31, + "norm_label": "\u1103\u1166\u110b\u1175\u1110\u1165 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ubbf8\ud574\uacb0 / \ud2b9\uc774\uc0ac\ud56d", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_components_\ubbf8\ud574\uacb0_\ud2b9\uc774\uc0ac\ud56d", + "community": 31, + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af / \u1110\u1173\u11a8\u110b\u1175\u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "A02_frontend.md", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend", + "community": 32, + "norm_label": "a02_frontend.md" + }, + { + "label": "A02_ProgDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "community": 32, + "norm_label": "a02_progdetail \u2014 frontend" + }, + { + "label": "\uad6c\uc870", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\uad6c\uc870", + "community": 32, + "norm_label": "\u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 \ubd84\uc11d", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L16", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ubd84\uc11d", + "community": 32, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 \u1107\u116e\u11ab\u1109\u1165\u11a8" + }, + { + "label": "\uc81c\uc57d \uc900\uc218", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\uc81c\uc57d_\uc900\uc218", + "community": 32, + "norm_label": "\u110c\u1166\u110b\u1163\u11a8 \u110c\u116e\u11ab\u1109\u116e" + }, + { + "label": "\uc138\ubd80 \uad6c\ud604", + "file_type": "document", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a02_progdetail_a02_frontend_\uc138\ubd80_\uad6c\ud604", + "community": 32, + "norm_label": "\u1109\u1166\u1107\u116e \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "A03_frontend.md", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend", + "community": 22, + "norm_label": "a03_frontend.md" + }, + { + "label": "A03_CompDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "community": 22, + "norm_label": "a03_compdetail \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 22, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "community": 22, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 (\u1109\u1166\u11a8\u1109\u1167\u11ab \u1107\u1175\u11af\u1103\u1165)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 22, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 22, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L47", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "community": 22, + "norm_label": "css \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ubc18\uc751\ud615", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\ubc18\uc751\ud615", + "community": 22, + "norm_label": "\u1107\u1161\u11ab\u110b\u1173\u11bc\u1112\u1167\u11bc" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L64", + "_origin": "ast", + "id": "pages_a03_compdetail_a03_frontend_\uc758\uc874\uc131", + "community": 22, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A04_frontend.md", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend", + "community": 9, + "norm_label": "a04_frontend.md" + }, + { + "label": "A04_NewsHistory \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "community": 9, + "norm_label": "a04_newshistory \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 9, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "community": 9, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 (\u1109\u1166\u11a8\u1109\u1167\u11ab \u1107\u1175\u11af\u1103\u1165)" + }, + { + "label": "Mock \ub370\uc774\ud130 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_mock_\ub370\uc774\ud130_\uad6c\uc870", + "community": 9, + "norm_label": "mock \u1103\u1166\u110b\u1175\u1110\u1165 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L48", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 9, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L60", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 9, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L62", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "community": 9, + "norm_label": "css \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ubc18\uc751\ud615", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L75", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ubc18\uc751\ud615", + "community": 9, + "norm_label": "\u1107\u1161\u11ab\u110b\u1173\u11bc\u1112\u1167\u11bc" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L78", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\uc758\uc874\uc131", + "community": 9, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubbf8\ud574\uacb0 \uc0ac\ud56d", + "file_type": "document", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L83", + "_origin": "ast", + "id": "pages_a04_newshistory_a04_frontend_\ubbf8\ud574\uacb0_\uc0ac\ud56d", + "community": 9, + "norm_label": "\u1106\u1175\u1112\u1162\u1100\u1167\u11af \u1109\u1161\u1112\u1161\u11bc" + }, + { + "label": "A05_frontend.md", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend", + "community": 16, + "norm_label": "a05_frontend.md" + }, + { + "label": "A05_EduDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "community": 16, + "norm_label": "a05_edudetail \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 16, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 (\uc139\uc158 \ube4c\ub354)", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "community": 16, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 (\u1109\u1166\u11a8\u1109\u1167\u11ab \u1107\u1175\u11af\u1103\u1165)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 16, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L41", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 16, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "CSS \ud074\ub798\uc2a4 \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "community": 16, + "norm_label": "css \u110f\u1173\u11af\u1105\u1162\u1109\u1173 \u1100\u116e\u110c\u1169" + }, + { + "label": "\ubc18\uc751\ud615", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\ubc18\uc751\ud615", + "community": 16, + "norm_label": "\u1107\u1161\u11ab\u110b\u1173\u11bc\u1112\u1167\u11bc" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L59", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 16, + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L65", + "_origin": "ast", + "id": "pages_a05_edudetail_a05_frontend_\uc758\uc874\uc131", + "community": 16, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A06_backend.md", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a06_login_a06_backend", + "community": 17, + "norm_label": "a06_backend.md" + }, + { + "label": "A06_Login \u2014 Backend", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_a06_login_backend", + "community": 17, + "norm_label": "a06_login \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 17, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 17, + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ub0b4\ubd80 \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "community": 17, + "norm_label": "\u1102\u1162\u1107\u116e \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 17, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\ub85c\uadf8\uc778 \ub85c\uc9c1 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ub85c\uadf8\uc778_\ub85c\uc9c1_\ud750\ub984", + "community": 17, + "norm_label": "\u1105\u1169\u1100\u1173\u110b\u1175\u11ab \u1105\u1169\u110c\u1175\u11a8 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\ubcf4\uc548 \uc815\ucc45 (\uc2e4 \ucf54\ub4dc \uae30\uc900)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L54", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\ubcf4\uc548_\uc815\ucc45_\uc2e4_\ucf54\ub4dc_\uae30\uc900", + "community": 17, + "norm_label": "\u1107\u1169\u110b\u1161\u11ab \u110c\u1165\u11bc\u110e\u1162\u11a8 (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1100\u1175\u110c\u116e\u11ab)" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L60", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 17, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58", + "file_type": "document", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_a06_login_a06_backend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", + "community": 17, + "norm_label": "\u26a0\ufe0f \u1100\u1168\u1112\u116c\u11a8\u1109\u1165\u110b\u116a \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175" + }, + { + "label": "A06_frontend.md", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend", + "community": 18, + "norm_label": "a06_frontend.md" + }, + { + "label": "A06_Login \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_a06_login_frontend", + "community": 18, + "norm_label": "a06_login \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 18, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 18, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "community": 18, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1 (2\ub2e8\uacc4 \ud3fc \uc804\ud658)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "community": 18, + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8 (2\u1103\u1161\u11ab\u1100\u1168 \u1111\u1169\u11b7 \u110c\u1165\u11ab\u1112\u116a\u11ab)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 18, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L64", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 18, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L72", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 18, + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L79", + "_origin": "ast", + "id": "pages_a06_login_a06_frontend_\uc758\uc874\uc131", + "community": 18, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A07_backend.md", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a07_register_a07_backend", + "community": 25, + "norm_label": "a07_backend.md" + }, + { + "label": "A07_Register \u2014 Backend", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_a07_register_backend", + "community": 25, + "norm_label": "a07_register \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 25, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 25, + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 25, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\uac00\uc785 \ub85c\uc9c1 \ud750\ub984", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L36", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\uac00\uc785_\ub85c\uc9c1_\ud750\ub984", + "community": 25, + "norm_label": "\u1100\u1161\u110b\u1175\u11b8 \u1105\u1169\u110c\u1175\u11a8 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L48", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 25, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L54", + "_origin": "ast", + "id": "pages_a07_register_a07_backend_\ucc38\uace0", + "community": 25, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "A07_frontend.md", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend", + "community": 10, + "norm_label": "a07_frontend.md" + }, + { + "label": "A07_Register \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_a07_register_frontend", + "community": 10, + "norm_label": "a07_register \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 10, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218 (UI_Auth_Page \u2014 \uc2e4\uc0ac\uc6a9)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218_ui_auth_page_\uc2e4\uc0ac\uc6a9", + "community": 10, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e (ui_auth_page \u2014 \u1109\u1175\u11af\u1109\u1161\u110b\u116d\u11bc)" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L33", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "community": 10, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1 (2\ub2e8\uacc4 \ud3fc \uc804\ud658)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L43", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "community": 10, + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8 (2\u1103\u1161\u11ab\u1100\u1168 \u1111\u1169\u11b7 \u110c\u1165\u11ab\u1112\u116a\u11ab)" + }, + { + "label": "\uc57d\uad00 \ub3d9\uc758 (\uc544\ucf54\ub514\uc5b8)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L50", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc57d\uad00_\ub3d9\uc758_\uc544\ucf54\ub514\uc5b8", + "community": 10, + "norm_label": "\u110b\u1163\u11a8\u1100\u116a\u11ab \u1103\u1169\u11bc\u110b\u1174 (\u110b\u1161\u110f\u1169\u1103\u1175\u110b\u1165\u11ab)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 10, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L70", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 10, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L77", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 10, + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L85", + "_origin": "ast", + "id": "pages_a07_register_a07_frontend_\uc758\uc874\uc131", + "community": 10, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "A08_backend.md", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a08_support_a08_backend", + "community": 11, + "norm_label": "a08_backend.md" + }, + { + "label": "A08_Support \u2014 Backend", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_a08_support_backend", + "community": 11, + "norm_label": "a08_support \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 11, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 11, + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ub0b4\ubd80 \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "community": 11, + "norm_label": "\u1102\u1162\u1107\u116e \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 11, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\uc811\uc218 \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\uc811\uc218_\ub85c\uc9c1", + "community": 11, + "norm_label": "\u110c\u1165\u11b8\u1109\u116e \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "DB \uc800\uc7a5 \uceec\ub7fc (\uc2e4 \ucf54\ub4dc INSERT \uae30\uc900)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_db_\uc800\uc7a5_\uceec\ub7fc_\uc2e4_\ucf54\ub4dc_insert_\uae30\uc900", + "community": 11, + "norm_label": "db \u110c\u1165\u110c\u1161\u11bc \u110f\u1165\u11af\u1105\u1165\u11b7 (\u1109\u1175\u11af \u110f\u1169\u1103\u1173 insert \u1100\u1175\u110c\u116e\u11ab)" + }, + { + "label": "\ud2b9\uc9d5", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\ud2b9\uc9d5", + "community": 11, + "norm_label": "\u1110\u1173\u11a8\u110c\u1175\u11bc" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 11, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\u26a0\ufe0f DB \uc2a4\ud0a4\ub9c8 \ubd88\uc77c\uce58 (\ud655\uc778 \ud544\uc694)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L62", + "_origin": "ast", + "id": "pages_a08_support_a08_backend_db_\uc2a4\ud0a4\ub9c8_\ubd88\uc77c\uce58_\ud655\uc778_\ud544\uc694", + "community": 11, + "norm_label": "\u26a0\ufe0f db \u1109\u1173\u110f\u1175\u1106\u1161 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175 (\u1112\u116a\u11a8\u110b\u1175\u11ab \u1111\u1175\u11af\u110b\u116d)" + }, + { + "label": "A08_frontend.md", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend", + "community": 12, + "norm_label": "a08_frontend.md" + }, + { + "label": "A08_Support \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_a08_support_frontend", + "community": 12, + "norm_label": "a08_support \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 12, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 12, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "community": 12, + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "\uc138\uc158 \uc790\ub3d9 \ucc44\uc6c0", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L34", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc138\uc158_\uc790\ub3d9_\ucc44\uc6c0", + "community": 12, + "norm_label": "\u1109\u1166\u1109\u1167\u11ab \u110c\u1161\u1103\u1169\u11bc \u110e\u1162\u110b\u116e\u11b7" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 12, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L51", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 12, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L59", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 12, + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L65", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\uc758\uc874\uc131", + "community": 12, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L73", + "_origin": "ast", + "id": "pages_a08_support_a08_frontend_\ucc38\uace0", + "community": 12, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "A09_backend.md", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a09_security_a09_backend", + "community": 6, + "norm_label": "a09_backend.md" + }, + { + "label": "A09_Security \u2014 Backend", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_a09_security_backend", + "community": 6, + "norm_label": "a09_security \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 6, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 6, + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ub9c8\uc2a4\ud130(\ud68c\uc0ac \uad00\ub9ac\uc790) \uc804\uc6a9 \u2014 `require_master`", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\ub9c8\uc2a4\ud130_\ud68c\uc0ac_\uad00\ub9ac\uc790_\uc804\uc6a9_require_master", + "community": 6, + "norm_label": "\u1106\u1161\u1109\u1173\u1110\u1165(\u1112\u116c\u1109\u1161 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161) \u110c\u1165\u11ab\u110b\u116d\u11bc \u2014 `require_master`" + }, + { + "label": "\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790 \uc804\uc6a9 \u2014 `require_system_admin`", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\uc804\uc6a9_require_system_admin", + "community": 6, + "norm_label": "\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161 \u110c\u1165\u11ab\u110b\u116d\u11bc \u2014 `require_system_admin`" + }, + { + "label": "\uc778\uc99d \uc0ac\uc6a9\uc790 \uacf5\ud1b5 \u2014 `verify_session`", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc778\uc99d_\uc0ac\uc6a9\uc790_\uacf5\ud1b5_verify_session", + "community": 6, + "norm_label": "\u110b\u1175\u11ab\u110c\u1173\u11bc \u1109\u1161\u110b\u116d\u11bc\u110c\u1161 \u1100\u1169\u11bc\u1110\u1169\u11bc \u2014 `verify_session`" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 6, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "DB \uc800\uc7a5 (activity_logs)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L55", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_db_\uc800\uc7a5_activity_logs", + "community": 6, + "norm_label": "db \u110c\u1165\u110c\u1161\u11bc (activity_logs)" + }, + { + "label": "\uad8c\ud55c \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L60", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uad8c\ud55c_\ud5ec\ud37c", + "community": 6, + "norm_label": "\u1100\u116f\u11ab\u1112\u1161\u11ab \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L67", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 6, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L73", + "_origin": "ast", + "id": "pages_a09_security_a09_backend_\ucc38\uace0", + "community": 6, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "A09_frontend.md", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend", + "community": 19, + "norm_label": "a09_frontend.md" + }, + { + "label": "A09_Security \u2014 Frontend", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_a09_security_frontend", + "community": 19, + "norm_label": "a09_security \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 19, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 19, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc57d\uad00 \ub370\uc774\ud130 (A09_Security_Terms.ts)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc57d\uad00_\ub370\uc774\ud130_a09_security_terms_ts", + "community": 19, + "norm_label": "\u110b\u1163\u11a8\u1100\u116a\u11ab \u1103\u1166\u110b\u1175\u1110\u1165 (a09_security_terms.ts)" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218 (\u26a0\ufe0f \ubbf8\uc0ac\uc6a9, \uc815\uc758\ub9cc)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218_\ubbf8\uc0ac\uc6a9_\uc815\uc758\ub9cc", + "community": 19, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e (\u26a0\ufe0f \u1106\u1175\u1109\u1161\u110b\u116d\u11bc, \u110c\u1165\u11bc\u110b\u1174\u1106\u1161\u11ab)" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L53", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 19, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L64", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 19, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\u26a0\ufe0f \uc57d\uad00 \ud14d\uc2a4\ud2b8\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L69", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc57d\uad00_\ud14d\uc2a4\ud2b8\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", + "community": 19, + "norm_label": "\u26a0\ufe0f \u110b\u1163\u11a8\u1100\u116a\u11ab \u1110\u1166\u11a8\u1109\u1173\u1110\u1173\u110b\u116a \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L75", + "_origin": "ast", + "id": "pages_a09_security_a09_frontend_\uc758\uc874\uc131", + "community": 19, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B01_api.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api", + "community": 1, + "norm_label": "b01_api.md" + }, + { + "label": "B01_Dashboard \u2014 API", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "community": 1, + "norm_label": "b01_dashboard \u2014 api" + }, + { + "label": "\uc0ac\uc6a9\uc790\u00b7\ud68c\uc0ac", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\uc0ac\uc6a9\uc790_\ud68c\uc0ac", + "community": 1, + "norm_label": "\u1109\u1161\u110b\u116d\u11bc\u110c\u1161\u00b7\u1112\u116c\u1109\u1161" + }, + { + "label": "\ud68c\uc0ac \uad00\ub9ac\uc790", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\ud68c\uc0ac_\uad00\ub9ac\uc790", + "community": 1, + "norm_label": "\u1112\u116c\u1109\u1161 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161" + }, + { + "label": "\ud504\ub85c\uc81d\ud2b8\u00b7\uc790\ub3d9\ud654", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654", + "community": 1, + "norm_label": "\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173\u00b7\u110c\u1161\u1103\u1169\u11bc\u1112\u116a" + }, + { + "label": "\uc2dc\uc2a4\ud15c \uad00\ub9ac\uc790", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L46", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_api_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790", + "community": 1, + "norm_label": "\u1109\u1175\u1109\u1173\u1110\u1166\u11b7 \u1100\u116a\u11ab\u1105\u1175\u110c\u1161" + }, + { + "label": "B01_backend.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend", + "community": 1, + "norm_label": "b01_backend.md" + }, + { + "label": "B01_Dashboard \u2014 Backend", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "community": 1, + "norm_label": "b01_dashboard \u2014 backend" + }, + { + "label": "\ub77c\uc6b0\ud130 \uad8c\ud55c \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\ub77c\uc6b0\ud130_\uad8c\ud55c_\ud5ec\ud37c", + "community": 1, + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1165 \u1100\u116f\u11ab\u1112\u1161\u11ab \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\uc800\uc7a5\uc18c \ud568\uc218", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uc800\uc7a5\uc18c_\ud568\uc218", + "community": 1, + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u1109\u1169 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc694\uccad \uc2a4\ud0a4\ub9c8", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8", + "community": 1, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc \u1109\u1173\u110f\u1175\u1106\u1161" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L54", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_backend_\uae30\uc220\ubd80\ucc44", + "community": 1, + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B01_db.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_db", + "community": 43, + "norm_label": "b01_db.md" + }, + { + "label": "B01_Dashboard \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 43, + "norm_label": "b01_dashboard \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "\ud2b8\ub79c\uc7ad\uc158 \uacbd\uacc4", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L25", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_db_\ud2b8\ub79c\uc7ad\uc158_\uacbd\uacc4", + "community": 43, + "norm_label": "\u1110\u1173\u1105\u1162\u11ab\u110c\u1162\u11a8\u1109\u1167\u11ab \u1100\u1167\u11bc\u1100\u1168" + }, + { + "label": "B01_dependencies.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_dependencies", + "community": 5, + "norm_label": "b01_dependencies.md" + }, + { + "label": "B01_Dashboard \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "community": 5, + "norm_label": "b01_dashboard \u2014 dependencies" + }, + { + "label": "\ud504\ub85c\uc81d\ud2b8 \uacf5\ud1b5 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_dependencies_\ud504\ub85c\uc81d\ud2b8_\uacf5\ud1b5_\ubaa8\ub4c8", + "community": 5, + "norm_label": "\u1111\u1173\u1105\u1169\u110c\u1166\u11a8\u1110\u1173 \u1100\u1169\u11bc\u1110\u1169\u11bc \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B01_frontend.md", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend", + "community": 5, + "norm_label": "b01_frontend.md" + }, + { + "label": "B01_Dashboard \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "community": 5, + "norm_label": "b01_dashboard \u2014 frontend" + }, + { + "label": "\ud30c\uc77c\uacfc \uc9c4\uc785\uc810", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\ud30c\uc77c\uacfc_\uc9c4\uc785\uc810", + "community": 5, + "norm_label": "\u1111\u1161\u110b\u1175\u11af\u1100\u116a \u110c\u1175\u11ab\u110b\u1175\u11b8\u110c\u1165\u11b7" + }, + { + "label": "UI \uad8c\ud55c \ud5ec\ud37c", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_ui_\uad8c\ud55c_\ud5ec\ud37c", + "community": 5, + "norm_label": "ui \u1100\u116f\u11ab\u1112\u1161\u11ab \u1112\u1166\u11af\u1111\u1165" + }, + { + "label": "\ubaa8\ub2ec", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\ubaa8\ub2ec", + "community": 5, + "norm_label": "\u1106\u1169\u1103\u1161\u11af" + }, + { + "label": "\uacf5\uc720 \uc790\uc6d0 \uc5f0\uacb0", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\uacf5\uc720_\uc790\uc6d0_\uc5f0\uacb0", + "community": 5, + "norm_label": "\u1100\u1169\u11bc\u110b\u1172 \u110c\u1161\u110b\u116f\u11ab \u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L52", + "_origin": "ast", + "id": "pages_b01_dashboard_b01_frontend_\uae30\uc220\ubd80\ucc44", + "community": 5, + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B02_backend.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend", + "community": 20, + "norm_label": "b02_backend.md" + }, + { + "label": "B02_ProjRegister \u2014 Backend", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "community": 20, + "norm_label": "b02_projregister \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\ud30c\uc77c_\uad6c\uc870", + "community": 20, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "API \uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 20, + "norm_label": "api \u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\ud568\uc218", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L28", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\ud568\uc218", + "community": 20, + "norm_label": "\u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc694\uccad/\uc751\ub2f5 \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L38", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 20, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "\uc0dd\uc131 \ub85c\uc9c1 (create_project \ud2b8\ub79c\uc7ad\uc158)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\uc0dd\uc131_\ub85c\uc9c1_create_project_\ud2b8\ub79c\uc7ad\uc158", + "community": 20, + "norm_label": "\u1109\u1162\u11bc\u1109\u1165\u11bc \u1105\u1169\u110c\u1175\u11a8 (create_project \u1110\u1173\u1105\u1162\u11ab\u110c\u1162\u11a8\u1109\u1167\u11ab)" + }, + { + "label": "DB \uc800\uc7a5 \uceec\ub7fc (projects INSERT)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L56", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_db_\uc800\uc7a5_\uceec\ub7fc_projects_insert", + "community": 20, + "norm_label": "db \u110c\u1165\u110c\u1161\u11bc \u110f\u1165\u11af\u1105\u1165\u11b7 (projects insert)" + }, + { + "label": "\uc758\uc874\uc131 (\uacf5\ud1b5 \uc720\ud2f8)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L61", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "community": 20, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc (\u1100\u1169\u11bc\u1110\u1169\u11bc \u110b\u1172\u1110\u1175\u11af)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L69", + "_origin": "ast", + "id": "pages_b02_projregister_b02_backend_\ucc38\uace0", + "community": 20, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B02_db.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db", + "community": 34, + "norm_label": "b02_db.md" + }, + { + "label": "B02_ProjRegister \u2014 DB", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_b02_projregister_db", + "community": 34, + "norm_label": "b02_projregister \u2014 db" + }, + { + "label": "\uc4f0\ub294 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "community": 34, + "norm_label": "\u110a\u1173\u1102\u1173\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "\uc800\uc7a5\uc18c(\ud30c\uc77c\uc2dc\uc2a4\ud15c)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_\uc800\uc7a5\uc18c_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "community": 34, + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u1109\u1169(\u1111\u1161\u110b\u1175\u11af\u1109\u1175\u1109\u1173\u1110\u1166\u11b7)" + }, + { + "label": "\ucc38\uace0 (\uacc4\ud68d \ub2f9\uc2dc \uc758\ub3c4)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b02_projregister_b02_db_\ucc38\uace0_\uacc4\ud68d_\ub2f9\uc2dc_\uc758\ub3c4", + "community": 34, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169 (\u1100\u1168\u1112\u116c\u11a8 \u1103\u1161\u11bc\u1109\u1175 \u110b\u1174\u1103\u1169)" + }, + { + "label": "B02_frontend.md", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend", + "community": 13, + "norm_label": "b02_frontend.md" + }, + { + "label": "B02_ProjRegister \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "community": 13, + "norm_label": "b02_projregister \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 13, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 13, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc785\ub825 \ud544\ub4dc", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L26", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc785\ub825_\ud544\ub4dc", + "community": 13, + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1111\u1175\u11af\u1103\u1173" + }, + { + "label": "\uc81c\ucd9c \ub85c\uc9c1", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L37", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "community": 13, + "norm_label": "\u110c\u1166\u110e\u116e\u11af \u1105\u1169\u110c\u1175\u11a8" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L45", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 13, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc2a4\ud0c0\uc77c (CSS)", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L57", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc2a4\ud0c0\uc77c_css", + "community": 13, + "norm_label": "\u1109\u1173\u1110\u1161\u110b\u1175\u11af (css)" + }, + { + "label": "\uc774\ubca4\ud2b8 \ud578\ub4e4\ub7ec", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "community": 13, + "norm_label": "\u110b\u1175\u1107\u1166\u11ab\u1110\u1173 \u1112\u1162\u11ab\u1103\u1173\u11af\u1105\u1165" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L72", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\uc758\uc874\uc131", + "community": 13, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L80", + "_origin": "ast", + "id": "pages_b02_projregister_b02_frontend_\ucc38\uace0", + "community": 13, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B03_api.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api", + "community": 1, + "norm_label": "b03_api.md" + }, + { + "label": "B03_FileInput \u2014 API", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "community": 1, + "norm_label": "b03_fileinput \u2014 api" + }, + { + "label": "\uc77c\ubc18 \uc5c5\ub85c\ub4dc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L14", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_\uc77c\ubc18_\uc5c5\ub85c\ub4dc", + "community": 1, + "norm_label": "\u110b\u1175\u11af\u1107\u1161\u11ab \u110b\u1165\u11b8\u1105\u1169\u1103\u1173" + }, + { + "label": "\uccad\ud06c \uc5c5\ub85c\ub4dc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_\uccad\ud06c_\uc5c5\ub85c\ub4dc", + "community": 1, + "norm_label": "\u110e\u1165\u11bc\u110f\u1173 \u110b\u1165\u11b8\u1105\u1169\u1103\u1173" + }, + { + "label": "workflow \uc870\ud68c", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L27", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_api_workflow_\uc870\ud68c", + "community": 1, + "norm_label": "workflow \u110c\u1169\u1112\u116c" + }, + { + "label": "B03_backend.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend", + "community": 2, + "norm_label": "b03_backend.md" + }, + { + "label": "B03_FileInput \u2014 Backend", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "community": 2, + "norm_label": "b03_fileinput \u2014 backend" + }, + { + "label": "\uc785\ub825 \uac80\uc99d\u00b7\ud30c\uc77c \ucc98\ub9ac", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uc785\ub825_\uac80\uc99d_\ud30c\uc77c_\ucc98\ub9ac", + "community": 2, + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1100\u1165\u11b7\u110c\u1173\u11bc\u00b7\u1111\u1161\u110b\u1175\u11af \u110e\u1165\u1105\u1175" + }, + { + "label": "\uba54\ud0c0\ub370\uc774\ud130 \ubd84\uc11d", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uba54\ud0c0\ub370\uc774\ud130_\ubd84\uc11d", + "community": 2, + "norm_label": "\u1106\u1166\u1110\u1161\u1103\u1166\u110b\u1175\u1110\u1165 \u1107\u116e\u11ab\u1109\u1165\u11a8" + }, + { + "label": "\uc800\uc7a5\uc18c", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_\uc800\uc7a5\uc18c", + "community": 2, + "norm_label": "\u110c\u1165\u110c\u1161\u11bc\u1109\u1169" + }, + { + "label": "workflow\u00b7\uc54c\ub9bc", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_backend_workflow_\uc54c\ub9bc", + "community": 2, + "norm_label": "workflow\u00b7\u110b\u1161\u11af\u1105\u1175\u11b7" + }, + { + "label": "B03_db.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_db", + "community": 44, + "norm_label": "b03_db.md" + }, + { + "label": "B03_FileInput \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 44, + "norm_label": "b03_fileinput \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "\ud30c\uc77c \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_db_\ud30c\uc77c_\uacbd\ub85c", + "community": 44, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "B03_dependencies.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_dependencies", + "community": 2, + "norm_label": "b03_dependencies.md" + }, + { + "label": "B03_FileInput \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "community": 2, + "norm_label": "b03_fileinput \u2014 dependencies" + }, + { + "label": "\uacf5\ud1b5 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "community": 2, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B03_frontend.md", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend", + "community": 5, + "norm_label": "b03_frontend.md" + }, + { + "label": "B03_FileInput \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "community": 5, + "norm_label": "b03_fileinput \u2014 frontend" + }, + { + "label": "\ud398\uc774\uc9c0\u00b7\uc5c5\ub85c\ub4dc \ud750\ub984", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_\ud398\uc774\uc9c0_\uc5c5\ub85c\ub4dc_\ud750\ub984", + "community": 5, + "norm_label": "\u1111\u1166\u110b\u1175\u110c\u1175\u00b7\u110b\u1165\u11b8\u1105\u1169\u1103\u1173 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "community": 5, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173" + }, + { + "label": "\ube0c\ub77c\uc6b0\uc800 \uc0c1\ud0dc\u00b7\uc624\ud504\ub77c\uc778 \ubcf4\uc870", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_\ube0c\ub77c\uc6b0\uc800_\uc0c1\ud0dc_\uc624\ud504\ub77c\uc778_\ubcf4\uc870", + "community": 5, + "norm_label": "\u1107\u1173\u1105\u1161\u110b\u116e\u110c\u1165 \u1109\u1161\u11bc\u1110\u1162\u00b7\u110b\u1169\u1111\u1173\u1105\u1161\u110b\u1175\u11ab \u1107\u1169\u110c\u1169" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b03_fileinput_b03_frontend_\uae30\uc220\ubd80\ucc44", + "community": 5, + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B04_api.md", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_api", + "community": 40, + "norm_label": "b04_api.md" + }, + { + "label": "B04_wf1_Surface \u2014 API", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", + "community": 40, + "norm_label": "b04_wf1_surface \u2014 api" + }, + { + "label": "\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L15", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "community": 40, + "norm_label": "\u110b\u1166\u11ab\u1103\u1173\u1111\u1169\u110b\u1175\u11ab\u1110\u1173" + }, + { + "label": "\uc694\uccad/\uc751\ub2f5 \uc2a4\ud0a4\ub9c8 (Pydantic)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_api_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "community": 40, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc/\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1109\u1173\u110f\u1175\u1106\u1161 (pydantic)" + }, + { + "label": "B04_backend.md", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend", + "community": 23, + "norm_label": "b04_backend.md" + }, + { + "label": "B04_wf1_Surface \u2014 Backend", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "community": 23, + "norm_label": "b04_wf1_surface \u2014 backend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc131 (\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130/\uc800\uc7a5\uc18c/\ub77c\uc6b0\ud130)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\ud30c\uc77c_\uad6c\uc131_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130_\uc800\uc7a5\uc18c_\ub77c\uc6b0\ud130", + "community": 23, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u1109\u1165\u11bc (\u110b\u1169\u110f\u1166\u1109\u1173\u1110\u1173\u1105\u1166\u110b\u1175\u1110\u1165/\u110c\u1165\u110c\u1161\u11bc\u1109\u1169/\u1105\u1161\u110b\u116e\u1110\u1165)" + }, + { + "label": "\uc5d4\uc9c4 \uc11c\ube0c\ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\uc5d4\uc9c4_\uc11c\ube0c\ubaa8\ub4c8", + "community": 23, + "norm_label": "\u110b\u1166\u11ab\u110c\u1175\u11ab \u1109\u1165\u1107\u1173\u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "\uc8fc\uc694 \ud568\uc218 (Router)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\uc8fc\uc694_\ud568\uc218_router", + "community": 23, + "norm_label": "\u110c\u116e\u110b\u116d \u1112\u1161\u11b7\u1109\u116e (router)" + }, + { + "label": "\uc6cc\ud06c\ud50c\ub85c\uc6b0 \uc0c1\ud0dc \uc804\uc774", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L44", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc804\uc774", + "community": 23, + "norm_label": "\u110b\u116f\u110f\u1173\u1111\u1173\u11af\u1105\u1169\u110b\u116e \u1109\u1161\u11bc\u1110\u1162 \u110c\u1165\u11ab\u110b\u1175" + }, + { + "label": "\u26a0\ufe0f \ub808\uac70\uc2dc \ud3f4\ubc31 (416,420\uc904)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L53", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\ub808\uac70\uc2dc_\ud3f4\ubc31_416_420\uc904", + "community": 23, + "norm_label": "\u26a0\ufe0f \u1105\u1166\u1100\u1165\u1109\u1175 \u1111\u1169\u11af\u1107\u1162\u11a8 (416,420\u110c\u116e\u11af)" + }, + { + "label": "\ucc45\uc784", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L62", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\ucc45\uc784", + "community": 23, + "norm_label": "\u110e\u1162\u11a8\u110b\u1175\u11b7" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L66", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_backend_\uc758\uc874\uc131", + "community": 23, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B04_db.md", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_db", + "community": 35, + "norm_label": "b04_db.md" + }, + { + "label": "B04_wf1_Surface \u2014 DB", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", + "community": 35, + "norm_label": "b04_wf1_surface \u2014 db" + }, + { + "label": "\uc4f0\ub294 \ud14c\uc774\ube14", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "community": 35, + "norm_label": "\u110a\u1173\u1102\u1173\u11ab \u1110\u1166\u110b\u1175\u1107\u1173\u11af" + }, + { + "label": "Repository \ud568\uc218", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_db_repository_\ud568\uc218", + "community": 35, + "norm_label": "repository \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_db_\ucc38\uace0", + "community": 35, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B04_dependencies.md", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_dependencies", + "community": 36, + "norm_label": "b04_dependencies.md" + }, + { + "label": "B04_wf1_Surface \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", + "community": 36, + "norm_label": "b04_wf1_surface \u2014 dependencies" + }, + { + "label": "\ubc31\uc5d4\ub4dc (Python)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_dependencies_\ubc31\uc5d4\ub4dc_python", + "community": 36, + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173 (python)" + }, + { + "label": "\ud504\ub860\ud2b8\uc5d4\ub4dc (TypeScript)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript", + "community": 36, + "norm_label": "\u1111\u1173\u1105\u1169\u11ab\u1110\u1173\u110b\u1166\u11ab\u1103\u1173 (typescript)" + }, + { + "label": "\u26a0\ufe0f dependencies concept \uc815\uc815 \ud544\uc694", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_dependencies_dependencies_concept_\uc815\uc815_\ud544\uc694", + "community": 36, + "norm_label": "\u26a0\ufe0f dependencies concept \u110c\u1165\u11bc\u110c\u1165\u11bc \u1111\u1175\u11af\u110b\u116d" + }, + { + "label": "B04_frontend.md", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend", + "community": 26, + "norm_label": "b04_frontend.md" + }, + { + "label": "B04_wf1_Surface \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "community": 26, + "norm_label": "b04_wf1_surface \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 26, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\u26a0\ufe0f \uacc4\ud68d\uc11c\uc640 \uc2e4 \ucf54\ub4dc \ubd88\uc77c\uce58 (3D \ubdf0\uc5b4)", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58_3d_\ubdf0\uc5b4", + "community": 26, + "norm_label": "\u26a0\ufe0f \u1100\u1168\u1112\u116c\u11a8\u1109\u1165\u110b\u116a \u1109\u1175\u11af \u110f\u1169\u1103\u1173 \u1107\u116e\u11af\u110b\u1175\u11af\u110e\u1175 (3d \u1107\u1172\u110b\u1165)" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L32", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 26, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8 \ud568\uc218", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "community": 26, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173 \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ucc98\ub9ac \ud750\ub984", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L53", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_\ucc98\ub9ac_\ud750\ub984", + "community": 26, + "norm_label": "\u110e\u1165\u1105\u1175 \u1112\u1173\u1105\u1173\u11b7" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L60", + "_origin": "ast", + "id": "pages_b04_wf1_surface_b04_frontend_\uc758\uc874\uc131", + "community": 26, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "B05_api.md", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_api", + "community": 1, + "norm_label": "b05_api.md" + }, + { + "label": "B05_wf2_Route \u2014 API", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_api_b05_wf2_route_api", + "community": 1, + "norm_label": "b05_wf2_route \u2014 api" + }, + { + "label": "solve \ucc98\ub9ac \uacb0\uacfc", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_api_solve_\ucc98\ub9ac_\uacb0\uacfc", + "community": 1, + "norm_label": "solve \u110e\u1165\u1105\u1175 \u1100\u1167\u11af\u1100\u116a" + }, + { + "label": "B05_backend.md", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend", + "community": 29, + "norm_label": "b05_backend.md" + }, + { + "label": "B05_wf2_Route \u2014 Backend", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "community": 29, + "norm_label": "b05_wf2_route \u2014 backend" + }, + { + "label": "\uc694\uccad\u00b7\uc751\ub2f5 \ubaa8\ub378", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "community": 29, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc\u00b7\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1106\u1169\u1103\u1166\u11af" + }, + { + "label": "\uacbd\ub85c \uacc4\uc0b0 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend_\uacbd\ub85c_\uacc4\uc0b0_\uc5d4\uc9c4", + "community": 29, + "norm_label": "\u1100\u1167\u11bc\u1105\u1169 \u1100\u1168\u1109\u1161\u11ab \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "\uae30\ud558\u00b7\uacb0\uacfc \ubcc0\ud658", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend_\uae30\ud558_\uacb0\uacfc_\ubcc0\ud658", + "community": 29, + "norm_label": "\u1100\u1175\u1112\u1161\u00b7\u1100\u1167\u11af\u1100\u116a \u1107\u1167\u11ab\u1112\u116a\u11ab" + }, + { + "label": "\ub77c\uc6b0\ud130\u00b7workflow", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend_\ub77c\uc6b0\ud130_workflow", + "community": 29, + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1165\u00b7workflow" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L46", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_backend_\uae30\uc220\ubd80\ucc44", + "community": 29, + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B05_db.md", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_db", + "community": 41, + "norm_label": "b05_db.md" + }, + { + "label": "B05_wf2_Route \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 41, + "norm_label": "b05_wf2_route \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "Repository \ud568\uc218", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_db_repository_\ud568\uc218", + "community": 41, + "norm_label": "repository \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\uc800\uc7a5 \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_db_\uc800\uc7a5_\uacbd\ub85c", + "community": 41, + "norm_label": "\u110c\u1165\u110c\u1161\u11bc \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "B05_dependencies.md", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_dependencies", + "community": 2, + "norm_label": "b05_dependencies.md" + }, + { + "label": "B05_wf2_Route \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_dependencies_b05_wf2_route_dependencies", + "community": 2, + "norm_label": "b05_wf2_route \u2014 dependencies" + }, + { + "label": "\ud398\uc774\uc9c0 \ud30c\uc77c\ubcc4 \uc5f0\uacb0", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_dependencies.md", + "source_location": "L23", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_dependencies_\ud398\uc774\uc9c0_\ud30c\uc77c\ubcc4_\uc5f0\uacb0", + "community": 2, + "norm_label": "\u1111\u1166\u110b\u1175\u110c\u1175 \u1111\u1161\u110b\u1175\u11af\u1107\u1167\u11af \u110b\u1167\u11ab\u1100\u1167\u11af" + }, + { + "label": "B05_frontend.md", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_frontend", + "community": 33, + "norm_label": "b05_frontend.md" + }, + { + "label": "B05_wf2_Route \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", + "community": 33, + "norm_label": "b05_wf2_route \u2014 frontend" + }, + { + "label": "\ud654\uba74\uacfc \uc0c1\ud638\uc791\uc6a9", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_frontend_\ud654\uba74\uacfc_\uc0c1\ud638\uc791\uc6a9", + "community": 33, + "norm_label": "\u1112\u116a\u1106\u1167\u11ab\u1100\u116a \u1109\u1161\u11bc\u1112\u1169\u110c\u1161\u11a8\u110b\u116d\u11bc" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "community": 33, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173" + }, + { + "label": "\uc785\ub825 \uadf8\ub8f9", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_frontend_\uc785\ub825_\uadf8\ub8f9", + "community": 33, + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u1100\u1173\u1105\u116e\u11b8" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L40", + "_origin": "ast", + "id": "pages_b05_wf2_route_b05_frontend_\uae30\uc220\ubd80\ucc44", + "community": 33, + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B06_api.md", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_api", + "community": 1, + "norm_label": "b06_api.md" + }, + { + "label": "B06_wf3_ProfileCross \u2014 API", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_api_b06_wf3_profilecross_api", + "community": 1, + "norm_label": "b06_wf3_profilecross \u2014 api" + }, + { + "label": "\uc0dd\uc131 \uc751\ub2f5", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_api_\uc0dd\uc131_\uc751\ub2f5", + "community": 1, + "norm_label": "\u1109\u1162\u11bc\u1109\u1165\u11bc \u110b\u1173\u11bc\u1103\u1161\u11b8" + }, + { + "label": "B06_backend.md", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_backend", + "community": 2, + "norm_label": "b06_backend.md" + }, + { + "label": "B06_wf3_ProfileCross \u2014 Backend", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", + "community": 2, + "norm_label": "b06_wf3_profilecross \u2014 backend" + }, + { + "label": "\uc694\uccad\u00b7\uc751\ub2f5 \ubaa8\ub378", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "community": 2, + "norm_label": "\u110b\u116d\u110e\u1165\u11bc\u00b7\u110b\u1173\u11bc\u1103\u1161\u11b8 \u1106\u1169\u1103\u1166\u11af" + }, + { + "label": "\uc0dd\uc131 \uc5d4\uc9c4", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_backend_\uc0dd\uc131_\uc5d4\uc9c4", + "community": 2, + "norm_label": "\u1109\u1162\u11bc\u1109\u1165\u11bc \u110b\u1166\u11ab\u110c\u1175\u11ab" + }, + { + "label": "\ub77c\uc6b0\ud130\u00b7workflow", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L31", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_backend_\ub77c\uc6b0\ud130_workflow", + "community": 2, + "norm_label": "\u1105\u1161\u110b\u116e\u1110\u1165\u00b7workflow" + }, + { + "label": "\uc7ac\uc2e4\ud589", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_backend_\uc7ac\uc2e4\ud589", + "community": 2, + "norm_label": "\u110c\u1162\u1109\u1175\u11af\u1112\u1162\u11bc" + }, + { + "label": "B06_db.md", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_db", + "community": 42, + "norm_label": "b06_db.md" + }, + { + "label": "B06_wf3_ProfileCross \u2014 DB \uc0ac\uc6a9 \uad00\uacc4", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", + "community": 42, + "norm_label": "b06_wf3_profilecross \u2014 db \u1109\u1161\u110b\u116d\u11bc \u1100\u116a\u11ab\u1100\u1168" + }, + { + "label": "Repository \ud568\uc218", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_db_repository_\ud568\uc218", + "community": 42, + "norm_label": "repository \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ud30c\uc77c \uacbd\ub85c", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L29", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_db_\ud30c\uc77c_\uacbd\ub85c", + "community": 42, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u1167\u11bc\u1105\u1169" + }, + { + "label": "B06_dependencies.md", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_dependencies", + "community": 2, + "norm_label": "b06_dependencies.md" + }, + { + "label": "B06_wf3_ProfileCross \u2014 Dependencies", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_dependencies_b06_wf3_profilecross_dependencies", + "community": 2, + "norm_label": "b06_wf3_profilecross \u2014 dependencies" + }, + { + "label": "\uacf5\ud1b5 \ubaa8\ub4c8", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L22", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "community": 2, + "norm_label": "\u1100\u1169\u11bc\u1110\u1169\u11bc \u1106\u1169\u1103\u1172\u11af" + }, + { + "label": "B06_frontend.md", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_frontend", + "community": 37, + "norm_label": "b06_frontend.md" + }, + { + "label": "B06_wf3_ProfileCross \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", + "community": 37, + "norm_label": "b06_wf3_profilecross \u2014 frontend" + }, + { + "label": "\ud654\uba74\u00b7workflow", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_frontend_\ud654\uba74_workflow", + "community": 37, + "norm_label": "\u1112\u116a\u1106\u1167\u11ab\u00b7workflow" + }, + { + "label": "API \ud074\ub77c\uc774\uc5b8\ud2b8", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L21", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "community": 37, + "norm_label": "api \u110f\u1173\u11af\u1105\u1161\u110b\u1175\u110b\u1165\u11ab\u1110\u1173" + }, + { + "label": "\uc785\ub825 \uc635\uc158", + "file_type": "document", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b06_wf3_profilecross_b06_frontend_\uc785\ub825_\uc635\uc158", + "community": 37, + "norm_label": "\u110b\u1175\u11b8\u1105\u1167\u11a8 \u110b\u1169\u11b8\u1109\u1167\u11ab" + }, + { + "label": "B07_frontend.md", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend", + "community": 27, + "norm_label": "b07_frontend.md" + }, + { + "label": "B07_wf4_DesignDetail \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "community": 27, + "norm_label": "b07_wf4_designdetail \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 27, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L18", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 27, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 27, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_\uc758\uc874\uc131", + "community": 27, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubc31\uc5d4\ub4dc/DB \u2014 \ubbf8\ucc29\uc218 (\uacc4\ud68d\uc801 \ubc94\uc704 \uc81c\uc678)", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218_\uacc4\ud68d\uc801_\ubc94\uc704_\uc81c\uc678", + "community": 27, + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173/db \u2014 \u1106\u1175\u110e\u1161\u11a8\u1109\u116e (\u1100\u1168\u1112\u116c\u11a8\u110c\u1165\u11a8 \u1107\u1165\u11b7\u110b\u1171 \u110c\u1166\u110b\u116c)" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b07_wf4_designdetail_b07_frontend_\ucc38\uace0", + "community": 27, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + }, + { + "label": "B08_db.md", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_db.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_db", + "community": 45, + "norm_label": "b08_db.md" + }, + { + "label": "B08_wf5_Quantity \u2014 DB", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_db.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_db_b08_wf5_quantity_db", + "community": 45, + "norm_label": "b08_wf5_quantity \u2014 db" + }, + { + "label": "\uad6c\ud604 \ub300\uae30 \ud56d\ubaa9", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_db.md", + "source_location": "L19", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_db_\uad6c\ud604_\ub300\uae30_\ud56d\ubaa9", + "community": 45, + "norm_label": "\u1100\u116e\u1112\u1167\u11ab \u1103\u1162\u1100\u1175 \u1112\u1161\u11bc\u1106\u1169\u11a8" + }, + { + "label": "B08_frontend.md", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_frontend", + "community": 5, + "norm_label": "b08_frontend.md" + }, + { + "label": "B08_wf5_Quantity \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L10", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", + "community": 5, + "norm_label": "b08_wf5_quantity \u2014 frontend" + }, + { + "label": "\ud604\uc7ac \uad6c\ud604", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_frontend_\ud604\uc7ac_\uad6c\ud604", + "community": 5, + "norm_label": "\u1112\u1167\u11ab\u110c\u1162 \u1100\u116e\u1112\u1167\u11ab" + }, + { + "label": "\ud654\uba74 \uc0c1\ud0dc", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L20", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_frontend_\ud654\uba74_\uc0c1\ud0dc", + "community": 5, + "norm_label": "\u1112\u116a\u1106\u1167\u11ab \u1109\u1161\u11bc\u1110\u1162" + }, + { + "label": "\uacc4\ud68d \ucc45\uc784", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_frontend_\uacc4\ud68d_\ucc45\uc784", + "community": 5, + "norm_label": "\u1100\u1168\u1112\u116c\u11a8 \u110e\u1162\u11a8\u110b\u1175\u11b7" + }, + { + "label": "\uae30\uc220\ubd80\ucc44", + "file_type": "document", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L39", + "_origin": "ast", + "id": "pages_b08_wf5_quantity_b08_frontend_\uae30\uc220\ubd80\ucc44", + "community": 5, + "norm_label": "\u1100\u1175\u1109\u116e\u11af\u1107\u116e\u110e\u1162" + }, + { + "label": "B09_frontend.md", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L1", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend", + "community": 28, + "norm_label": "b09_frontend.md" + }, + { + "label": "B09_wf6_Estimation \u2014 Frontend", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L8", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "community": 28, + "norm_label": "b09_wf6_estimation \u2014 frontend" + }, + { + "label": "\ud30c\uc77c \uad6c\uc870", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L12", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_\ud30c\uc77c_\uad6c\uc870", + "community": 28, + "norm_label": "\u1111\u1161\u110b\u1175\u11af \u1100\u116e\u110c\u1169" + }, + { + "label": "\ucef4\ud3ec\ub10c\ud2b8 / \ud568\uc218", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L18", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "community": 28, + "norm_label": "\u110f\u1165\u11b7\u1111\u1169\u1102\u1165\u11ab\u1110\u1173 / \u1112\u1161\u11b7\u1109\u116e" + }, + { + "label": "\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L24", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "community": 28, + "norm_label": "\u1105\u1169\u110f\u1165\u11af\u1105\u1161\u110b\u1175\u110c\u1166\u110b\u1175\u1109\u1167\u11ab" + }, + { + "label": "\uc758\uc874\uc131", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L30", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_\uc758\uc874\uc131", + "community": 28, + "norm_label": "\u110b\u1174\u110c\u1169\u11ab\u1109\u1165\u11bc" + }, + { + "label": "\ubc31\uc5d4\ub4dc/DB \u2014 \ubbf8\ucc29\uc218", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L35", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218", + "community": 28, + "norm_label": "\u1107\u1162\u11a8\u110b\u1166\u11ab\u1103\u1173/db \u2014 \u1106\u1175\u110e\u1161\u11a8\u1109\u116e" + }, + { + "label": "\ucc38\uace0", + "file_type": "document", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L42", + "_origin": "ast", + "id": "pages_b09_wf6_estimation_b09_frontend_\ucc38\uace0", + "community": 28, + "norm_label": "\u110e\u1161\u11b7\u1100\u1169" + } + ], + "links": [ + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L1", + "weight": 1.0, + "source": "agents", + "target": "agents_wiki_\ud3f4\ub354_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L5", + "weight": 1.0, + "source": "agents_wiki_\ud3f4\ub354_\uaddc\uce59", + "target": "agents_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "AGENTS.md", + "source_location": "L11", + "weight": 1.0, + "source": "agents_wiki_\ud3f4\ub354_\uaddc\uce59", + "target": "agents_\uc791\uc131_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "CLAUDE.md", + "source_location": "L1", + "weight": 1.0, + "source": "claude", + "target": "claude_wiki_\ud3f4\ub354_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "CLAUDE.md", + "source_location": "L5", + "weight": 1.0, + "source": "claude_wiki_\ud3f4\ub354_\uaddc\uce59", + "target": "claude_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "CLAUDE.md", + "source_location": "L11", + "weight": 1.0, + "source": "claude_wiki_\ud3f4\ub354_\uaddc\uce59", + "target": "claude_\uc791\uc131_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L8", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework", + "target": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L86", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework", + "target": "concepts_a00_app_shell_framework_scaffold", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_ui_templates", + "target": "concepts_a00_app_shell_framework", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L37", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend", + "target": "concepts_a00_app_shell_framework", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L20", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L52", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_router_\ub77c\uc6b0\ud305_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L84", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_\uc138\ubd80_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L77", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_\uc778\uc99d_\uac00\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L12", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_a00_common_app_shell_framework", + "target": "concepts_a00_app_shell_framework_\ud30c\uc77c_\uad6c\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L44", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\ub85c\uadf8\uc544\uc6c3_onapp_logout_click", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L40", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\uc778\uc99d_\ubc84\ud2bc_\ube44\ub3d9\uae30_fillauthactions", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L22", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\ud14c\ub9c8_\uc5b8\uc5b4_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L48", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\ud478\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_app_shell_\uad6c\uc131\uc694\uc18c", + "target": "concepts_a00_app_shell_framework_\ud5e4\ub354_\uad6c\uc131_64px_\ub192\uc774_sticky", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_scaffold", + "target": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_b_page_scaffold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L18", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_css_\uc778\uc81d\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L33", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_\uc0ac\uc6a9\ucc98", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/a00_app_shell_framework_scaffold.md", + "source_location": "L25", + "weight": 1.0, + "source": "concepts_a00_app_shell_framework_scaffold_a00_common_\uc2a4\uce90\ud3f4\ub4dc_css_\uc885\uc18d\uc131", + "target": "concepts_a00_app_shell_framework_scaffold_\uc885\uc18d\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_api_common", + "target": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L15", + "weight": 1.0, + "source": "concepts_api_common", + "target": "concepts_schema_common", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L23", + "weight": 1.0, + "source": "concepts_api_common", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api", + "target": "concepts_api_common", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api", + "target": "concepts_api_common", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_api", + "target": "concepts_api_common", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_api", + "target": "concepts_api_common", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "concepts_api_common_\uacf5\ud1b5_\uc624\ub958_\uc751\ub2f5_\ud3ec\ub9f7_\uc804_\ub77c\uc6b0\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L17", + "weight": 1.0, + "source": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "concepts_api_common_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc870\ud68c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/api_common.md", + "source_location": "L25", + "weight": 1.0, + "source": "concepts_api_common_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "concepts_api_common_\ud3f4\ub9c1_\ud328\ud134_legacy_workflow_json_\uc124\uacc4_\ud604\uc7ac_\uad6c\ud604\uc740_workflow_state_api_\uc0ac\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_auth_rbac", + "target": "concepts_auth_rbac_\uc778\uc99d_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_auth_rbac", + "target": "concepts_db_schema_users_auth", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L16", + "weight": 1.0, + "source": "concepts_common_util", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L22", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_backend", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L26", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_dependencies", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_api", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_api", + "target": "concepts_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L18", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_otp_\ube44\ubc00\ubc88\ud638", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L65", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uacc4\ud68d\uc11c_\uc2e4\ucf54\ub4dc_\ubd88\uc77c\uce58_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\ubc1c\uacac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L42", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uad8c\ud55c_\uac80\uc99d_\ud5ec\ud37c_b01_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L56", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\ub77c\uc6b0\ud305_\uac00\ub4dc_frontend_md_5_2", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L23", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc0ac\uc6a9\uc790_\uc0c1\ud0dc_\uc0dd\uba85\uc8fc\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L59", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc138\uc158_\uc778\uc99d_backend_md_6_3", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L33", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc5ed\ud560_users_role", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/auth_rbac.md", + "source_location": "L53", + "weight": 1.0, + "source": "concepts_auth_rbac_\uc778\uc99d_rbac", + "target": "concepts_auth_rbac_\uc778\uc99d_\uac31\uc2e0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_common_util", + "target": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L21", + "weight": 1.0, + "source": "concepts_common_util", + "target": "concepts_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L23", + "weight": 1.0, + "source": "concepts_common_util", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L31", + "weight": 1.0, + "source": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "target": "concepts_common_util_\ub9ac\uc18c\uc2a4_\ubaa8\ub2c8\ud130\ub9c1_common_util_resource_monitor_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/common_util.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_common_util_\uacf5\ud1b5_\uc720\ud2f8_common_util", + "target": "concepts_common_util_\uc774\uba54\uc77c_\ubc1c\uc1a1_common_util_email_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_files_surface", + "target": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_db_schema_files_surface", + "target": "concepts_db_schema_overview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L89", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_input_files_status_\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L35", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_input_files_\uc785\ub825_\uc6d0\ubcf8_\ud30c\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L48", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_processed_point_cloud_\ud544\ud130_\ubcc0\ud658_\ud3ec\uc778\ud2b8\ud074\ub77c\uc6b0\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L92", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_surface_models_status_processed_point_cloud_status_\uac12", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L64", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_surface_models_\uc9c0\ud45c\uba74_\ubaa8\ub378_\ubc0f_\ub4f1\uace0\uc120", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L77", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_terrain_layers_\uc9c0\ud615_\ub808\uc774\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L24", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_upload_chunks_\uc5c5\ub85c\ub4dc_\uccad\ud06c_\ub370\uc774\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/files_surface.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_db_schema_files_surface_db_\ud30c\uc77c_\uc9c0\ud45c\uba74\ubd84\uc11d_\ud14c\uc774\ube14", + "target": "concepts_db_schema_files_surface_upload_sessions_\uc5c5\ub85c\ub4dc_\uc138\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring", + "target": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring", + "target": "concepts_db_schema_overview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L23", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_activity_logs_\uc0ac\uc6a9\uc790_\ud65c\ub3d9_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L33", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_audit_logs_\uac10\uc0ac_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L83", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_change_logs_\uc124\uacc4_\ubcc0\uacbd_\uc774\ub825", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_login_logs_\ub85c\uadf8\uc778_\uc2dc\ub3c4_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L71", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_support_requests_\uae30\uc220_\uc9c0\uc6d0_\uc694\uccad", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L53", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_admin_logs_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\ud589\uc704_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L96", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_audit_logs_\uc0ac\uc6a9\ucc98_b01_b02", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L43", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_audit_logs_\ud504\ub85c\uc81d\ud2b8_\uc870\uc9c1_\ubcc0\uacbd_\uac10\uc0ac_\ub85c\uadf8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L62", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_system_resources_\uc2dc\uc2a4\ud15c_\uc790\uc6d0_\uacc4\uce21", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/logs_monitoring.md", + "source_location": "L100", + "weight": 1.0, + "source": "concepts_db_schema_logs_monitoring_db_\ub85c\uadf8_\ubaa8\ub2c8\ud130\ub9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_logs_monitoring_\ub9ac\uc18c\uc2a4_api_system_admin_\uc804\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L28", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_projects", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L30", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_route_profile", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L31", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_structure_output", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L20", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_unconfirmed_readme", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L26", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_db_schema_users_auth", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L16", + "weight": 1.0, + "source": "concepts_db_schema_overview", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L31", + "weight": 1.0, + "source": "concepts_storage_paths", + "target": "concepts_db_schema_overview", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L51", + "weight": 1.0, + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\uc124\uacc4_\uc6d0\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L56", + "weight": 1.0, + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uad00\uacc4_\ud575\uc2ec_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L22", + "weight": 1.0, + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\ud14c\uc774\ube14_\uadf8\ub8f9_9\uac1c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/overview.md", + "source_location": "L34", + "weight": 1.0, + "source": "concepts_db_schema_overview_db_\uc2a4\ud0a4\ub9c8_\uac1c\uc694", + "target": "concepts_db_schema_overview_\ud30c\uc77c_\uacbd\ub85c_\ucd94\uc801_\uceec\ub7fc_db\uc5d0_\uacbd\ub85c\ub9cc_\uae30\ub85d_\uc2e4_\ud30c\uc77c\uc740_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_projects", + "target": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L40", + "weight": 1.0, + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_project_automations_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654_\uc815\ucc45", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L30", + "weight": 1.0, + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_project_versions_\ud504\ub85c\uc81d\ud2b8_\ubc84\uc804_\uc2a4\ub0c5\uc0f7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L54", + "weight": 1.0, + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_project_workflow_stages_\ub2e8\uacc4\ubcc4_\uc0c1\uc138_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/projects.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_db_schema_projects_db_\ud504\ub85c\uc81d\ud2b8_\uad00\ub9ac_\ud14c\uc774\ube14", + "target": "concepts_db_schema_projects_projects_\ud504\ub85c\uc81d\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_route_profile", + "target": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L69", + "weight": 1.0, + "source": "concepts_db_schema_route_profile", + "target": "concepts_db_schema_structure_output", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L68", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_cross_sections_data_structures", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L55", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_cross_sections_\ud6a1\ub2e8\uba74_\uc124\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L45", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_longitudinal_sections_\uc885\ub2e8\uba74_\uc124\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_route_points_\uacbd\ub85c_\uc88c\ud45c\uc810", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L36", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_route_statistics_\ub178\uc120_\ud1b5\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L65", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_routes_status_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/route_profile.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_db_schema_route_profile_db_\uacbd\ub85c_\uc885\ud6a1\ub2e8_\ud14c\uc774\ube14", + "target": "concepts_db_schema_route_profile_routes_\ub178\uc120_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_structure_output", + "target": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L54", + "weight": 1.0, + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_output_files_\uac1c\ubcc4_\uc0b0\ucd9c_\ud30c\uc77c_\ub9ac\uc2a4\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L42", + "weight": 1.0, + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_outputs_\ucd5c\uc885_\uacac\uc801_\ub3c4\uba74_\uc0b0\ucd9c_\uc138\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L29", + "weight": 1.0, + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_quantity_items_\uc218\ub7c9_\uc0b0\ucd9c_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L65", + "weight": 1.0, + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_quantity_items_\ucd1d\ube44\uc6a9_\uacc4\uc0b0_\uc608", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/structure_output.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_db_schema_structure_output_db_\uad6c\uc870\ubb3c_\uc218\ub7c9_\uc0b0\ucd9c\ubb3c_\ud14c\uc774\ube14", + "target": "concepts_db_schema_structure_output_structures_\ubc30\uce58_\uad6c\uc870\ubb3c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L1", + "weight": 1.0, + "source": "concepts_db_schema_unconfirmed_readme", + "target": "concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/unconfirmed/README.md", + "source_location": "L5", + "weight": 1.0, + "source": "concepts_db_schema_unconfirmed_readme_\ubbf8\ud655\uc815_\ud14c\uc774\ube14_\ubcf4\uad00\uc18c_unconfirmed_db_schemas", + "target": "concepts_db_schema_unconfirmed_readme_\uc6b4\uc601_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_db_schema_users_auth", + "target": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L32", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_companies_\ud68c\uc0ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L56", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_email_otps_\uc774\uba54\uc77c_otp", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L73", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_join_requests_\ud68c\uc0ac_\uac00\uc785_\uc2e0\uccad", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L45", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_sessions_\uc138\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L65", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_trusted_devices_\uc2e0\ub8b0_\uae30\uae30", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L84", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_user_consents_\uc57d\uad00_\ub3d9\uc758", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/db_schema/users_auth.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_db_schema_users_auth_db_\uc0ac\uc6a9\uc790_\uc778\uc99d_\uc870\uc9c1_\ud14c\uc774\ube14", + "target": "concepts_db_schema_users_auth_users_\uc0ac\uc6a9\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_dependencies", + "target": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_dependencies", + "target": "concepts_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_dependencies", + "target": "concepts_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_dependencies.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_dependencies", + "target": "concepts_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_dependencies", + "target": "concepts_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "target": "concepts_dependencies_\ubc31\uc5d4\ub4dc_python_3_12_7", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L35", + "weight": 1.0, + "source": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "target": "concepts_dependencies_\uc120\uc815_\uc6d0\uce59_agent_md_3\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/dependencies.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_dependencies_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac_\uc758\uc874\uc131", + "target": "concepts_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript_node_js", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/schema_common.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_schema_common", + "target": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/schema_common.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "target": "concepts_schema_common_\uac80\uc99d_\uc6d0\uce59_backend_md_4\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/schema_common.md", + "source_location": "L16", + "weight": 1.0, + "source": "concepts_schema_common_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\uaddc\uce59", + "target": "concepts_schema_common_\uba85\uba85_\uaddc\uce59", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_storage_paths", + "target": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_storage_paths", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L49", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend", + "target": "concepts_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L27", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_dependencies", + "target": "concepts_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L26", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_dependencies", + "target": "concepts_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L30", + "weight": 1.0, + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_db_\uceec\ub7fc_\uc2e4\uc81c_\uacbd\ub85c_\ub9e4\ud551", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L11", + "weight": 1.0, + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\uacbd\ub85c_\ud328\ud134", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L23", + "weight": 1.0, + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\uc6d0\uce59_backend_md_3\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/storage_paths.md", + "source_location": "L33", + "weight": 1.0, + "source": "concepts_storage_paths_\uc800\uc7a5_\uacbd\ub85c_\uaddc\uce59_workflow_based_folder_structure", + "target": "concepts_storage_paths_\ud30c\uc77c\uba85_\uaddc\uce59_structure_md_1\uc808", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L8", + "weight": 1.0, + "source": "concepts_ui_templates", + "target": "concepts_ui_templates_ui_templates_localization_components", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L28", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_dependencies", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L50", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L37", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend", + "target": "concepts_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L59", + "weight": 1.0, + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L30", + "weight": 1.0, + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L12", + "weight": 1.0, + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L82", + "weight": 1.0, + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L75", + "weight": 1.0, + "source": "concepts_ui_templates_ui_templates_localization_components", + "target": "concepts_ui_templates_\uc81c\uc57d_backend_md_1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L24", + "weight": 1.0, + "source": "concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", + "target": "concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L16", + "weight": 1.0, + "source": "concepts_ui_templates_ui_template_locale_ts_\ub2e4\uad6d\uc5b4_\uad00\ub9ac", + "target": "concepts_ui_templates_\ud575\uc2ec_\uae30\ub2a5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L50", + "weight": 1.0, + "source": "concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", + "target": "concepts_ui_templates_\uc0ac\uc6a9\ucc98_\uc5ed\ucc38\uc870_50", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L34", + "weight": 1.0, + "source": "concepts_ui_templates_ui_template_elements_ts_\uacf5\ud1b5_\ucef4\ud3ec\ub10c\ud2b8", + "target": "concepts_ui_templates_\uc81c\uacf5_\ucef4\ud3ec\ub10c\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/ui_templates.md", + "source_location": "L63", + "weight": 1.0, + "source": "concepts_ui_templates_theme_css_\uc2a4\ud0c0\uc77c_\ubcc0\uc218", + "target": "concepts_ui_templates_\ud575\uc2ec_\ubcc0\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L9", + "weight": 1.0, + "source": "concepts_workflow_state", + "target": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L49", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L32", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L49", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L28", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_dependencies", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L44", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L37", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_backend", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "references", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L25", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_dependencies", + "target": "concepts_workflow_state", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L65", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_b04_\uc0c1\ud0dc_\uc870\ud68c_\ub808\uac70\uc2dc_\ud3f4\ubc31_\ub2f9\ucd08_\uc794\uc7ac_\ub85c_\ud45c\uae30\ud588\uc73c\ub098_\uc815\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L62", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_projects_status_\ubb38\uc790\uc5f4_\uce90\uc2dc_\ud638\ud658\uc6a9_\uacc4\ud68d\uc11c_\ubc29\uce68\ub300\ub85c_\uc720\uc9c0_\uc911", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L13", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_ssot_project_workflow_stages_\ud14c\uc774\ube14_\uc2e4_db_\ud655\uc778", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L27", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_\uacf5\ud1b5_\uc720\ud2f8_common_util_common_util_workflow_state_py", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L72", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_\ubbf8\ud574\uacb0_\uc0ac\ud56d_\uacc4\ud68d\uc11c_\uc6d0\ubb38_\uc544\uc9c1_\uacb0\uc815_\uc548_\ub428", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L54", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_\uc0c1\ud0dc_\uc804\uc774_\uad6c\ud604\ub300\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L37", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_\uc2e4_\uc5f0\ub3d9_\ud604\ud669_\ud30c\uc77c_\uc904\ubc88\ud638", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "concepts/workflow_state.md", + "source_location": "L47", + "weight": 1.0, + "source": "concepts_workflow_state_workflow_\uc0c1\ud0dc_\uad00\ub9ac_\uad6c\ud604_\uc644\ub8cc_\uc2e4_db_\ud655\uc778\ub428", + "target": "concepts_workflow_state_\uc870\ud68c_api_\uc2e4\uc81c_\uc874\uc7ac_\uacc4\ud68d\uc11c\uc640_\uacbd\ub85c_\uc77c\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L6", + "weight": 1.0, + "source": "index", + "target": "index_wiki_index", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L68", + "weight": 1.0, + "source": "index_wiki_index", + "target": "index_\uac1c\ub150_concepts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L110", + "weight": 1.0, + "source": "index_wiki_index", + "target": "index_\ubbf8\ud574\uacb0_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L39", + "weight": 1.0, + "source": "index_wiki_index", + "target": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L10", + "weight": 1.0, + "source": "index_wiki_index", + "target": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L12", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b01_dashboard_b01_backend_b01_dashboard", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L15", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b02_projregister_b02_backend_b02_projregister", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L18", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b03_fileinput_b03_backend_b03_fileinput", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L21", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b04_wf1_surface_b04_backend_b04_wf1_surface", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L24", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b05_wf2_route_b05_backend_b05_wf2_route", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L27", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L30", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L33", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b08_wf5_quantity_b08_frontend_b08_wf5_quantity", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L36", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\ud6c4_\uc6cc\ud06c\ud50c\ub85c\uc6b0_b01_b09", + "target": "index_b09_wf6_estimation_b09_frontend_b09_wf6_estimation", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L41", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a01_home_a01_frontend_a01_home", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L44", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a02_progdetail_a02_frontend_a02_progdetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L47", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a03_compdetail_a03_frontend_a03_compdetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L50", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a04_newshistory_a04_frontend_a04_newshistory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L53", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a05_edudetail_a05_frontend_a05_edudetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L56", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a06_login_a06_backend_a06_login", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L59", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a07_register_a07_backend_a07_register", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L62", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a08_support_a08_backend_a08_support", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L65", + "weight": 1.0, + "source": "index_\ud398\uc774\uc9c0_\ub85c\uadf8\uc778_\uc804_a01_a09", + "target": "index_a09_security_a09_backend_a09_security", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L70", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_a00_app_shell_framework", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L73", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_a00_app_shell_framework_scaffold", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L98", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_api_\uacf5\ud1b5_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L89", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_auth_rbac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L95", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_common_util", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L79", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_db_\uc2a4\ud0a4\ub9c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L92", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_storage_paths", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L76", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_ui_templates", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L107", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_workflow_\uc0c1\ud0dc_\uad00\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L104", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_\uacf5\ud1b5_\uc2a4\ud0a4\ub9c8_pydantic_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L101", + "weight": 1.0, + "source": "index_\uac1c\ub150_concepts", + "target": "index_\uc758\uc874\uc131_\uc5ec\ub7ec_\ud398\uc774\uc9c0\uac00_\uacf5\uc720\ud558\ub294_\uc678\ubd80_\ub77c\uc774\ube0c\ub7ec\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "index.md", + "source_location": "L116", + "weight": 1.0, + "source": "index_\ubbf8\ud574\uacb0_\ud56d\ubaa9", + "target": "index_a\uadf8\ub8f9_\uc778\uc81c\uc2a4\ud2b8_\uc774\uc288", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L1", + "weight": 1.0, + "source": "log", + "target": "log_wiki_log", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L173", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a01_home_\uc2e4_\ucf54\ub4dc_\ubc18\uc601", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L318", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a02_progdetail_a00_common_framework", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L295", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a03_compdetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L284", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a04_newshistory", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L274", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a05_edudetail", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L248", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a06_login_backend_frontend_\uc0c1\uc138\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L233", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a07_register_backend_frontend_\uc0c1\uc138\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L219", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a08_support_backend_frontend_\uc0c1\uc138\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L204", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_a09_security_backend_frontend_\uc0c1\uc138\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L69", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_b02_projregister_backend_frontend_db_\uc0c1\uc138\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L57", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_b04_wf1_surface_\uc2e4_\ucf54\ub4dc_\ub300\uc870_5\ubd84\ud560_\uc0c1\uc138\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L47", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_b07_wf4_designdetail_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L36", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_b09_wf6_estimation_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\ubbf8\ucc29\uc218_\ud655\uc778", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L17", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_db_34\uac1c_\ud14c\uc774\ube14_\uc804\uc218_\uceec\ub7fc_\uc2e4\uce21_\ubc0f_\uc704\ud0a4_\ucd5c\uc2e0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L148", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_guidelines_plans_7\uac74_\uc77c\uad04_\ubc18\uc601", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L30", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_ingest_lint_3\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\ubb34\uacb0\uc131_\ud655\ubcf4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L10", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_5\ud68c_\ubc18\ubcf5_\ub9b0\ud2b8_\uac1c\uc120_\uc0ac\uc774\ud074_\uc218\ud589_\ubc0f_\uc704\ud0a4_\uba54\ud0c0_\uc815\ubcf4_\uc815\ubc00_\ubcf4\uc644", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L305", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_a01_home_\ud398\uc774\uc9c0_\uac80\uc0ac_\ubc0f_\uc218\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L263", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_a03_a05_\uc778\uc81c\uc2a4\ud2b8_\uc7ac\uc810\uac80", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L188", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_a\uadf8\ub8f9_a01_a09_\uc804\uccb4_\uac80\uc99d_\ubc0f_\uc815\ud569\uc131_\uc810\uac80", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L167", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_page_id_frontmatter_\ud544\ub4dc_\ub3c4\uc785", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L6", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_\uad6c\ud615_\uc0c1\uc704_\ud3f4\ub354_\ud0c8\ucd9c_\ub9c1\ud06c_concepts_\uc804\uc218_\uc815\ubc00_\uad50\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L141", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_\uc704\ud0a4_\uc2dc\uc2a4\ud15c_\ucd08\uae30_\uc138\ud305", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L126", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L134", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_lint_\uc804\uccb4_\uc704\ud0a4_\uad6c\uc870_\uc0c1\ud0dc_\uacf5\uc720_\uac1c\ub150_\uc815\ub9ac_134", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L85", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_query_b01_dashboard_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L93", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_query_b03_fileinput_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L102", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_query_b05_wf2_route_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L111", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_query_b06_wf3_profilecross_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L119", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_query_b08_wf5_quantity_\uc2e4_\ucf54\ub4dc_\uae30\uc900_\ucd5c\uc2e0\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L157", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_query_lint_\uc2e4_db_\uc2e4_\ucf54\ub4dc_\ub300\uc870_\uac80\uc99d_\uc77d\uae30_\uc804\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "log.md", + "source_location": "L180", + "weight": 1.0, + "source": "log_wiki_log", + "target": "log_2026_07_12_refactor_\ud30c\uc77c\uba85_\uaddc\uce59_\ub3c4\uc785_\ubc0f_\ub9c1\ud06c_\uc218\uc815", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_a01_home_a01_components", + "target": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L27", + "weight": 1.0, + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L34", + "weight": 1.0, + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\ubbf8\ud574\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\uc2a4\ud0c0\uc77c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_components.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_a01_home_a01_components_a01_home_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a01_home_a01_components_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend", + "target": "pages_a01_home_a01_frontend_a01_home_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L43", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L58", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L36", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_a01_home_frontend", + "target": "pages_a01_home_a01_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_a01_home_a01_frontend_hero_\uc139\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_a01_home_a01_frontend_\uc8fc\uc694_\uae30\ub2a5_\uc139\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A01_Home/A01_frontend.md", + "source_location": "L26", + "weight": 1.0, + "source": "pages_a01_home_a01_frontend_\ucef4\ud3ec\ub10c\ud2b8", + "target": "pages_a01_home_a01_frontend_\ucd5c\uc2e0_\uc18c\uc2dd_\uc139\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_components", + "target": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L29", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\ub370\uc774\ud130_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L35", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\ubbf8\ud574\uacb0_\ud2b9\uc774\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_components.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_components_a02_progdetail_\uc138\ubd80_\uad6c\ud604", + "target": "pages_a02_progdetail_a02_components_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_frontend", + "target": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\uc138\ubd80_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\uc81c\uc57d_\uc900\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A02_ProgDetail/A02_frontend.md", + "source_location": "L16", + "weight": 1.0, + "source": "pages_a02_progdetail_a02_frontend_a02_progdetail_frontend", + "target": "pages_a02_progdetail_a02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ubd84\uc11d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend", + "target": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L29", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L45", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L64", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_a03_compdetail_frontend", + "target": "pages_a03_compdetail_a03_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L47", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a03_compdetail_a03_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A03_CompDetail/A03_frontend.md", + "source_location": "L61", + "weight": 1.0, + "source": "pages_a03_compdetail_a03_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a03_compdetail_a03_frontend_\ubc18\uc751\ud615", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend", + "target": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_mock_\ub370\uc774\ud130_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L48", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L83", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ubbf8\ud574\uacb0_\uc0ac\ud56d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L60", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L78", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_a04_newshistory_frontend", + "target": "pages_a04_newshistory_a04_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L62", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a04_newshistory_a04_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A04_NewsHistory/A04_frontend.md", + "source_location": "L75", + "weight": 1.0, + "source": "pages_a04_newshistory_a04_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a04_newshistory_a04_frontend_\ubc18\uc751\ud615", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend", + "target": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L28", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L41", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L65", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L59", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\ucef4\ud3ec\ub10c\ud2b8_\uc139\uc158_\ube4c\ub354", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_a05_edudetail_frontend", + "target": "pages_a05_edudetail_a05_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L43", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a05_edudetail_a05_frontend_css_\ud074\ub798\uc2a4_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A05_EduDetail/A05_frontend.md", + "source_location": "L56", + "weight": 1.0, + "source": "pages_a05_edudetail_a05_frontend_\uc2a4\ud0c0\uc77c_css", + "target": "pages_a05_edudetail_a05_frontend_\ubc18\uc751\ud615", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a06_login_a06_backend", + "target": "pages_a06_login_a06_backend_a06_login_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L66", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L29", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L45", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ub85c\uadf8\uc778_\ub85c\uc9c1_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L54", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ubcf4\uc548_\uc815\ucc45_\uc2e4_\ucf54\ub4dc_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L37", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L60", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a06_login_a06_backend_a06_login_backend", + "target": "pages_a06_login_a06_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend", + "target": "pages_a06_login_a06_frontend_a06_login_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L27", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L51", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L64", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L79", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L72", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A06_Login/A06_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a06_login_a06_frontend_a06_login_frontend", + "target": "pages_a06_login_a06_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a07_register_a07_backend", + "target": "pages_a07_register_a07_backend_a07_register_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L36", + "weight": 1.0, + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\uac00\uc785_\ub85c\uc9c1_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L27", + "weight": 1.0, + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L48", + "weight": 1.0, + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L54", + "weight": 1.0, + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a07_register_a07_backend_a07_register_backend", + "target": "pages_a07_register_a07_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend", + "target": "pages_a07_register_a07_frontend_a07_register_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L33", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L56", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L70", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L50", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc57d\uad00_\ub3d9\uc758_\uc544\ucf54\ub514\uc5b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L85", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L77", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L43", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\uc81c\ucd9c_\ub85c\uc9c1_2\ub2e8\uacc4_\ud3fc_\uc804\ud658", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218_ui_auth_page_\uc2e4\uc0ac\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A07_Register/A07_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a07_register_a07_frontend_a07_register_frontend", + "target": "pages_a07_register_a07_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a08_support_a08_backend", + "target": "pages_a08_support_a08_backend_a08_support_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L62", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_db_\uc2a4\ud0a4\ub9c8_\ubd88\uc77c\uce58_\ud655\uc778_\ud544\uc694", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L44", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_db_\uc800\uc7a5_\uceec\ub7fc_\uc2e4_\ucf54\ub4dc_insert_\uae30\uc900", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L25", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\ub0b4\ubd80_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L56", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L37", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\uc811\uc218_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L51", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\ud2b9\uc9d5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a08_support_a08_backend_a08_support_backend", + "target": "pages_a08_support_a08_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend", + "target": "pages_a08_support_a08_frontend_a08_support_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L39", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L34", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc138\uc158_\uc790\ub3d9_\ucc44\uc6c0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L51", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L65", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L59", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L27", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L73", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A08_Support/A08_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a08_support_a08_frontend_a08_support_frontend", + "target": "pages_a08_support_a08_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a09_security_a09_backend", + "target": "pages_a09_security_a09_backend_a09_security_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L55", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_db_\uc800\uc7a5_activity_logs", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L60", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\uad8c\ud55c_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L45", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L67", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L73", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_a09_security_backend", + "target": "pages_a09_security_a09_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "pages_a09_security_a09_backend_\ub9c8\uc2a4\ud130_\ud68c\uc0ac_\uad00\ub9ac\uc790_\uc804\uc6a9_require_master", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "pages_a09_security_a09_backend_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790_\uc804\uc6a9_require_system_admin", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_backend.md", + "source_location": "L39", + "weight": 1.0, + "source": "pages_a09_security_a09_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "target": "pages_a09_security_a09_backend_\uc778\uc99d_\uc0ac\uc6a9\uc790_\uacf5\ud1b5_verify_session", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend", + "target": "pages_a09_security_a09_frontend_a09_security_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218_\ubbf8\uc0ac\uc6a9_\uc815\uc758\ub9cc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L53", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L64", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc57d\uad00_\ub370\uc774\ud130_a09_security_terms_ts", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L69", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc57d\uad00_\ud14d\uc2a4\ud2b8\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L75", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L25", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/A09_Security/A09_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_a09_security_a09_frontend_a09_security_frontend", + "target": "pages_a09_security_a09_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api", + "target": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L14", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\uc0ac\uc6a9\uc790_\ud68c\uc0ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L46", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\uc2dc\uc2a4\ud15c_\uad00\ub9ac\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L35", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\ud504\ub85c\uc81d\ud2b8_\uc790\ub3d9\ud654", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_api.md", + "source_location": "L25", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_api_b01_dashboard_api", + "target": "pages_b01_dashboard_b01_api_\ud68c\uc0ac_\uad00\ub9ac\uc790", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_backend", + "target": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L54", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\ub77c\uc6b0\ud130_\uad8c\ud55c_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L44", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uc694\uccad_\uc2a4\ud0a4\ub9c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_backend.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_backend_b01_dashboard_backend", + "target": "pages_b01_dashboard_b01_backend_\uc800\uc7a5\uc18c_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_db", + "target": "pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_db.md", + "source_location": "L25", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_db_b01_dashboard_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b01_dashboard_b01_db_\ud2b8\ub79c\uc7ad\uc158_\uacbd\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_dependencies", + "target": "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_dependencies.md", + "source_location": "L23", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_dependencies_b01_dashboard_dependencies", + "target": "pages_b01_dashboard_b01_dependencies_\ud504\ub85c\uc81d\ud2b8_\uacf5\ud1b5_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend", + "target": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_ui_\uad8c\ud55c_\ud5ec\ud37c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L45", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\uacf5\uc720_\uc790\uc6d0_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L52", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L32", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\ubaa8\ub2ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B01_Dashboard/B01_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b01_dashboard_b01_frontend_b01_dashboard_frontend", + "target": "pages_b01_dashboard_b01_frontend_\ud30c\uc77c\uacfc_\uc9c4\uc785\uc810", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend", + "target": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L22", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L56", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_db_\uc800\uc7a5_\uceec\ub7fc_projects_insert", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L45", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\uc0dd\uc131_\ub85c\uc9c1_create_project_\ud2b8\ub79c\uc7ad\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L38", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L61", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\uc758\uc874\uc131_\uacf5\ud1b5_\uc720\ud2f8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L69", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L14", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_backend.md", + "source_location": "L28", + "weight": 1.0, + "source": "pages_b02_projregister_b02_backend_b02_projregister_backend", + "target": "pages_b02_projregister_b02_backend_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b02_projregister_b02_db", + "target": "pages_b02_projregister_b02_db_b02_projregister_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b02_projregister_b02_db_b02_projregister_db", + "target": "pages_b02_projregister_b02_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b02_projregister_b02_db_b02_projregister_db", + "target": "pages_b02_projregister_b02_db_\uc800\uc7a5\uc18c_\ud30c\uc77c\uc2dc\uc2a4\ud15c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_db.md", + "source_location": "L26", + "weight": 1.0, + "source": "pages_b02_projregister_b02_db_b02_projregister_db", + "target": "pages_b02_projregister_b02_db_\ucc38\uace0_\uacc4\ud68d_\ub2f9\uc2dc_\uc758\ub3c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend", + "target": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L45", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L57", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc2a4\ud0c0\uc77c_css", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L72", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L66", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc774\ubca4\ud2b8_\ud578\ub4e4\ub7ec", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L26", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc785\ub825_\ud544\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L37", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\uc81c\ucd9c_\ub85c\uc9c1", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L80", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B02_ProjRegister/B02_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b02_projregister_b02_frontend_b02_projregister_frontend", + "target": "pages_b02_projregister_b02_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api", + "target": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L27", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "target": "pages_b03_fileinput_b03_api_workflow_\uc870\ud68c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L14", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "target": "pages_b03_fileinput_b03_api_\uc77c\ubc18_\uc5c5\ub85c\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_api.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_api_b03_fileinput_api", + "target": "pages_b03_fileinput_b03_api_\uccad\ud06c_\uc5c5\ub85c\ub4dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend", + "target": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_workflow_\uc54c\ub9bc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L22", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uba54\ud0c0\ub370\uc774\ud130_\ubd84\uc11d", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uc785\ub825_\uac80\uc99d_\ud30c\uc77c_\ucc98\ub9ac", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_backend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_backend_b03_fileinput_backend", + "target": "pages_b03_fileinput_b03_backend_\uc800\uc7a5\uc18c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_db", + "target": "pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_db.md", + "source_location": "L22", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_db_b03_fileinput_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b03_fileinput_b03_db_\ud30c\uc77c_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_dependencies", + "target": "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_dependencies.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_dependencies_b03_fileinput_dependencies", + "target": "pages_b03_fileinput_b03_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend", + "target": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L42", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_\ube0c\ub77c\uc6b0\uc800_\uc0c1\ud0dc_\uc624\ud504\ub77c\uc778_\ubcf4\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B03_FileInput/B03_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b03_fileinput_b03_frontend_b03_fileinput_frontend", + "target": "pages_b03_fileinput_b03_frontend_\ud398\uc774\uc9c0_\uc5c5\ub85c\ub4dc_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_api", + "target": "pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L15", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", + "target": "pages_b04_wf1_surface_b04_api_\uc5d4\ub4dc\ud3ec\uc778\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_api.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_api_b04_wf1_surface_api", + "target": "pages_b04_wf1_surface_b04_api_\uc694\uccad_\uc751\ub2f5_\uc2a4\ud0a4\ub9c8_pydantic", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend", + "target": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L53", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\ub808\uac70\uc2dc_\ud3f4\ubc31_416_420\uc904", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\uc5d4\uc9c4_\uc11c\ube0c\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L44", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\uc6cc\ud06c\ud50c\ub85c\uc6b0_\uc0c1\ud0dc_\uc804\uc774", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L66", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L35", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\uc8fc\uc694_\ud568\uc218_router", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L62", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\ucc45\uc784", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_backend_b04_wf1_surface_backend", + "target": "pages_b04_wf1_surface_b04_backend_\ud30c\uc77c_\uad6c\uc131_\uc624\ucf00\uc2a4\ud2b8\ub808\uc774\ud130_\uc800\uc7a5\uc18c_\ub77c\uc6b0\ud130", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_db", + "target": "pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L23", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", + "target": "pages_b04_wf1_surface_b04_db_repository_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", + "target": "pages_b04_wf1_surface_b04_db_\uc4f0\ub294_\ud14c\uc774\ube14", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_db.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_db_b04_wf1_surface_db", + "target": "pages_b04_wf1_surface_b04_db_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_dependencies", + "target": "pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", + "target": "pages_b04_wf1_surface_b04_dependencies_dependencies_concept_\uc815\uc815_\ud544\uc694", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", + "target": "pages_b04_wf1_surface_b04_dependencies_\ubc31\uc5d4\ub4dc_python", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_dependencies.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_dependencies_b04_wf1_surface_dependencies", + "target": "pages_b04_wf1_surface_b04_dependencies_\ud504\ub860\ud2b8\uc5d4\ub4dc_typescript", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L22", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_\uacc4\ud68d\uc11c\uc640_\uc2e4_\ucf54\ub4dc_\ubd88\uc77c\uce58_3d_\ubdf0\uc5b4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L60", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L53", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_\ucc98\ub9ac_\ud750\ub984", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L32", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B04_wf1_Surface/B04_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b04_wf1_surface_b04_frontend_b04_wf1_surface_frontend", + "target": "pages_b04_wf1_surface_b04_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_api", + "target": "pages_b05_wf2_route_b05_api_b05_wf2_route_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_api.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_api_b05_wf2_route_api", + "target": "pages_b05_wf2_route_b05_api_solve_\ucc98\ub9ac_\uacb0\uacfc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend", + "target": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "target": "pages_b05_wf2_route_b05_backend_\uacbd\ub85c_\uacc4\uc0b0_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L46", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "target": "pages_b05_wf2_route_b05_backend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "target": "pages_b05_wf2_route_b05_backend_\uae30\ud558_\uacb0\uacfc_\ubcc0\ud658", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L39", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "target": "pages_b05_wf2_route_b05_backend_\ub77c\uc6b0\ud130_workflow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_backend_b05_wf2_route_backend", + "target": "pages_b05_wf2_route_b05_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_db", + "target": "pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b05_wf2_route_b05_db_repository_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_db.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_db_b05_wf2_route_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b05_wf2_route_b05_db_\uc800\uc7a5_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_dependencies", + "target": "pages_b05_wf2_route_b05_dependencies_b05_wf2_route_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_dependencies.md", + "source_location": "L23", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_dependencies_b05_wf2_route_dependencies", + "target": "pages_b05_wf2_route_b05_dependencies_\ud398\uc774\uc9c0_\ud30c\uc77c\ubcc4_\uc5f0\uacb0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_frontend", + "target": "pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", + "target": "pages_b05_wf2_route_b05_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L40", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", + "target": "pages_b05_wf2_route_b05_frontend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L29", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", + "target": "pages_b05_wf2_route_b05_frontend_\uc785\ub825_\uadf8\ub8f9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B05_wf2_Route/B05_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b05_wf2_route_b05_frontend_b05_wf2_route_frontend", + "target": "pages_b05_wf2_route_b05_frontend_\ud654\uba74\uacfc_\uc0c1\ud638\uc791\uc6a9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_api", + "target": "pages_b06_wf3_profilecross_b06_api_b06_wf3_profilecross_api", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_api.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_api_b06_wf3_profilecross_api", + "target": "pages_b06_wf3_profilecross_b06_api_\uc0dd\uc131_\uc751\ub2f5", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_backend", + "target": "pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L31", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", + "target": "pages_b06_wf3_profilecross_b06_backend_\ub77c\uc6b0\ud130_workflow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", + "target": "pages_b06_wf3_profilecross_b06_backend_\uc0dd\uc131_\uc5d4\uc9c4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", + "target": "pages_b06_wf3_profilecross_b06_backend_\uc694\uccad_\uc751\ub2f5_\ubaa8\ub378", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_backend.md", + "source_location": "L39", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_backend_b06_wf3_profilecross_backend", + "target": "pages_b06_wf3_profilecross_b06_backend_\uc7ac\uc2e4\ud589", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_db", + "target": "pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b06_wf3_profilecross_b06_db_repository_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_db.md", + "source_location": "L29", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_db_b06_wf3_profilecross_db_\uc0ac\uc6a9_\uad00\uacc4", + "target": "pages_b06_wf3_profilecross_b06_db_\ud30c\uc77c_\uacbd\ub85c", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_dependencies", + "target": "pages_b06_wf3_profilecross_b06_dependencies_b06_wf3_profilecross_dependencies", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_dependencies.md", + "source_location": "L22", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_dependencies_b06_wf3_profilecross_dependencies", + "target": "pages_b06_wf3_profilecross_b06_dependencies_\uacf5\ud1b5_\ubaa8\ub4c8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_frontend", + "target": "pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L21", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", + "target": "pages_b06_wf3_profilecross_b06_frontend_api_\ud074\ub77c\uc774\uc5b8\ud2b8", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", + "target": "pages_b06_wf3_profilecross_b06_frontend_\uc785\ub825_\uc635\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B06_wf3_ProfileCross/B06_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b06_wf3_profilecross_b06_frontend_b06_wf3_profilecross_frontend", + "target": "pages_b06_wf3_profilecross_b06_frontend_\ud654\uba74_workflow", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L35", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218_\uacc4\ud68d\uc801_\ubc94\uc704_\uc81c\uc678", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L42", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L18", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B07_wf4_DesignDetail/B07_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b07_wf4_designdetail_b07_frontend_b07_wf4_designdetail_frontend", + "target": "pages_b07_wf4_designdetail_b07_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_db.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_db", + "target": "pages_b08_wf5_quantity_b08_db_b08_wf5_quantity_db", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_db.md", + "source_location": "L19", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_db_b08_wf5_quantity_db", + "target": "pages_b08_wf5_quantity_b08_db_\uad6c\ud604_\ub300\uae30_\ud56d\ubaa9", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L10", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend", + "target": "pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", + "target": "pages_b08_wf5_quantity_b08_frontend_\uacc4\ud68d_\ucc45\uc784", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L39", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", + "target": "pages_b08_wf5_quantity_b08_frontend_\uae30\uc220\ubd80\ucc44", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", + "target": "pages_b08_wf5_quantity_b08_frontend_\ud604\uc7ac_\uad6c\ud604", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B08_wf5_Quantity/B08_frontend.md", + "source_location": "L20", + "weight": 1.0, + "source": "pages_b08_wf5_quantity_b08_frontend_b08_wf5_quantity_frontend", + "target": "pages_b08_wf5_quantity_b08_frontend_\ud654\uba74_\uc0c1\ud0dc", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L8", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L24", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_\ub85c\uceec\ub77c\uc774\uc81c\uc774\uc158", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L35", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_\ubc31\uc5d4\ub4dc_db_\ubbf8\ucc29\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L30", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_\uc758\uc874\uc131", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L42", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_\ucc38\uace0", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L18", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_\ucef4\ud3ec\ub10c\ud2b8_\ud568\uc218", + "confidence_score": 1.0 + }, + { + "relation": "contains", + "confidence": "EXTRACTED", + "source_file": "pages/B09_wf6_Estimation/B09_frontend.md", + "source_location": "L12", + "weight": 1.0, + "source": "pages_b09_wf6_estimation_b09_frontend_b09_wf6_estimation_frontend", + "target": "pages_b09_wf6_estimation_b09_frontend_\ud30c\uc77c_\uad6c\uc870", + "confidence_score": 1.0 + } + ], + "hyperedges": [], + "built_at_commit": "35c65c9220e42fb3b6537d60008296c5cbbbd08e" +} \ No newline at end of file diff --git a/docs/wiki/graphify-out/manifest.json b/docs/wiki/graphify-out/manifest.json new file mode 100644 index 0000000..5f7c273 --- /dev/null +++ b/docs/wiki/graphify-out/manifest.json @@ -0,0 +1,347 @@ +{ + "AGENTS.md": { + "mtime": 1783834983.0604684, + "ast_hash": "74d04caee1f70d588da20af0f2224049", + "semantic_hash": "" + }, + "CLAUDE.md": { + "mtime": 1783834983.0604684, + "ast_hash": "74d04caee1f70d588da20af0f2224049", + "semantic_hash": "" + }, + "concepts/a00_app_shell_framework.md": { + "mtime": 1783850530.4141161, + "ast_hash": "2b483a655d0638849d9dc1ffaa38a503", + "semantic_hash": "" + }, + "concepts/a00_app_shell_framework_scaffold.md": { + "mtime": 1783844389.0126913, + "ast_hash": "b08d53673fa62ab2ae17105341f6beda", + "semantic_hash": "" + }, + "concepts/api_common.md": { + "mtime": 1783849575.5855756, + "ast_hash": "aa36d7b826c4ac0349cd64a64cde5fe4", + "semantic_hash": "" + }, + "concepts/auth_rbac.md": { + "mtime": 1783849578.4673145, + "ast_hash": "983376ddb2dcd996849889557b1e5227", + "semantic_hash": "" + }, + "concepts/common_util.md": { + "mtime": 1783849579.2001753, + "ast_hash": "adb12874ce5f40560652367b5f7a4bca", + "semantic_hash": "" + }, + "concepts/db_schema/files_surface.md": { + "mtime": 1783850268.5917373, + "ast_hash": "37c2c7e2ce683232b6282ad89e7508a1", + "semantic_hash": "" + }, + "concepts/db_schema/logs_monitoring.md": { + "mtime": 1783850257.6422136, + "ast_hash": "6eb1d0c95d17cd7309774022f623f0d6", + "semantic_hash": "" + }, + "concepts/db_schema/overview.md": { + "mtime": 1783850340.5808604, + "ast_hash": "86819ed4c2c6a755995116d5ebf1060a", + "semantic_hash": "" + }, + "concepts/db_schema/projects.md": { + "mtime": 1783850262.5202365, + "ast_hash": "dc10c1ca8cc8f763ac27fe02f4976b2b", + "semantic_hash": "" + }, + "concepts/db_schema/route_profile.md": { + "mtime": 1783850288.182818, + "ast_hash": "f41fdfb63f39e23eb591fc1939be6c65", + "semantic_hash": "" + }, + "concepts/db_schema/structure_output.md": { + "mtime": 1783850297.4292428, + "ast_hash": "ada0d9e74f91349f05a8ab1ac3231c47", + "semantic_hash": "" + }, + "concepts/db_schema/unconfirmed/README.md": { + "mtime": 1783850335.0813339, + "ast_hash": "70f32d481aeff62e260e1da78aae10bd", + "semantic_hash": "" + }, + "concepts/db_schema/users_auth.md": { + "mtime": 1783850220.2711427, + "ast_hash": "b39a4cae8f120944d31fb846b9c5168e", + "semantic_hash": "" + }, + "concepts/dependencies.md": { + "mtime": 1783850549.5115643, + "ast_hash": "93732554454116e3543ac2269b9d1f0d", + "semantic_hash": "" + }, + "concepts/schema_common.md": { + "mtime": 1783844389.0166397, + "ast_hash": "ebde162a912c33c17bd42e3edb469bc6", + "semantic_hash": "" + }, + "concepts/storage_paths.md": { + "mtime": 1783850555.214286, + "ast_hash": "2cf2c535406b15d5f2d7d5cde19fd4d2", + "semantic_hash": "" + }, + "concepts/ui_templates.md": { + "mtime": 1783850532.4820366, + "ast_hash": "29502f868494fc7a1e939c10bdd4f3e7", + "semantic_hash": "" + }, + "concepts/workflow_state.md": { + "mtime": 1783850560.3326466, + "ast_hash": "9a9e0acbd12fe065527f14205b576e71", + "semantic_hash": "" + }, + "index.md": { + "mtime": 1783850468.5420854, + "ast_hash": "171ed6c7eb37313803b566c33219e3b5", + "semantic_hash": "" + }, + "log.md": { + "mtime": 1783850724.1888082, + "ast_hash": "da1581ecf1d8cfed560bf8222b53aac7", + "semantic_hash": "" + }, + "pages/A01_Home/A01_components.md": { + "mtime": 1783849656.6167772, + "ast_hash": "af5724435a2da0845f42aed322971f7a", + "semantic_hash": "" + }, + "pages/A01_Home/A01_frontend.md": { + "mtime": 1783849659.8280177, + "ast_hash": "59d5bcdf4d88a0e576c55c5752579a23", + "semantic_hash": "" + }, + "pages/A02_ProgDetail/A02_components.md": { + "mtime": 1783849775.26568, + "ast_hash": "d663c36e0202f099a2602d631c2f962d", + "semantic_hash": "" + }, + "pages/A02_ProgDetail/A02_frontend.md": { + "mtime": 1783849775.2666833, + "ast_hash": "b590aa6c5a13b2478592e23803f5398d", + "semantic_hash": "" + }, + "pages/A03_CompDetail/A03_frontend.md": { + "mtime": 1783844088.3028529, + "ast_hash": "833dd9355fb96b46b0f94271a642c216", + "semantic_hash": "" + }, + "pages/A04_NewsHistory/A04_frontend.md": { + "mtime": 1783844098.3258784, + "ast_hash": "5bb83dca8f9f11f0122f5911b295e279", + "semantic_hash": "" + }, + "pages/A05_EduDetail/A05_frontend.md": { + "mtime": 1783844108.812845, + "ast_hash": "fadf785b9ebad689862cb8cfa9827fbd", + "semantic_hash": "" + }, + "pages/A06_Login/A06_backend.md": { + "mtime": 1783849775.2687664, + "ast_hash": "6de8c206c28526ccc8bbb8eff5654919", + "semantic_hash": "" + }, + "pages/A06_Login/A06_frontend.md": { + "mtime": 1783849775.2687664, + "ast_hash": "5d0213c68346d896fe9d11cd841331ad", + "semantic_hash": "" + }, + "pages/A07_Register/A07_backend.md": { + "mtime": 1783849775.2697725, + "ast_hash": "66f37d5bece9abdffd3149441e9b0b0d", + "semantic_hash": "" + }, + "pages/A07_Register/A07_frontend.md": { + "mtime": 1783849775.2707722, + "ast_hash": "0c30b980601414cefa02c05ba50a9008", + "semantic_hash": "" + }, + "pages/A08_Support/A08_backend.md": { + "mtime": 1783849900.5895991, + "ast_hash": "d2dd1028a837d8c17429179c4ffd7135", + "semantic_hash": "" + }, + "pages/A08_Support/A08_frontend.md": { + "mtime": 1783849775.2730606, + "ast_hash": "f2ebae60bb02320db4ac39e0a66b9d69", + "semantic_hash": "" + }, + "pages/A09_Security/A09_backend.md": { + "mtime": 1783849775.2740672, + "ast_hash": "f96ba36247f269672317bc352c705a7c", + "semantic_hash": "" + }, + "pages/A09_Security/A09_frontend.md": { + "mtime": 1783849775.2750769, + "ast_hash": "d90b0617abec1376bd32e140b0eb1f63", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_api.md": { + "mtime": 1783849775.2770772, + "ast_hash": "c85334659f25daeed71aefa2f2be9ad0", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_backend.md": { + "mtime": 1783849775.278077, + "ast_hash": "631e1b564272bebd703c0e66f4fc7128", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_db.md": { + "mtime": 1783850631.766598, + "ast_hash": "e7467e7ab25de8a576244c8595fefca4", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_dependencies.md": { + "mtime": 1783849775.2801342, + "ast_hash": "0879a678987bb76f3fbe44e55ee8758d", + "semantic_hash": "" + }, + "pages/B01_Dashboard/B01_frontend.md": { + "mtime": 1783849775.2801342, + "ast_hash": "4fe7a90bb05a32a5103cf66156a9c061", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/B02_backend.md": { + "mtime": 1783849775.282399, + "ast_hash": "304aee3205bcef9a2314c7d882bd84ea", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/B02_db.md": { + "mtime": 1783849775.282399, + "ast_hash": "ca17bc76462201e2ce50e754fbe7c816", + "semantic_hash": "" + }, + "pages/B02_ProjRegister/B02_frontend.md": { + "mtime": 1783849775.2833989, + "ast_hash": "407638de4f1ed56a3ba72c5c244d8ebd", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_api.md": { + "mtime": 1783849775.2843988, + "ast_hash": "eac552bd29adfc99ec5d2f0537d04d7e", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_backend.md": { + "mtime": 1783849775.285399, + "ast_hash": "176914d9912ba95b21320010552cd774", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_db.md": { + "mtime": 1783850637.4484162, + "ast_hash": "229bc7bb89bc7fb3a745fa7a1eb56640", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_dependencies.md": { + "mtime": 1783849775.2873988, + "ast_hash": "c3ce15681add07e1475a7e7743daf4e5", + "semantic_hash": "" + }, + "pages/B03_FileInput/B03_frontend.md": { + "mtime": 1783849775.2873988, + "ast_hash": "73828382a294172dadee59925d56414e", + "semantic_hash": "" + }, + "pages/B04_wf1_Surface/B04_api.md": { + "mtime": 1783849775.2910345, + "ast_hash": "98dc9571c054a9cc67f41e34c924afc4", + "semantic_hash": "" + }, + "pages/B04_wf1_Surface/B04_backend.md": { + "mtime": 1783849775.2921586, + "ast_hash": "0c5544f6648212b90660aa84f35982ba", + "semantic_hash": "" + }, + "pages/B04_wf1_Surface/B04_db.md": { + "mtime": 1783849775.292957, + "ast_hash": "7cb52c0844a907b14cfbd5230988c56f", + "semantic_hash": "" + }, + "pages/B04_wf1_Surface/B04_dependencies.md": { + "mtime": 1783849775.292957, + "ast_hash": "15bd0faa0411264c14b0bbd89f7afd46", + "semantic_hash": "" + }, + "pages/B04_wf1_Surface/B04_frontend.md": { + "mtime": 1783849775.2939596, + "ast_hash": "5735fc2ab57c3965dcf50149b078fc93", + "semantic_hash": "" + }, + "pages/B05_wf2_Route/B05_api.md": { + "mtime": 1783849775.2954652, + "ast_hash": "cc425874ae9a2ba7b8662af87848fa0d", + "semantic_hash": "" + }, + "pages/B05_wf2_Route/B05_backend.md": { + "mtime": 1783849775.2954652, + "ast_hash": "479b21cd1dc68e2ac4d6435b1007b3e8", + "semantic_hash": "" + }, + "pages/B05_wf2_Route/B05_db.md": { + "mtime": 1783850658.4844005, + "ast_hash": "c45788b5db47a7a4f246b0714a2c11e3", + "semantic_hash": "" + }, + "pages/B05_wf2_Route/B05_dependencies.md": { + "mtime": 1783849775.2981665, + "ast_hash": "d3295d11d6138324e91df459abda944a", + "semantic_hash": "" + }, + "pages/B05_wf2_Route/B05_frontend.md": { + "mtime": 1783849775.2981665, + "ast_hash": "3a5bba842808d5a7a935882514495311", + "semantic_hash": "" + }, + "pages/B06_wf3_ProfileCross/B06_api.md": { + "mtime": 1783849775.2991662, + "ast_hash": "00f3238df70ac4098b1a62d7a175e676", + "semantic_hash": "" + }, + "pages/B06_wf3_ProfileCross/B06_backend.md": { + "mtime": 1783849775.3001661, + "ast_hash": "715cfd2ee8f7384c849e23331d9d5ae6", + "semantic_hash": "" + }, + "pages/B06_wf3_ProfileCross/B06_db.md": { + "mtime": 1783850703.1234853, + "ast_hash": "63b1c8f0287b4b277633da8c4617b03f", + "semantic_hash": "" + }, + "pages/B06_wf3_ProfileCross/B06_dependencies.md": { + "mtime": 1783849775.301572, + "ast_hash": "cee07700e4614c067726375a385800c3", + "semantic_hash": "" + }, + "pages/B06_wf3_ProfileCross/B06_frontend.md": { + "mtime": 1783849775.3020935, + "ast_hash": "98cdce5d523d5750350c1c8eeb41ae8e", + "semantic_hash": "" + }, + "pages/B07_wf4_DesignDetail/B07_frontend.md": { + "mtime": 1783844389.053691, + "ast_hash": "d4bd4b2f000f33a76bfd5d2f9b1a2850", + "semantic_hash": "" + }, + "pages/B08_wf5_Quantity/B08_db.md": { + "mtime": 1783850708.284249, + "ast_hash": "00ca815731f29da6f062f6e5884430de", + "semantic_hash": "" + }, + "pages/B08_wf5_Quantity/B08_frontend.md": { + "mtime": 1783849775.303746, + "ast_hash": "4d4395611445c4e93de165cc343df7af", + "semantic_hash": "" + }, + "pages/B09_wf6_Estimation/B09_frontend.md": { + "mtime": 1783844389.0574813, + "ast_hash": "c17bf17a317f2190131be87d2e23e9bb", + "semantic_hash": "" + } +} \ No newline at end of file diff --git a/docs/wiki/index.md b/docs/wiki/index.md new file mode 100644 index 0000000..a0af705 --- /dev/null +++ b/docs/wiki/index.md @@ -0,0 +1,119 @@ +--- +type: index +last_updated: 2026-07-12 +--- + +# Wiki Index + +> 질의 시 항상 이 파일을 먼저 확인한다. 카테고리별로 페이지를 한 줄 요약과 함께 나열한다 (120자 이내). + +## 페이지 — 로그인 후 워크플로우 (B01~B09) + +### [[B01_Dashboard/B01_backend|B01_Dashboard]] +역할별 프로젝트·회사·사용자·가입·자동화 관리와 workflow 배치조회, 시스템 리소스·감사 로그. draft. + +### [[B02_ProjRegister/B02_backend|B02_ProjRegister]] +프로젝트 생성 `POST /api/b02/project`. 트랜잭션: projects INSERT+워크플로우 7단계 시드+감사로그+저장소 초기화. stable. + +### [[B03_FileInput/B03_backend|B03_FileInput]] +일반·청크 업로드, 메타데이터 분석, WF0/WF1 상태 전이, 이메일 알림과 workflow 조회. draft. + +### [[B04_wf1_Surface/B04_backend|B04_wf1_Surface]] +지표면 분석 `/api/projects` 12개 API. LAS→필터4종→모델5종→등고선. three.js 3D 뷰어 구현됨. WF1 stage 전이. stable. + +### [[B05_wf2_Route/B05_backend|B05_wf2_Route]] +Dijkstra·ridge-valley 경로 계산, 비용면·skeleton·통계 저장과 route 확정 API. WebCAD 뷰어 미구현. draft. + +### [[B06_wf3_ProfileCross/B06_backend|B06_wf3_ProfileCross]] +확정 경로 기반 종단·횡단 생성, 표고 sampler·측점 샘플링·결과 확정 API. WebCAD 프로필 뷰어 미구현. draft. + +### [[B07_wf4_DesignDetail/B07_frontend|B07_wf4_DesignDetail]] +구조물 배치 — 워크플로우 셸만 존재(26줄), 본문 미구현. migration_plan.md에 범위제외 명시(계획적 미착수). stable. + +### [[B08_wf5_Quantity/B08_frontend|B08_wf5_Quantity]] +WF5 workflow 셸만 구현. 수량 계산 본문·Repository·Router/API 미구현. draft. + +### [[B09_wf6_Estimation/B09_frontend|B09_wf6_Estimation]] +견적·문서(Excel/PDF/DXF) 산출 — 워크플로우 셸만 존재(26줄), 본문 미구현. outputs/output_files 테이블 예정. stable. + +## 페이지 — 로그인 전 (A01~A09) + +### [[A01_Home/A01_frontend|A01_Home]] +히어로 + 최신 소식 + 주요 기능 showcase. 정적 페이지. MOCK_NEWS 하드코딩(GET /api/a01/news 미구현). stable. + +### [[A02_ProgDetail/A02_frontend|A02_ProgDetail]] +6단계 워크플로우 시각화 + 핵심 기술 소개. Hero + 배지번호 리스트 + 카드그리드. stable. + +### [[A03_CompDetail/A03_frontend|A03_CompDetail]] +회사 미션·핵심가치·연락처. Hero + 본문 + 3개 가치 카드그리드 + 이메일. stable. + +### [[A04_NewsHistory/A04_frontend|A04_NewsHistory]] +최신소식 및 개선이력 타임라인. Hero + 태그+제목+날짜 행들. MOCK_HISTORY 데이터, 백엔드 미구현. stable. + +### [[A05_EduDetail/A05_frontend|A05_EduDetail]] +교육 과정 소개 + 문의 CTA. Hero + 3개 과정 카드그리드 + 문의 버튼. stable. + +### [[A06_Login/A06_backend|A06_Login]] +세션쿠키 로그인 + 신규브라우저/주기 OTP 재인증. `/api/auth` 5개 엔드포인트. backend·frontend 상세. stable. + +### [[A07_Register/A07_backend|A07_Register]] +회원가입 2단계(요청→OTP)+회사검색. 약관 아코디언, NO_COMPANY로 완료. ⚠️UI_Page.ts 구버전 잔재. stable. + +### [[A08_Support/A08_backend|A08_Support]] +기술지원 문의(비로그인 가능). `support_requests` 저장+관리자 메일. ⚠️DB 컬럼 계획서와 불일치. stable. + +### [[A09_Security/A09_backend|A09_Security]] +백엔드: 마스터/시스템관리자 조직·회원·가입승인·활동로그 API(`/api/security`). 프론트: 약관 열람만. ⚠️API 클라이언트 미연동. stable. + +## 개념 (Concepts) + +### [[a00_app_shell_framework]] +모든 페이지의 공통 스켈레톤. 헤더(로고/네비/언어·테마/인증), 아울렛, 푸터 + 라우터 + B그룹 스캐폴드. + +### [[a00_app_shell_framework_scaffold]] +App Shell Framework의 세부 스캐폴드, CSS 인젝션 구조, 외부 라이브러리 및 사용처 매핑. + +### [[ui_templates]] +다국어 관리(i18n [한국어, 영어]), 공통 컴포넌트(버튼/카드/태그/워크플로우셸), theme.css 변수. + +### DB 스키마 +- [[db_schema/overview]] — 34개 테이블 확정; workflow 상태 및 system_admin_logs 용도 분석 완료. +- [[db_schema/users_auth]] — users/companies/sessions/email_otps/trusted_devices/join_requests/user_consents +- [[db_schema/logs_monitoring]] — login_logs/activity_logs/audit_logs/system_audit_logs/system_admin_logs/system_resources/support_requests/change_logs +- [[db_schema/projects]] — projects/project_versions/project_automations +- [[db_schema/files_surface]] — upload_sessions/upload_chunks/input_files/processed_point_cloud/surface_models/terrain_layers +- [[db_schema/route_profile]] — routes/route_points/route_statistics/longitudinal_sections/cross_sections +- [[db_schema/structure_output]] — structures/quantity_items/outputs/output_files +- [[db_schema/unconfirmed/README]] — 미확정/미연동 테이블 격리 및 임시 분석 보관소 + +### [[auth_rbac]] +세션쿠키 인증, OTP, 3역할 RBAC 접근표, 권한헬퍼 5종, 사용자 상태 생명주기. + +### [[storage_paths]] +B03~B09 워크플로우 기반 storage/ 경로 패턴, DB 경로컬럼 매핑, 경로 생성 책임 분리 원칙. + +### [[common_util]] +common_util_* 11개 파일 목록과 역할 (auth/storage/email/resource_monitor/**workflow_state** 등). + +### API 공통 (여러 페이지가 공유하는 엔드포인트) +- [[api_common]] — 공통 오류포맷, workflow-state API(✅구현·실사용 확인) + +### 의존성 (여러 페이지가 공유하는 외부 라이브러리) +- [[dependencies]] — Trimesh/Whitebox/Geopandas/Shapely/Rasterio/Laspy/aiomysql 사용처 매핑 + +### 공통 스키마 (Pydantic 요청/응답 모델) +- [[schema_common]] — 공통 에러 포맷 `{"status":"error","message":...}`. 페이지 간 공유 모델은 미발견. + +### Workflow 상태 관리 +- [[workflow_state]] — B01~B06 연동 확인, `project_workflow_stages` SSOT·stale 전파. B04 폴백은 레거시 안전장치. + +## ⚠️ 미해결 항목 +- `raw/guidelines/design.md`는 "Wiza"(보라색 SaaS 프로덕트) 스타일 가이드로 Aislo와 무관해 보여 **ingest하지 않음** — 잘못 들어온 파일인지 확인 필요 +- `B04_wf1_Surface_Router.py:412-427` — `projects.status` 문자열 비교(416 WF1_COMPLETE, 420 WF1_ANALYZING)는 **구형 잔재가 아니라 project_workflow_stages 부재 시 레거시 폴백**(백필 안전장치). SSOT 안정화 후 제거 가능 → [[B04_wf1_Surface/B04_backend]] +- `B04_wf1_Surface_Router.py:76` `update_project_status()` — 정의만, 호출처 없음(죽은 코드) → 정리 권장 +- B07~B09는 실 코드 상 아직 미착수 또는 셸만 존재 (B02는 backend 확인·반영 완료, B04도 이번에 5분할 상세화 완료) + +### A그룹 인제스트 이슈 +- 세션·OTP 정책 불일치, support_requests 컬럼 불일치, A07/A09 구버전 코드가 발견됨. 상세는 각 페이지와 [[auth_rbac]] 참조. +- **support_requests 컬럼 불일치**: [[db_schema/logs_monitoring]] 계획서(user_id/title/priority/status) vs 실 코드([[A08_Support/A08_backend]] INSERT: company_id/company_name/user_name/user_email/user_phone/subject/message). → 실 DB 대조 필요 +- **미사용/구버전 코드 2건**: `A07_Register_UI_Page.ts`(구버전 잔재, 라우터는 UI_Auth_Page 사용), `A09_Security_Api_Fetch.ts`(마스터/관리자 8함수 정의만, 미연동) — 정리 권장 diff --git a/docs/wiki/log.md b/docs/wiki/log.md new file mode 100644 index 0000000..bbb9b92 --- /dev/null +++ b/docs/wiki/log.md @@ -0,0 +1,330 @@ +# Wiki Log + +> append-only. 형식: `## [YYYY-MM-DD] 오퍼레이션 | 제목` — 오퍼레이션은 ingest / query / lint 중 하나. +> 최근 항목 확인: `grep "^## \[" log.md | tail -5` + +## [2026-07-12] lint | 구형 상위 폴더 탈출 링크(../../concepts/) 전수 정밀 교정 +- **Lint**: 위키 페이지들 간의 연결성을 정밀 분석한 결과, 병행 작업자가 작성해둔 구버전 db.md 파일들(`B01_db`, `B03_db`, `B05_db`, `B06_db`, `B08_db`)에서 개념 문서(db_schema, storage_paths 등)를 참조할 때 Obsidian 호환성을 저해하는 부적절한 상위 폴더 탈출 표기법 (`[[../../concepts/...]]`)을 무작위로 혼용하고 있음을 적발함. +- **조치 및 개선**: 검출된 9건의 부적절한 상대 링크들을 공식 표준 규격인 `[[db_schema/...]]` 및 `[[storage_paths]]` 등의 깔끔한 볼트 루트 기준 상대경로로 일제히 교정 완료함. + +## [2026-07-12] lint | 5회 반복 린트-개선 사이클 수행 및 위키 메타 정보 정밀 보완 +- **Lint & 개선 1차**: `concepts/a00_app_shell_framework.md` 및 `concepts/ui_templates.md`에 `source` 메타데이터 필드가 누락되어 있음을 식별, 각각 `source: A00_Common 공유 프레임워크 소스 코드` 및 `source: ui_template/ 공통 UI 소스 코드 및 스타일시트`를 추가 정비함. +- **Lint 2차**: 개별 페이지 `pages/` 하위 마크다운 파일들의 `page_id` 메타데이터 누락 여부를 전수 린트한 결과, 100% 정상 준수하고 있음을 교차 확인. (조치 사항 없음) +- **Lint & 개선 3차**: `concepts/dependencies.md`에 외부 라이브러리 `NumPy`가 중복으로 기재되어 있음을 발견, 하나의 통합된 행으로 병합 및 사용처(`B03`, `B05`) 역참조를 단일 셀로 통합 완료. +- **Lint & 개선 4차**: `concepts/storage_paths.md`의 `related_pages` 속성에 신규 프로젝트 생성 및 스키마 시드를 책임지는 `[[B02_ProjRegister/B02_backend]]` 링크가 빠져 있음을 감지하여 추가 정비함. +- **Lint & 개선 5차**: `concepts/workflow_state.md`의 `related_pages`에 워크플로우 진행 상태에 연관된 B07~B09 단계 파일 링크가 누락된 것을 감지, `[[B07_wf4_DesignDetail/B07_frontend]]`, `[[B08_wf5_Quantity/B08_frontend]]`, `[[B09_wf6_Estimation/B09_frontend]]`를 추가 보완함. + +## [2026-07-12] ingest | DB 34개 테이블 전수 컬럼 실측 및 위키 최신화 +- **DB 스키마 정밀 추출**: PyMySQL을 사용하는 파이썬 스크립트를 작성하여 로컬 `.env` 환경 정보를 바탕으로 `aislo_db` 내 실제 존재하는 34개 테이블의 모든 컬럼 정보(Field, Type, Null, Key, Default, Extra)를 알파벳 순으로 전수 정밀 추출 완료. +- **위키 최신화**: + - `db_schema/users_auth.md` (7개 테이블), `db_schema/logs_monitoring.md` (8개 테이블), `db_schema/projects.md` (3개 테이블), `db_schema/files_surface.md` (6개 테이블), `db_schema/route_profile.md` (5개 테이블), `db_schema/structure_output.md` (4개 테이블) 총 6개 위키 문서에 누락 및 생략되어 있던 실제 DB 컬럼들의 세부 스펙을 100% 매핑하여 최신화 완료. + - 100줄 제한 규칙(규칙 14)을 준수하기 위해 표 및 설명 문구들을 조밀하게 압축하고 정리함. +- **미해결 부채 청산**: + - `system_admin_logs` 테이블의 용도 분석을 통해 SYSTEM_ADMIN의 회원/조직 상태 변경 감사 이력 Write-Only용임을 확인 및 명세화. + - `db_schema/overview.md` 및 `index.md` 내에 기재된 `system_admin_logs 용도 미상` 경고 bullet 및 미해결 항목을 해결됨 상태로 최종 정정 완료. +- **미확정/연결 대기 테이블 관리 규칙 도입**: + - 향후 신규 추가되거나 프로젝트 비즈니스 로직(사용처)이 불명확한 테이블을 안전하게 격리하고 관리할 수 있도록 `db_schema/unconfirmed/` 디렉토리를 신설하고 [README.md](file:///C:/Program_coding/임도설계 및 견적자동화 프로그램 개발/docs/wiki/concepts/db_schema/unconfirmed/README.md)에 운영 가이드라인을 정의함. + - `db_schema/overview.md`에 미확정 그룹 앵커 링크(`[[unconfirmed/README]]`) 및 격리 관리 원칙을 명문화하여 지식 시스템을 완성함. +- **Lint 조치**: 신설된 `unconfirmed/README.md`가 위키 규칙 2번(페이지 생성 시 index.md 반영)을 충족하도록 [index.md](file:///C:/Program_coding/임도설계 및 견적자동화 프로그램 개발/docs/wiki/index.md)에 링크 및 한 줄 명세를 연동 보완함. + +## [2026-07-12] ingest+lint | 3회 반복 린트-개선 사이클 수행 및 위키 무결성 확보 +- **Ingest**: `docs/raw/plans/2026-07-12_plan_add_phase4_role.md` 및 `docs/raw/verification/2026-07-12_verify_add_phase4_role.md`를 기반으로, 루트 폴더의 `AGENTS.md`에 `#### 역할 4: 기타 작업자 (위키 관리 / 작업 보조)`가 정상 추가 및 검증 완료되었음을 확인 및 반영. +- **Lint & 개선 1차**: `concepts/ui_templates.md` 전수 점검. 규칙 13(공유 자원 표 형식 준수)에 위배되는 서술식 다국어 텍스트 기능 설명 및 `theme.css` 색상/마진 변수 나열 항목을 색출하여 `항목 | 위치 | 역할` 형태의 표 포맷으로 전면 개선 완료. +- **Lint & 개선 2차**: `A08_Support/A08_backend.md`에서 `db_schema/logs_monitoring.md` 내에 실존하지 않는 `#support_requests` 세부 앵커를 가리키는 깨진 앵커 링크 2건을 색출하여 `[[db_schema/logs_monitoring]]`으로 개선(단순화) 완료. +- **Lint & 개선 3차**: `storage_paths.md`에 기술된 물리 저장소 경로 패턴 및 세션/이메일 세부 규칙을 백엔드 설정 코드(`config_system.py`, `common_util_storage.py`)와 전수 교차 대조하여, 수치(유효시간 12h/4h, OTP 5분, 재인증 90일, 재시도 3회) 및 폴더 레이아웃이 100% 정합함을 확인. 추가 수정 없음. + +## [2026-07-12] ingest | B09_wf6_Estimation (실 코드 대조, 미착수 확인) +- 대상: B09_wf6_Estimation_UI_Page.ts(27줄, 유일한 소스 파일) +- **기존 파일 정리**: 구 파일명 frontend.md(draft) 삭제 → B09_frontend.md 재작성(stable) +- **실 코드 대조 결과**: 기존 wiki 내용이 이미 정확함 — B07/B08과 동일 패턴, `renderPendingWorkflow()`만 호출, 백엔드 파일 없음 +- **raw 근거 재확인**: `structure.md:177-178`도 B09를 "워크플로우 셸"로만 기술 — 실 코드와 일치, 모순 없음 +- **로케일 키 검증**: B09_Estimation_Title(714) 실 파일 등록 확인 +- storage_paths.md에 B09 이미 related_pages 등록 확인(v1/v2 버전 관리는 이 단계에서만, 20줄), structure_output.md에도 outputs/output_files 사용처 등록 확인 — 둘 다 수정 불필요 +- index.md B09 링크 `[[B09_wf6_Estimation/frontend]]` → `[[B09_wf6_Estimation/B09_frontend]]` 갱신 +- 결론: B07/B08/B09 workflow 셸 3종 전부 wiki 반영 완료. B01/B03/B05/B06(병행 작업자)까지 포함하면 B01~B09 전 페이지 wiki 존재 확인 +- 주: B01/B03/B05/B06/B08은 병행 작업자가 진행/완료해 건드리지 않음 + +## [2026-07-12] ingest | B07_wf4_DesignDetail (실 코드 대조, 미착수 확인) +- 대상: B07_wf4_DesignDetail_UI_Page.ts(27줄, 유일한 소스 파일) +- **기존 파일 정리**: 구 파일명 frontend.md(draft) 삭제 → B07_frontend.md 재작성(stable) +- **실 코드 대조 결과**: 기존 wiki 내용이 이미 정확함 — `renderPendingWorkflow()`만 호출하는 셸, 백엔드 파일 자체 없음 +- **raw 근거 재확인**: `migration_plan.md:271` "B07 이후 기능은 이번 마이그레이션 범위에서 제외한다" — 계획 단계에서 명시적 제외, structure.md:173-174도 셸로만 기술. 실 코드·raw 문서·기존 wiki 3자 일치(모순 없음) +- **로케일 키 검증**: B07_Design_Title(708) 실 파일 등록 확인 +- structure_output.md에 B07 이미 related_pages·사용처 등록 확인(structures 테이블, 수정 불필요) +- index.md B07 링크 `[[B07_wf4_DesignDetail/frontend]]` → `[[B07_wf4_DesignDetail/B07_frontend]]` 갱신, "계획적 미착수" 근거 명시 +- 주: B01/B03/B05/B06은 병행 작업자가 계속 진행 중이라 건드리지 않음 + +## [2026-07-12] ingest | B04_wf1_Surface (실 코드 대조·5분할 상세화) +- 대상: Router(739줄), Schema(113줄), Repository(236줄), Engine(161줄)+엔진 서브모듈 14개, UI_Page(377줄), UI_Viewer(567줄), UI_TerrainViewer(637줄), Api_Fetch(174줄) 등 23개 파일 +- **기존 파일 정리**: 구 파일명 계획서기반 4개(backend/frontend/db/api, api·db·frontend는 draft·"추정 경로") 삭제 → B04_backend/B04_frontend/B04_api/B04_db/B04_dependencies.md 5분할 상세 재작성(전부 stable) +- **⚠️ 중요 정정 3건 (계획서 → 실 코드)**: + 1. **API**: api.md는 "추정 경로 2개(surface/analyze·models)"였으나 실제 `/api/projects` prefix 12개 엔드포인트. 전부 실 위치 표로 기록 + 2. **3D 뷰어**: 계획서·dependencies "WebCAD 3D 뷰어 미구현"이었으나 실 코드에 **three.js(WebGL) 뷰어 구현됨** — UI_Viewer(포인트클라우드)+UI_TerrainViewer(지형 메시), UI_Page에서 import·사용 확인. dependencies.md에 three.js 추가+"미구현" 정정 + 3. **416/420줄 "구형 잔재"**: 잔재가 아니라 **레거시 폴백**(project_workflow_stages SSOT 우선, 부재 시에만 projects.status 비교, `:412-427`). index.md·workflow_state.md 정정 +- **추가 발견**: `update_project_status()`(`:76`) 정의만·호출처 없음(죽은 코드, grep 확인) → 미해결 항목 추가 +- **워크플로우 전이**: analyze에서 start_stage(168)/complete_stage(209)/fail_stage(227,233) stage 1 +- **역참조**: files_surface B04 이미 등록(구 링크 정정), dependencies·workflow_state 갱신 +- index.md B04 링크 갱신, 미해결 항목 정정. 엔진 서브모듈 15개는 backend.md에 표로 요약(과분할 방지) + +## [2026-07-12] ingest | B02_ProjRegister (backend + frontend + db 상세화) +- 대상: B02_ProjRegister_Router.py(44줄), B02_ProjRegister_Schema.py(30줄), B02_ProjRegister_Repository.py(136줄), B02_ProjRegister_UI_Page.ts(179줄), B02_ProjRegister_UI_Style.css(66줄) +- **기존 파일 정리**: 구 파일명 스텁 backend.md/db.md/frontend.md(요약 수준, 비표준 frontmatter, frontend/db는 draft) 삭제 → B02_backend/B02_frontend/B02_db.md 상세 재작성(전부 stable) +- 출력: + - `B02_backend.md` — `POST /api/b02/project`, create_project 트랜잭션(projects INSERT+initialize_project_stages 7단계 시드+system_audit_logs PROJECT_CREATE+저장소 초기화), Pydantic 2종, 저장소 경로 이탈 방지 + - `B02_frontend.md` — 등록 폼(2열 그리드, road_type select 4종), fetch 직접 호출, 성공 시 CURRENT_PROJECT_ID_KEY 저장 후 B03 이동 + - `B02_db.md` — 쓰는 테이블 3종(projects/project_workflow_stages/system_audit_logs) 용도+링크만(규칙11), 저장소 규칙 +- **로케일 키 검증**: B02_Proj_Title(487), B02_Proj_Field_RoadType(499), B02_Proj_RoadType_Stream(503), B02_Proj_Success(510) 등 실 파일 등록 확인 +- **역참조 갱신(규칙12)**: logs_monitoring.md system_audit_logs 섹션 제목 "B01 사용"→"사용처(B01,B02)"로 일반화 + B02 PROJECT_CREATE 행 추가. projects.md/workflow_state.md엔 B02 이미 등록됨 +- **발견 사항**: + - 계획서엔 "7단계 시드가 마이그레이션 Phase1 과제"였으나 실 코드에 이미 구현됨(규칙6 실코드 채택) + - projects INSERT 시 status 'NEW', crs_epsg 5178 고정 + - 프론트가 fetch 직접 호출(A08처럼 별도 API 클라이언트 없음) +- index.md B02 링크 `[[B02_ProjRegister/backend]]` → `[[B02_ProjRegister/B02_backend]]` 갱신 +- 주: B01은 병행 작업자가 진행 중이라 건드리지 않음(A07_backend 링크 등 B01발 자동 갱신은 반영됨) + +## [2026-07-12] query | B01_Dashboard 실 코드 기준 최신화 +- 상위 프로젝트 `B01_Dashboard/` 코드 9개를 읽기 전용으로 대조했다. +- 기존 `frontend.md`, `backend.md`를 규칙에 맞는 `B01_frontend.md`, `B01_backend.md`로 교체했다. +- API·DB·의존성을 `B01_api.md`, `B01_db.md`, `B01_dependencies.md`로 분리하고 코드 위치를 표로 기록했다. +- 실제 감사 테이블이 `system_audit_logs`임을 반영하고 workflow 조회의 미구현 표기를 바로잡았다. +- 관련 concepts와 `index.md`를 갱신했으며, 검증보고서가 없어 B01 상태는 `draft`로 유지했다. +- 기술부채로 UI Page 739줄과 Repository 790줄을 기록했다. + +## [2026-07-12] query | B03_FileInput 실 코드 기준 최신화 +- 상위 프로젝트 `B03_FileInput/` 코드 11개를 읽기 전용으로 대조했다. +- 기존 frontend/backend 문서를 `B03_frontend.md`, `B03_backend.md`로 교체했다. +- API·DB·의존성을 `B03_api.md`, `B03_db.md`, `B03_dependencies.md`로 분리했다. +- 일반·청크 업로드, LAS/TIF/PRJ/TFW 메타데이터 분석, WF0/WF1 상태 전이, 이메일 알림을 기록했다. +- `dependencies`, `db_schema/files_surface`, `index.md`를 실제 코드 기준으로 갱신했다. +- 검증보고서가 없어 B03 페이지 상태는 `draft`로 유지했다. +- 기술부채로 UI Page 695줄과 UI Style 376줄을 기록했다. + +## [2026-07-12] query | B05_wf2_Route 실 코드 기준 최신화 +- 상위 프로젝트 `B05_wf2_Route/` 코드 11개를 읽기 전용으로 대조했다. +- 기존 API/backend/db/frontend 문서를 `B05_api.md`, `B05_backend.md`, `B05_db.md`, `B05_frontend.md`로 교체했다. +- `B05_dependencies.md`를 추가해 Dijkstra·ridge-valley·skeleton·비용면 엔진과 의존성을 기록했다. +- 실제 API 경로와 RouteSolve 스키마, routes·route_points·route_statistics 저장 관계를 반영했다. +- `dependencies`, `index.md`를 실제 코드 기준으로 갱신했다. +- 검증보고서가 없어 B05 페이지 상태는 `draft`로 유지했다. +- 기술부채로 RidgeValley 781줄, Solver 654줄, WebCAD 뷰어 미구현을 기록했다. + +## [2026-07-12] query | B06_wf3_ProfileCross 실 코드 기준 최신화 +- 상위 프로젝트 `B06_wf3_ProfileCross/` 코드 9개를 읽기 전용으로 대조했다. +- 기존 backend/db/frontend 문서를 `B06_backend.md`, `B06_db.md`, `B06_frontend.md`로 교체했다. +- API·의존성을 `B06_api.md`, `B06_dependencies.md`로 분리했다. +- 확정 B05 경로 기반 종단·횡단 생성, DTM·보간 sampler, 측점·단면 샘플링, 재생성 삭제·저장·확정 흐름을 기록했다. +- 검증보고서가 없어 B06 페이지 상태는 `draft`로 유지했다. +- WebCAD 종단도·횡단 프로필 뷰어 미구현 상태를 기록했다. + +## [2026-07-12] query | B08_wf5_Quantity 실 코드 기준 최신화 +- 상위 프로젝트 `B08_wf5_Quantity/`에는 UI 파일 1개(25줄)만 존재함을 확인했다. +- 기존 `frontend.md`를 `B08_frontend.md`로 교체하고 workflow 셸의 실제 함수·locale·활성 단계 위치를 기록했다. +- 수량 계산 본문·Repository·Router/API·Pydantic 스키마가 아직 없음을 명시했다. +- 예정 DB 자원 `quantity_items`와 `quantity_data_path`를 `B08_db.md` 및 concepts 링크로 연결했다. +- `index.md`를 실제 구현 상태에 맞게 갱신했다. + +## [2026-07-12] lint | 전체 위키 구조·상태·공유 개념 정리 +- A/B 페이지의 누락된 `related_pages`를 보완하고 concepts의 관련 페이지 역참조를 추가했다. +- 검증보고서가 없는 stable 페이지를 draft로 조정해 status 규칙을 일관화했다. +- B05/B06 뷰어 상태, B03 구현 상태, workflow-state 실제 경로, legacy polling 문구를 갱신했다. +- 100줄 초과 문서인 A01과 A00 공통 개념을 하위 문서로 분리했다. +- index의 페이지 상태 표기를 페이지 frontmatter와 일치시켰다. +- 코드 파일은 수정하지 않았으며 `raw/`는 변경하지 않았다. + +## [2026-07-12] lint | 전체 위키 구조·상태·공유 개념 정리 +- A/B 페이지의 누락된 `related_pages`를 보완하고 concepts의 관련 페이지 역참조를 추가했다. +- 검증보고서가 없는 stable 페이지를 draft로 조정해 status 규칙을 일관화했다. +- B05/B06 뷰어 상태, B03 구현 상태, workflow-state 실제 경로, legacy polling 문구를 갱신했다. +- index의 페이지 상태 표기를 페이지 frontmatter와 일치시켰다. +- 코드 파일은 수정하지 않았으며 `raw/`는 변경하지 않았다. + +## [2026-07-12] lint | 위키 시스템 초기 세팅 +- raw/, wiki/, output/ 폴더 구조 생성 +- docs/CLAUDE.md에 Wiki Schema(위키 운영 규칙) 추가 +- 하위 CLAUDE.md 3개 생성 (raw/, wiki/, output/) +- wiki/index.md, wiki/log.md 초기화 (콘텐츠 없음, 카테고리 헤더만) +- 아직 raw/에 원본 없음 → 다음 단계는 첫 ingest 대기 + +## [2026-07-12] ingest | guidelines/plans 7건 일괄 반영 +- 대상: raw/guidelines/{structure,db_schema,backend,frontend,agent,migration_plan}.md, raw/plans/plan_workflow_state_management.md (7건). raw/guidelines/design.md는 Aislo와 무관한 "Wiza" 스타일가이드로 판단해 **ingest 제외**. +- concepts 신규 8건: db_schema/{overview,users_auth,logs_monitoring,projects,files_surface,route_profile,structure_output}, storage_paths, auth_rbac, common_util, dependencies, api_common, schema_common, workflow_state (총 14파일, db_schema는 34개 테이블을 9그룹→7파일+개요로 분할, 전부 100줄 이내) +- pages 신규: B01(backend/frontend), B02(frontend/db), B03(backend/frontend/db), B04(backend/frontend/db/api), B05(backend/frontend/db/api), B06(backend/frontend/db), B07~B09(frontend만, 셸 상태) +- 전부 status: stable (검증보고서 없음, 계획서·행동지침만 반영됨) +- 발견한 모순: 테이블 총 개수(db_schema.md 34 vs agent.md 18/23) — 미해결, [[db_schema/overview]]에 기록 +- 발견한 이슈: B03/B04 WF1 상태 이중 세팅, projects.status 단일문자열 한계 → [[workflow_state]]로 별도 정리 +- index.md 전체 갱신 (카테고리별 요약 + 미해결 항목 섹션 추가) + +## [2026-07-12] query+lint | 실 DB/실 코드 대조 검증 (읽기 전용) +- `.env` 자격증명으로 aislo_db에 read-only 접속(`SHOW TABLES`, `DESCRIBE`) — DB는 수정하지 않음 +- 테이블 개수 모순 해결: 실측 34개 = db_schema.md와 일치. agent.md(18/23)는 오기로 확정 → [[../concepts/db_schema/overview]] +- raw에 없던 실 테이블 2개 발견: `project_workflow_stages`(구현완료 확인) / `system_admin_logs`(용도 미상, 임의 해석 보류 — 사용자 확인 대기) +- `common_util_workflow_state.py`, B01~B06 라우터/리포지토리 실 코드 확인 → [[../concepts/workflow_state]] status: stable→**stable**로 갱신 (계획서 설계가 이미 전면 구현됨을 확인) +- B02_ProjRegister 백엔드(raw엔 없었음) 실 코드 확인 후 backend.md 신규 작성, status stable +- A01~A09(로그인 전 페이지) 카테고리 신규 추가, 실 코드 기반 15개 파일 작성 (전부 status stable, raw 문서 근거 부족은 각주로 표시) +- B04_wf1_Surface_Router.py:416,420에 구형 상태비교 잔재 발견, 미정리 항목으로 기록 +- index.md 전체 재구성 (A/B 페이지 분리, 미해결 항목 갱신) + +## [2026-07-12] lint | page_id frontmatter 필드 도입 +- 문제: `frontend.md`/`backend.md` 등은 파일명만으로 소속 페이지를 알 수 없음(폴더 밖에서 볼 때 구분 불가) +- docs/CLAUDE.md 위키 규칙 5번, wiki/CLAUDE.md에 `page_id: B0x_이름`/`A0x_이름` frontmatter 필수화 규칙 추가 (concepts 파일은 제외 — 페이지 단위가 아니므로) +- 기존 wiki/pages/ 하위 34개 파일 전체에 `page_id` 소급 추가 (status 라인 바로 아래) +- 향후 ingest 시 페이지 파일 생성할 때마다 이 필드 포함 필수 + +## [2026-07-12] ingest | A01_Home 실 코드 반영 +- 대상: A01_Home_UI_Page.ts (157줄), A01_Home_UI_Style.css (113줄) +- 출력: wiki/pages/A01_Home/frontend.md 상세 업데이트 (79줄 → 개념 설명 + 컴포넌트 분석 + 로케일 키 매핑 + CSS 클래스 구조 추가) +- 발견 사항: MOCK_NEWS 데이터 하드코딩(백엔드 미연결), 3개 공통 컴포넌트(createButton/createCard/createTag) 사용, theme.css 변수 엄격 준수, 반응형 900px 기준 +- 미해결: /api/a01/news 백엔드 미구현 +- 기존 내용 유지: status stable 유지, related_pages 확장 + +## [2026-07-12] refactor | 파일명 규칙 도입 및 링크 수정 +- **파일명 규칙 변경:** `frontend.md` → `A01_frontend.md` (page_id prefix 추가) +- **이유:** 그래픽 뷰에서 `frontend.md`, `backend.md` 등 기능명이 겹칠 때 page_id로 즉시 식별 가능하게 함 +- **적용 범위:** wiki/pages/A0x_이름/, wiki/pages/B0x_이름/ 하위 파일 모두 (신규 + 기존) +- **수정 파일:** `wiki/pages/A01_Home/frontend.md` → `A01_frontend.md`, index.md 링크 `[[A01_Home/frontend]]` → `[[A01_Home/A01_frontend]]` +- **docs/CLAUDE.md 규칙 5번, wiki/CLAUDE.md 작성규칙 수정** — 파일명 규칙 명시 +- 향후 ingest 시 신규 파일 생성할 때마다 page_id prefix 붙임 + +## [2026-07-12] lint | A그룹(A01~A09) 전체 검증 및 정합성 점검 +- 범위: A01~A09 wiki 페이지 13개 + 참조 concept(ui_templates/a00_app_shell_framework/auth_rbac/common_util/logs_monitoring 등) + index.md +- **검증 통과 항목**: + - 파일 100줄 제한: 전 파일 통과(최대 A01 76줄), 파일명 규칙(page_id prefix) 전부 준수 + - 위키링크 유효성: A그룹이 거는 링크 대상 전부 실존 확인(깨진 링크 0) + - 소스 커버리지: A01~A09 실 소스 파일 전부 wiki 반영 확인(A02~A05 frontend-only는 백엔드 소스 없어 정당) +- **발견·수정한 문제**: + 1. A02_frontend.md frontmatter에 비표준 `related_pages: []` 잔재 → 제거(A01 린트 때와 동일 유형) + 2. index.md 미해결 항목 섹션에 A그룹 발견 불일치 3건 누락 → "A그룹 인제스트 중 발견" 소섹션 추가(세션정책/support_requests컬럼/미사용코드) + 3. auth_rbac.md 역참조 누락(B01만 있고 A06/A07/A09 없음) → 사용처 섹션 + 계획서-실코드 불일치 소섹션 추가(규칙12) + 4. index.md A01 요약 톤 정리(다른 A페이지와 일관성, stable 명시) +- **기록만(수정 안 함)**: + - `[[B01_Dashboard/backend]]` 링크는 구 파일명(backend.md) 참조하나 파일 실존→깨진 링크 아님. B01 파일명 규칙 마이그레이션은 B그룹 작업 시 처리 + - common_util.md 사용처 "전 페이지/인증 관련"로 A그룹 포괄됨(세부 명시는 선택사항, 링크 유효) +- 결론: A그룹 인제스트 정합성 확보. 누적 불일치 3건은 index.md 미해결 항목에 집약(코드 수정은 사용자가 나중에) + +## [2026-07-12] ingest | A09_Security (backend + frontend 상세화) +- 대상: A09_Security_Router.py(123줄), A09_Security_Schema.py(25줄), A09_Security_UI_Page.ts(30줄), A09_Security_Terms.ts(16줄), A09_Security_Api_Fetch.ts(61줄), A09_Security_UI_Style.css(14줄) +- **기존 파일 정리**: 얕은 스텁 backend.md/frontend.md 삭제 → A09_backend.md/A09_frontend.md 상세 재작성 +- 출력: + - `A09_backend.md`(stable) — `/api/security` 9개 엔드포인트(마스터 5종 require_master, 시스템관리자 3종 require_system_admin, 활동로그 1종 verify_session), Pydantic 3종, psutil 리소스 계측 + - `A09_frontend.md`(stable) — 약관 열람 페이지(3섹션), Terms 데이터 표, 미사용 API 클라이언트 8함수 표 +- **로케일 키 검증**: A09_Security_Title(375), A09_Security_Version(376), A09_Security_Policy(379) 실 파일 등록 확인 +- **⚠️ 중요 발견 1 (프론트/백엔드 기능 불일치)**: UI_Page.ts는 약관 텍스트 열람만, Api_Fetch.ts(마스터/관리자 8함수)는 어디서도 import 안 됨(grep 확인). 백엔드 API는 완비, 프론트 연동 미완 → 양쪽 파일에 명시 +- **⚠️ 중요 발견 2 (약관-실코드 불일치)**: Terms.ts security 텍스트 "세션 12h/4h 만료"는 auth_rbac 계획서 기준, A06 실코드(auth_expires_at 3개월)와 다름. A06 불일치와 동일 뿌리 → 코드수정은 나중에(사용자 지시) +- **발견 사항**: + - 스텁엔 프론트가 "약관 동의 페이지"로 기술됐으나 실제론 동의 체크 없는 단순 열람(동의 흐름은 A07 회원가입에 있음) + - 백엔드는 B01_Dashboard 관리자 기능과 역할 중복 가능성 + - activity_logs INSERT: user_id/action_type/resource_id/status/details +- index.md A09 링크 `[[A09_Security/backend]]` → `[[A09_Security/A09_backend]]` 갱신 + +## [2026-07-12] ingest | A08_Support (backend + frontend 상세화) +- 대상: A08_Support_Router.py(68줄), A08_Support_Schema.py(13줄), A08_Support_UI_Page.ts(217줄), A08_Support_UI_Style.css(64줄) +- **기존 파일 정리**: 얕은 스텁 backend.md/frontend.md 삭제 → A08_backend.md/A08_frontend.md 상세 재작성 +- 출력: + - `A08_backend.md`(stable) — `POST /api/a08/support` 단일 엔드포인트, get_optional_session(비로그인 허용), support_requests INSERT + 관리자 알림 메일 + - `A08_frontend.md`(stable) — 문의 폼(textarea 자체 구현 createTextAreaField), 세션 자동 채움(fetchSessionUser), fetch 직접 호출(Api_Fetch 파일 없음) +- **로케일 키 검증**: A08_Support_Title(348), A08_Support_Field_Phone(357), A08_Support_Field_Message(361), A08_Support_Success(367) 실 파일 등록 확인 +- **⚠️ DB 스키마 불일치 발견**: `db_schema/logs_monitoring`의 support_requests 컬럼은 계획서 기준(user_id/title/priority/status)인데 실 코드 INSERT는 company_id/company_name/user_name/user_email/user_phone/subject/message → 컬럼명 다름. logs_monitoring.md에 양쪽 병기 + 사용처에 A08 추가, 실 DB 대조 필요(규칙6)로 표시 +- **발견 사항**: + - 비로그인도 문의 가능(get_optional_session), 로그인 시 회사 정보 자동 연결 + - textarea는 공통 컴포넌트에 없어 자체 구현 + - 프론트가 fetch를 직접 호출(별도 API 클라이언트 파일 없음) +- index.md A08 링크 `[[A08_Support/backend]]` → `[[A08_Support/A08_backend]]` 갱신 + +## [2026-07-12] ingest | A07_Register (backend + frontend 상세화) +- 대상: A07_Register_Router.py(76줄), A07_Register_Schema.py(30줄), A07_Register_UI_Auth_Page.ts(208줄), A07_Register_UI_Page.ts(142줄), A07_Register_Api_Fetch.ts(47줄), A07_Register_UI_Style.css(103줄) +- **기존 파일 정리**: A06와 동일하게 얕은 스텁 backend.md/frontend.md 삭제 → A07_backend.md/A07_frontend.md 상세 재작성 +- 출력: + - `A07_backend.md`(stable) — `/api/auth` 3종(companies·register/request·verify), Pydantic 2종, 2단계 가입 흐름(PENDING_EMAIL→NO_COMPANY) + - `A07_frontend.md`(stable) — 약관 아코디언, 2단계 폼(정보입력→OTP), API 클라이언트 3함수 +- **로케일 키 검증**: A07_Register_Field_Otp(340), A07_Register_Verify(341), A07_Register_OtpSent(342), A07_Register_Marketing(336) 실 파일 등록 확인 +- **⚠️ 중요 발견**: A07에 UI 파일이 2개 — `A07_Register_UI_Auth_Page.ts`(실사용, router.ts:30이 import)와 `A07_Register_UI_Page.ts`(백엔드 미연동 TODO, 단순 폼). 후자는 **구버전 잔재**로 판단, 두 파일 모두 `renderA07Register` export하나 라우터는 Auth_Page만 사용 → frontend.md에 명시하고 정리 권장 +- **발견 사항**: + - 가입은 회사 없이 완료(NO_COMPANY), 회사 생성/연결은 로그인 후 B01_Dashboard에서 진행 + - 회사검색 API(searchCompanies)는 자동완성용 + - 약관 본문은 resources/legal/*.txt에서 fetch + - terms_version "1.0" 프론트 하드코딩 +- index.md A07 링크 `[[A07_Register/backend]]` → `[[A07_Register/A07_backend]]` 갱신 + +## [2026-07-12] ingest | A06_Login (backend + frontend 상세화) +- 대상: A06_Login_Router.py(179줄), A06_Login_Schema.py(20줄), A06_Login_UI_Auth_Page.ts(80줄), A06_Login_Api_Fetch.ts(57줄), A06_Login_UI_Style.css(52줄) +- **기존 파일 정리**: `backend.md`/`frontend.md`(초기 세팅 시 얕은 스텁, 비표준 frontmatter `type`/`source`/`related_pages` 포함) → 삭제하고 규칙에 맞는 `A06_backend.md`/`A06_frontend.md`로 상세 재작성 +- 출력: + - `A06_backend.md`(stable) — `/api/auth` 엔드포인트 5종 표(login/request·verify·session·logout·password), 내부헬퍼 3종, Pydantic 3종, 로그인 흐름, 보안정책 + - `A06_frontend.md`(stable) — 2단계 폼(비번→OTP 전환), API 클라이언트 5함수, 로케일 키, 이벤트 핸들러 +- **로케일 키 검증**: A06_Login_Title(124), A06_Login_Field_Otp(288), A06_Login_Verify(290), A06_Login_OtpSent(291) 등 실 파일 등록 확인 +- **발견 사항**: + - OTP는 "신규 브라우저 OR 주기적 재인증(EMAIL_REVERIFY_DAYS 경과)" 조건에서만 요구 (매 로그인 아님) + - `_finish_login`에서 `auth_expires_at = NOW() + 3개월` 갱신, 브라우저 신뢰 등록 + - 5회 연속 실패 시 ADMIN_EMAIL로 보안 경고 메일 + - `fetchSession`/`fetchSessionUser`/`logout`은 app_shell과 공유 +- **⚠️ 불일치 기록**: [[auth_rbac]]는 계획서 기준(OTP 5분·재시도 3회·세션 4h/12h·15분 잠금)인데 실 코드와 다름 → 규칙6에 따라 auth_rbac 갱신 대상으로 A06_backend.md에 명시(별도 처리 필요) +- index.md A06 링크 `[[A06_Login/backend]]` → `[[A06_Login/A06_backend]]` 갱신 + +## [2026-07-12] lint | A03~A05 인제스트 재점검 +- 대상: A03/A04/A05 frontend.md + concepts/ui_templates.md +- **줄번호 대조**: 실 코드와 전부 일치 확인 (A03 buildHero 23-41 등, A04 buildTimeline 70-106, A05 onClick 26-28 등) +- **로케일 키 검증**: A03_CompDetail_Contact_Email(238), A04_NewsHistory_Empty(249), A05_EduDetail_Cta(273) 등 실 파일에 등록 확인 +- **발견/수정한 문제**: + 1. 규칙13 위반: A03~A05 컴포넌트 섹션이 서술식 불릿 → 표 형식(함수|위치|역할)으로 전환, renderAxx 진입점 함수 누락분 추가 + 2. ui_templates.md 컴포넌트 목록 부정확: createButton variant 3종→4종(danger 추가), createTag variant 5종·기본값 neutral 명시, 누락 컴포넌트 6종(createInputField/createSelectField/showLoadingOverlay/hideLoadingOverlay/showToast/createLineChart/injectBaseStyles) 표로 보완 + 3. 깨진 위키링크 `[[A00_Common/app_shell_framework]]` → `[[a00_app_shell_framework]]`로 수정(ui_templates.md 2곳) + 4. ui_templates.md 사용처 역참조에 A03/A04/A05 추가 +- ui_templates.md 91줄(100줄 제한 이내 유지) + +## [2026-07-12] ingest | A05_EduDetail +- 대상: A05_EduDetail_UI_Page.ts (106줄), A05_EduDetail_UI_Style.css (87줄) +- 출력: `wiki/pages/A05_EduDetail/A05_frontend.md` (stable) +- 발견 사항: + - Hero + 3개 교육 과정 카드그리드 + CTA 버튼 레이아웃 + - createButton, createCard 공통 컴포넌트 사용 + - `onA05_EduDetail_Inquiry_Click()` → A08_SUPPORT 라우트로 이동 + - theme.css 변수 엄격 준수 +- index.md 업데이트 (A05 분리) + +## [2026-07-12] ingest | A04_NewsHistory +- 대상: A04_NewsHistory_UI_Page.ts (117줄), A04_NewsHistory_UI_Style.css (87줄) +- 출력: `wiki/pages/A04_NewsHistory/A04_frontend.md` (stable) +- 발견 사항: + - MOCK_HISTORY 데이터: feature/fix/notice 3종 태그 + 날짜 + - KIND_META 맵핑으로 variant 자동 결정 + - createTag 공통 컴포넌트 사용 + - 빈 상태(empty) 처리 구현 + - 백엔드 API 미구현: GET /api/a04/history (코드 주석에 언급) +- index.md 업데이트 (A04 분리) + +## [2026-07-12] ingest | A03_CompDetail +- 대상: A03_CompDetail_UI_Page.ts (114줄), A03_CompDetail_UI_Style.css (100줄) +- 출력: `wiki/pages/A03_CompDetail/A03_frontend.md` (stable) +- 발견 사항: + - A02와 동일 패턴(Hero + 섹션 + 3열 카드그리드) + - createCard 공통 컴포넌트 사용 + - 3개 가치 카드 (Value1~3) + 연락처 이메일 + - theme.css 변수 엄격 준수 +- index.md 업데이트 (A03 분리) + +## [2026-07-12] lint | A01_Home 페이지 검사 및 수정 +- 대상: `wiki/pages/A01_Home/A01_frontend.md` +- 발견 사항: + - frontmatter에 비표준 필드 `type: page-frontend` 존재 → 제거 (규칙에는 status/page_id/last_updated만) + - related_pages 배열 형식 오류 → 제거 (위키링크는 본문에만 사용) + - 의존성 링크 `[[ui_template_locale]]`, `[[ui_template_elements]]` 오류 → concepts 페이지 부재 +- 해결: + - frontmatter 정제 (status/page_id/last_updated만 유지) + - 새 concepts 페이지 `ui_templates.md` 신규 생성 (locale + elements + theme 통합, 사용처 역참조 포함) + - 의존성 섹션 링크 수정: [[ui_templates]]로 통합 + - index.md에 ui_templates 추가 +- status: stable 유지 (실 코드 반영 완료) + +## [2026-07-12] ingest | A02_ProgDetail + A00_Common Framework +- 대상: A02_ProgDetail_UI_Page.ts (146줄), A02_ProgDetail_UI_Style.css (127줄) + A00_Common (app_shell.ts 284줄, b_page_scaffold.ts 163줄, router.ts 158줄) +- 출력: + - `wiki/pages/A02_ProgDetail/A02_frontend.md` (신규) — 컴포넌트 분석 + 로케일 키 + CSS 클래스 + 이벤트 + - `wiki/concepts/a00_app_shell_framework.md` (신규) — 공유 프레임워크(전체 페이지의 헤더·라우터·가드) +- 발견 사항: + - A02는 단순 정적 페이지(Hero + Workflow 배지 + Tech 카드) + - A00_Common는 전체 앱의 스켈레톤—모든 페이지가 의존하는 공유 레이어 + - `renderShell()` + `injectShellStyles()` 로직으로 헤더/아울렛/푸터 통합 관리 + - 라우터 테이블에 A01~A09, B01~B11 (22개 라우트) 모두 등록됨 (B10_Payment, B11_Status 신규 발견) + - 워크플로우 라우트(B02~B11)에 대한 추가 인증 가드 구현 (company_id 검증) +- index.md 업데이트 (A02 분리, concepts에 a00_app_shell_framework 추가) +- status: both stable (실 코드 구현 완료 확인) diff --git a/docs/wiki/pages/A01_Home/A01_components.md b/docs/wiki/pages/A01_Home/A01_components.md new file mode 100644 index 0000000..38bd88f --- /dev/null +++ b/docs/wiki/pages/A01_Home/A01_components.md @@ -0,0 +1,37 @@ +--- +type: page-frontend-detail +status: stable +page_id: A01_Home +related_pages: ["[[A01_Home/A01_frontend]]", "[[ui_templates]]", "[[a00_app_shell_framework]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 A01_Home 코드 인제스트 보완 (2026-07-12) +--- + +# A01_Home — 세부 구현 + +## 스타일 +| 항목 | 역할 | +|---|---| +| `.a01-home`, `.a01-hero` | 페이지 래퍼·히어로 배경 | +| `.a01-news-list`, `.a01-news-row` | 뉴스 목록과 행 레이아웃 | +| `.a01-feature-grid`, `.a01-feature-card` | 3열 기능 카드 그리드 | +| 900px 이하 | 기능 그리드 1열·히어로 제목 축소 | + +## 의존성 +| 항목 | 역할 | +|---|---| +| [[a00_app_shell_framework]] | `navigateTo()` 라우팅 | +| `config_frontend.ts` | `ROUTES` 상수 | +| [[ui_templates]] | 공통 버튼·카드·태그·다국어 | + +## 데이터 흐름 +| 단계 | 흐름 | +|---|---| +| 1 | `renderA01Home(root)` → `buildHero()`·`buildNews()`·`buildFeatures()` | +| 2 | `buildNews()`는 현재 `MOCK_NEWS` 사용 | +| 3 | CTA 클릭 → A07_Register 또는 A02_ProgDetail 이동 | + +## 미해결 +| 항목 | 상태 | +|---|---| +| `GET /api/a01/news` | 백엔드 미구현; 현재 뉴스는 하드코딩 | diff --git a/docs/wiki/pages/A01_Home/A01_frontend.md b/docs/wiki/pages/A01_Home/A01_frontend.md new file mode 100644 index 0000000..56558e1 --- /dev/null +++ b/docs/wiki/pages/A01_Home/A01_frontend.md @@ -0,0 +1,60 @@ +--- +status: stable +page_id: A01_Home +related_pages: ["[[A02_ProgDetail/A02_frontend]]", "[[A04_NewsHistory/A04_frontend]]", "[[a00_app_shell_framework]]", "[[ui_templates]]"] +last_updated: 2026-07-12 +--- + +# A01_Home — Frontend + +로그인 전 01: 홈 페이지. 소개 히어로 + 최신 소식 + 주요 기능 3가지를 showcase하는 정적 소개 페이지. 백엔드 없음. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A01_Home_UI_Page.ts` | `A01_Home/A01_Home_UI_Page.ts:1-157` | 페이지 렌더링 로직 | +| `A01_Home_UI_Style.css` | `A01_Home/A01_Home_UI_Style.css:1-113` | 스타일 (theme.css 변수만 사용) | + +## 컴포넌트 + +### Hero 섹션 +- **함수:** `buildHero()` (A01_Home_UI_Page.ts:52-85) +- **구성:** 제목 + 부제목 + 2개 CTA 버튼 (회원가입/프로그램 상세) +- **색상:** 라벤더 그라디언트 배경 (`--color-mist-violet` → `--color-canvas`) + +### 최신 소식 섹션 +- **함수:** `buildNews()` (A01_Home_UI_Page.ts:87-116) +- **데이터:** MOCK_NEWS 배열 (A01_Home_UI_Page.ts:32-36, 백엔드 연결 전) +- **각 항목:** 태그 + 뉴스 제목 + 날짜 + +### 주요 기능 섹션 +- **함수:** `buildFeatures()` (A01_Home_UI_Page.ts:118-146) +- **레이아웃:** 3열 그리드 (반응형: 900px 이하 1열) +- **카드:** createCard 공통 컴포넌트 사용 + +## 이벤트 핸들러 + +| 함수 | 위치 | 동작 | +|---|---|---| +| `onA01_Home_GetStarted_Click()` | A01_Home_UI_Page.ts:41-43 | 회원가입(A07_REGISTER) 이동 | +| `onA01_Home_Explore_Click()` | A01_Home_UI_Page.ts:45-47 | 프로그램 상세(A02_PROG_DETAIL) 이동 | + +## 로컬라이제이션 + +모든 텍스트는 `ui_locales[key][currentLanguageIndex]` 형식으로 [[ui_templates]] 에서 로드. +하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목 | `A01_Home_Title` | +| 히어로 부제목 | `A01_Home_Hero_Subtitle` | +| CTA 버튼 (Primary/Secondary) | `A01_Home_Hero_CtaPrimary`, `A01_Home_Hero_CtaSecondary` | +| 소식 섹션 제목 | `A01_Home_News_SectionTitle` | +| 소식 태그 | `A01_Home_News_Tag` | +| 기능 섹션 제목 | `A01_Home_Features_SectionTitle` | +| 기능 카드 1~3 | `A01_Home_Feature{1..3}_Title`, `A01_Home_Feature{1..3}_Desc` | + +## 세부 구현 + +스타일 구조·의존성·데이터 흐름·미해결 사항은 [[A01_Home/A01_components]]에 분리했다. diff --git a/docs/wiki/pages/A02_ProgDetail/A02_components.md b/docs/wiki/pages/A02_ProgDetail/A02_components.md new file mode 100644 index 0000000..6895d8e --- /dev/null +++ b/docs/wiki/pages/A02_ProgDetail/A02_components.md @@ -0,0 +1,38 @@ +--- +type: page-frontend-detail +status: stable +page_id: A02_ProgDetail +related_pages: ["[[A02_ProgDetail/A02_frontend]]", "[[ui_templates]]", "[[a00_app_shell_framework]]"] +last_updated: 2026-07-12 +source: A02_ProgDetail 코드 인제스트 보완 및 구조화 일관성 적용 +--- + +# A02_ProgDetail — 세부 구현 + +## 스타일 (CSS) +| 항목 | 역할 | +|---|---| +| `.a02-prog-detail` | 페이지 루트 컨테이너 (gap: section-gap, padding-bottom: spacing-64) | +| `.a02-hero`, `.a02-hero__inner` | 히어로 영역 배경(라벤더 그라디언트) 및 콘텐츠 중앙 정렬 | +| `.a02-workflow-list`, `.a02-workflow-row` | 6단계 워크플로우 리스트(flex 열) 및 배지+텍스트 행 레이아웃 | +| `.a02-workflow-row__badge` | 40×40px 원형 배지 (primary 배경) | +| `.a02-tech-grid`, `.a02-tech-card` | 핵심 기술 소개 3열 카드 그리드 (900px 이하 대응) | + +## 의존성 +| 항목 | 역할 | +|---|---| +| [[a00_app_shell_framework]] | `navigateTo()` 라우팅 기능 활용 | +| `config_frontend.ts` | `ROUTES` 경로 상수 참조 | +| [[ui_templates]] | 공통 버튼(`createButton`) 및 카드(`createCard`) 엘리먼트 활용 | +| `ui_template_locale.ts` | 다국어 문구(`ui_locales`) 적용 | + +## 데이터 흐름 +| 단계 | 흐름 | +|---|---| +| 1 | `renderA02ProgDetail(root)` ➡️ `buildHero()` ➡️ `buildWorkflow()` ➡️ `buildTech()` 순서로 구성 요소를 렌더링하고 `root`에 추가 | +| 2 | 사용자가 히어로의 CTA 버튼 클릭 시 `onA02_ProgDetail_Start_Click()` 핸들러가 작동하여 `navigateTo(ROUTES.A07_REGISTER)` 호출 | + +## 미해결 / 특이사항 +| 항목 | 상태 | +|---|---| +| 정적 페이지 | 백엔드 API와의 연동이 필요 없는 완전한 정적 소개 페이지임 | diff --git a/docs/wiki/pages/A02_ProgDetail/A02_frontend.md b/docs/wiki/pages/A02_ProgDetail/A02_frontend.md new file mode 100644 index 0000000..77b0c21 --- /dev/null +++ b/docs/wiki/pages/A02_ProgDetail/A02_frontend.md @@ -0,0 +1,33 @@ +--- +status: stable +page_id: A02_ProgDetail +related_pages: ["[[A01_Home/A01_frontend]]", "[[a00_app_shell_framework]]", "[[ui_templates]]", "[[A02_ProgDetail/A02_components]]"] +last_updated: 2026-07-12 +--- + +# A02_ProgDetail — Frontend + +로그인 전 프로그램 상세 페이지. 6단계 워크플로우 시각화 + 핵심 기술 소개. + +## 구조 +- **경로**: `A02_ProgDetail/A02_ProgDetail_UI_Page.ts` (146줄) +- **스타일**: `A02_ProgDetail/A02_ProgDetail_UI_Style.css` (127줄) + +## 컴포넌트 분석 + +| 컴포넌트 | 역할 | 로케일 키 | +|---|---|---| +| `buildHero()` | 히어로 섹션(제목+부제+CTA) | `A02_ProgDetail_Title`, `A02_ProgDetail_Hero_Subtitle`, `A02_ProgDetail_Hero_Cta` | +| `buildWorkflow()` | 6단계 워크플로우 리스트(배지+텍스트) | `A02_ProgDetail_Workflow_SectionTitle`, `A02_ProgDetail_Step[1-6]_Title`, `A02_ProgDetail_Step[1-6]_Desc` | +| `buildTech()` | 기술 3종 카드 그리드 | `A02_ProgDetail_Tech_SectionTitle`, `A02_ProgDetail_Tech[1-3]_Title`, `A02_ProgDetail_Tech[1-3]_Desc` | + +## 제약 준수 + +- ✅ 모든 문구 `ui_template_locale.ts` 참조 +- ✅ 색상/간격 `theme.css` 변수만 사용 +- ✅ 공통 컴포넌트 `createButton`/`createCard` 사용 +- ✅ 이벤트 핸들러 명명 `on[페이지]_[기능]_[액션]` + +## 세부 구현 + +스타일 구조·의존성·데이터 흐름·특이사항은 [[A02_ProgDetail/A02_components]]에 분리했다. diff --git a/docs/wiki/pages/A03_CompDetail/A03_frontend.md b/docs/wiki/pages/A03_CompDetail/A03_frontend.md new file mode 100644 index 0000000..9028d0b --- /dev/null +++ b/docs/wiki/pages/A03_CompDetail/A03_frontend.md @@ -0,0 +1,67 @@ +--- +status: stable +page_id: A03_CompDetail +related_pages: ["[[a00_app_shell_framework]]", "[[ui_templates]]"] +last_updated: 2026-07-12 +--- + +# A03_CompDetail — Frontend + +로그인 전 회사 상세 페이지. 미션 + 핵심 가치 + 연락처. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A03_CompDetail_UI_Page.ts` | `A03_CompDetail/A03_CompDetail_UI_Page.ts:1-114` | 페이지 렌더링 로직 | +| `A03_CompDetail_UI_Style.css` | `A03_CompDetail/A03_CompDetail_UI_Style.css:1-100` | 스타일 (theme.css 변수만 사용) | + +## 컴포넌트 (섹션 빌더) + +| 함수 | 위치 | 역할 | +|---|---|---| +| `buildHero()` | `A03_CompDetail/A03_CompDetail_UI_Page.ts:23-41` | Hero(제목+부제목), mist-violet→canvas 그라디언트 | +| `buildMission()` | `A03_CompDetail/A03_CompDetail_UI_Page.ts:43-57` | 미션 섹션 제목+본문(중앙정렬, max 60자) | +| `buildValues()` | `A03_CompDetail/A03_CompDetail_UI_Page.ts:59-87` | 핵심가치 3열 카드그리드(createCard 3개) | +| `buildContact()` | `A03_CompDetail/A03_CompDetail_UI_Page.ts:89-103` | 연락처 섹션 제목+이메일 | +| `renderA03CompDetail()` | `A03_CompDetail/A03_CompDetail_UI_Page.ts:108-113` | 페이지 진입점(4개 섹션 조립) | + +## 로컬라이제이션 + +모든 텍스트는 `ui_locales[key][currentLanguageIndex]` 형식으로 [[ui_templates]]에서 로드. +하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목 | `A03_CompDetail_Title` | +| 히어로 부제목 | `A03_CompDetail_Hero_Subtitle` | +| 미션 섹션 제목 | `A03_CompDetail_Mission_SectionTitle` | +| 미션 본문 | `A03_CompDetail_Mission_Body` | +| 가치 섹션 제목 | `A03_CompDetail_Value_SectionTitle` | +| 가치 1~3 | `A03_CompDetail_Value{1..3}_Title`, `A03_CompDetail_Value{1..3}_Desc` | +| 연락처 섹션 제목 | `A03_CompDetail_Contact_SectionTitle` | +| 연락처 이메일 | `A03_CompDetail_Contact_Email` | + +## 스타일 (CSS) + +### CSS 클래스 구조 +- `.a03-comp-detail` — 페이지 래퍼 (flex column, gap: section-gap) +- `.a03-hero` — 그래디언트 배경 +- `.a03-hero__inner` — 중앙 정렬 컨테이너 +- `.a03-hero__title` — heading-lg, deep-iris, max 18자 +- `.a03-hero__subtitle` — body 텍스트, slate, max 56자 +- `.a03-section` — 공통 섹션 (max-width: page-max-width, padding: spacing-32) +- `.a03-section__title` — heading-sm, deep-iris, 중앙 정렬 +- `.a03-mission__body` — body, slate, 중앙 정렬, max 60자 +- `.a03-value-grid` — 3열 그리드 (gap: spacing-24) +- `.a03-value-card` — 카드 (min-height: 140px) +- `.a03-value__desc` — body-sm, slate +- `.a03-contact__email` — body, charcoal, 중앙 정렬 + +### 반응형 +- **900px 이하:** 가치 그리드 1열, 히어로 제목 폰트 축소 + +## 의존성 + +- [[a00_app_shell_framework]] — 공통 헤더·푸터 +- [[ui_templates]] — `createCard()` 공통 컴포넌트 + 다국어 diff --git a/docs/wiki/pages/A04_NewsHistory/A04_frontend.md b/docs/wiki/pages/A04_NewsHistory/A04_frontend.md new file mode 100644 index 0000000..4927c99 --- /dev/null +++ b/docs/wiki/pages/A04_NewsHistory/A04_frontend.md @@ -0,0 +1,86 @@ +--- +status: stable +page_id: A04_NewsHistory +related_pages: ["[[A01_Home/A01_frontend]]", "[[a00_app_shell_framework]]", "[[ui_templates]]"] +last_updated: 2026-07-12 +--- + +# A04_NewsHistory — Frontend + +로그인 전 최신 소식 및 개선 이력 페이지. 타임라인 목록 형태. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A04_NewsHistory_UI_Page.ts` | `A04_NewsHistory/A04_NewsHistory_UI_Page.ts:1-117` | 페이지 렌더링 로직 + Mock 데이터 | +| `A04_NewsHistory_UI_Style.css` | `A04_NewsHistory/A04_NewsHistory_UI_Style.css:1-87` | 스타일 (theme.css 변수만 사용) | + +## 컴포넌트 (섹션 빌더) + +| 함수 | 위치 | 역할 | +|---|---|---| +| `buildHero()` | `A04_NewsHistory/A04_NewsHistory_UI_Page.ts:50-68` | Hero(제목+부제목), mist-violet→canvas 그라디언트 | +| `buildTimeline()` | `A04_NewsHistory/A04_NewsHistory_UI_Page.ts:70-106` | 타임라인(태그+제목+날짜 행), 빈 상태 처리 | +| `renderA04NewsHistory()` | `A04_NewsHistory/A04_NewsHistory_UI_Page.ts:111-116` | 페이지 진입점(Hero+타임라인 조립) | + +- **데이터:** MOCK_HISTORY 배열 (A04_NewsHistory_UI_Page.ts:33-38, 백엔드 연결 전) — 추후 `GET /api/a04/history`로 교체 예정 +- **빈 상태:** MOCK_HISTORY.length === 0이면 `A04_NewsHistory_Empty` 로케일 키 표시 + +## Mock 데이터 구조 + +**타입:** +```typescript +type HistoryKind = "feature" | "fix" | "notice"; +interface HistoryItem { + id: number; + kind: HistoryKind; + title: string; + date: string; +} +``` + +**태그 변형 매핑** (KIND_META): +- `"feature"` → variant: "accent" → `A04_NewsHistory_Tag_Feature` +- `"fix"` → variant: "success" → `A04_NewsHistory_Tag_Fix` +- `"notice"` → variant: "neutral" → `A04_NewsHistory_Tag_Notice` + +## 로컬라이제이션 + +모든 텍스트는 `ui_locales[key][currentLanguageIndex]` 형식으로 [[ui_templates]]에서 로드. +하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목 | `A04_NewsHistory_Title` | +| 히어로 부제목 | `A04_NewsHistory_Hero_Subtitle` | +| 태그 라벨 (feature/fix/notice) | `A04_NewsHistory_Tag_Feature`, `A04_NewsHistory_Tag_Fix`, `A04_NewsHistory_Tag_Notice` | +| 빈 상태 메시지 | `A04_NewsHistory_Empty` | + +## 스타일 (CSS) + +### CSS 클래스 구조 +- `.a04-news-history` — 페이지 래퍼 (flex column, gap: section-gap) +- `.a04-hero` — 그래디언트 배경 +- `.a04-hero__inner` — 중앙 정렬 컨테이너 +- `.a04-hero__title` — heading-lg, deep-iris, max 18자 +- `.a04-hero__subtitle` — body 텍스트, slate, max 56자 +- `.a04-section` — 공통 섹션 (max-width: page-max-width, padding: spacing-32) +- `.a04-timeline` — flex 열 (gap: spacing-8) +- `.a04-timeline-row` — flex row, 태그+제목+날짜 (gap: spacing-16, padding: spacing-16 spacing-24) +- `.a04-timeline-row__title` — flex: 1, body-sm, charcoal +- `.a04-timeline-row__date` — caption, ash +- `.a04-timeline__empty` — 중앙 정렬, slate, body + +### 반응형 +- **900px 이하:** 히어로 제목 폰트 축소 + +## 의존성 + +- [[a00_app_shell_framework]] — 공통 헤더·푸터 +- [[ui_templates]] — `createTag()` 공통 컴포넌트 + 다국어 + +## 미해결 사항 + +- MOCK_HISTORY 데이터: 현재 하드코딩 (4개 항목) +- 백엔드 API 미구현: `GET /api/a04/history` 코드 주석에 언급됨 diff --git a/docs/wiki/pages/A05_EduDetail/A05_frontend.md b/docs/wiki/pages/A05_EduDetail/A05_frontend.md new file mode 100644 index 0000000..cb4f55a --- /dev/null +++ b/docs/wiki/pages/A05_EduDetail/A05_frontend.md @@ -0,0 +1,69 @@ +--- +status: stable +page_id: A05_EduDetail +related_pages: ["[[a00_app_shell_framework]]", "[[ui_templates]]"] +last_updated: 2026-07-12 +--- + +# A05_EduDetail — Frontend + +로그인 전 교육 상세 페이지. 교육 과정 소개 + 문의 CTA. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A05_EduDetail_UI_Page.ts` | `A05_EduDetail/A05_EduDetail_UI_Page.ts:1-106` | 페이지 렌더링 로직 | +| `A05_EduDetail_UI_Style.css` | `A05_EduDetail/A05_EduDetail_UI_Style.css:1-87` | 스타일 (theme.css 변수만 사용) | + +## 컴포넌트 (섹션 빌더) + +| 함수 | 위치 | 역할 | +|---|---|---| +| `buildHero()` | `A05_EduDetail/A05_EduDetail_UI_Page.ts:33-51` | Hero(제목+부제목), mist-violet→canvas 그라디언트 | +| `buildCourses()` | `A05_EduDetail/A05_EduDetail_UI_Page.ts:53-81` | 교육과정 3열 카드그리드(createCard 3개) | +| `buildCta()` | `A05_EduDetail/A05_EduDetail_UI_Page.ts:83-95` | 문의 CTA 버튼(variant: filled) | +| `renderA05EduDetail()` | `A05_EduDetail/A05_EduDetail_UI_Page.ts:100-105` | 페이지 진입점(3개 섹션 조립) | + +## 로컬라이제이션 + +모든 텍스트는 `ui_locales[key][currentLanguageIndex]` 형식으로 [[ui_templates]]에서 로드. +하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목 | `A05_EduDetail_Title` | +| 히어로 부제목 | `A05_EduDetail_Hero_Subtitle` | +| 과정 섹션 제목 | `A05_EduDetail_Course_SectionTitle` | +| 과정 1~3 | `A05_EduDetail_Course{1..3}_Title`, `A05_EduDetail_Course{1..3}_Desc` | +| CTA 버튼 라벨 | `A05_EduDetail_Cta` | + +## 스타일 (CSS) + +### CSS 클래스 구조 +- `.a05-edu-detail` — 페이지 래퍼 (flex column, gap: section-gap) +- `.a05-hero` — 그래디언트 배경 +- `.a05-hero__inner` — 중앙 정렬 컨테이너 +- `.a05-hero__title` — heading-lg, deep-iris, max 18자 +- `.a05-hero__subtitle` — body 텍스트, slate, max 56자 +- `.a05-section` — 공통 섹션 (max-width: page-max-width, padding: spacing-32) +- `.a05-section__title` — heading-sm, deep-iris, 중앙 정렬 +- `.a05-course-grid` — 3열 그리드 (gap: spacing-24) +- `.a05-course-card` — 카드 (min-height: 140px) +- `.a05-course__desc` — body-sm, slate +- `.a05-cta` — align-items: center (버튼 중앙 정렬) + +### 반응형 +- **900px 이하:** 과정 그리드 1열, 히어로 제목 폰트 축소 + +## 이벤트 핸들러 + +| 함수 | 위치 | 동작 | +|---|---|---| +| `onA05_EduDetail_Inquiry_Click()` | A05_EduDetail_UI_Page.ts:26-28 | A08_SUPPORT로 이동 | + +## 의존성 + +- [[a00_app_shell_framework]] — `navigateTo()` 라우팅 +- `config_frontend.ts` — `ROUTES` 상수 (A08_SUPPORT) +- [[ui_templates]] — `createButton()`, `createCard()` 공통 컴포넌트 + 다국어 diff --git a/docs/wiki/pages/A06_Login/A06_backend.md b/docs/wiki/pages/A06_Login/A06_backend.md new file mode 100644 index 0000000..9f43254 --- /dev/null +++ b/docs/wiki/pages/A06_Login/A06_backend.md @@ -0,0 +1,70 @@ +--- +status: stable +page_id: A06_Login +related_pages: ["[[A06_Login/A06_frontend]]", "[[A07_Register/A07_backend]]", "[[A09_Security/A09_backend]]", "[[auth_rbac]]"] +last_updated: 2026-07-12 +--- + +# A06_Login — Backend + +세션 쿠키 기반 로그인 + OTP 재인증 + 세션/비밀번호 관리 API. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A06_Login_Router.py` | `A06_Login/A06_Login_Router.py:1-179` | 인증 API 라우터 (prefix `/api/auth`) | +| `A06_Login_Schema.py` | `A06_Login/A06_Login_Schema.py:1-20` | 요청 검증 Pydantic 모델 3종 | + +## API 엔드포인트 + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `POST /api/auth/login/request` | `A06_Login/A06_Login_Router.py:51` | 1차 로그인(이메일+비번). 신규 브라우저/주기 재인증 시 `otp_required` 반환 | +| `POST /api/auth/login/verify` | `A06_Login/A06_Login_Router.py:113` | OTP 검증 후 세션 발급 | +| `GET /api/auth/session` | `A06_Login/A06_Login_Router.py:145` | 현재 세션 사용자 조회 (id/email/name/role/company_id/is_master) | +| `POST /api/auth/logout` | `A06_Login/A06_Login_Router.py:160` | 세션 삭제 + 쿠키 제거 | +| `POST /api/auth/password` | `A06_Login/A06_Login_Router.py:170` | 비밀번호 변경 (현재 비번 검증, 재인증 필요 반환) | + +## 내부 헬퍼 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `_user_agent(request)` | `A06_Login/A06_Login_Router.py:40` | User-Agent 헤더 추출(최대 1000자) | +| `_send_otp(user, purpose, label)` | `A06_Login/A06_Login_Router.py:44` | OTP 생성·해시 저장·메일 발송 | +| `_finish_login(user, agent)` | `A06_Login/A06_Login_Router.py:87` | 세션 생성·쿠키 설정·last_login 갱신·로그인 기록 | + +## 요청 스키마 (Pydantic) + +| 모델 | 위치 | 필드 | +|---|---|---| +| `LoginRequest` | `A06_Login/A06_Login_Schema.py:6` | email(EmailStr), password(8~128자) | +| `OtpVerifyRequest` | `A06_Login/A06_Login_Schema.py:11` | email(EmailStr), otp_code(정규식 `^\d{6}$`) | +| `PasswordChangeRequest` | `A06_Login/A06_Login_Schema.py:16` | current_password, new_password(8~128자), logout_all(기본 True) | + +## 로그인 로직 흐름 + +1. `login/request`: 이메일 조회 → 계정 잠금 확인 → 비밀번호 검증 → 계정 상태 확인(`ACTIVE`/`NO_COMPANY`/`PENDING`만 허용) +2. **OTP 트리거 조건** (둘 중 하나면 OTP 요구): + - 주기적 재인증: `last_email_verified_at`이 `EMAIL_REVERIFY_DAYS` 이전 + - 신규 브라우저: `has_known_browser()` 미확인 +3. `login/verify`: OTP 검증 → 소비 → `last_email_verified_at` 갱신 → `_finish_login` +4. `_finish_login`: 로그인 실패 초기화 → 브라우저 신뢰 등록 → `auth_expires_at = NOW() + 3개월` → 세션 생성 + +## 보안 정책 (실 코드 기준) + +- **비밀번호 실패**: `record_failed_login()` 누적, 5회 이상 & ADMIN_EMAIL 설정 시 보안 경고 메일 발송 +- **계정 잠금**: `account_locked_until`이 미래면 423 반환 +- **로그인 기록**: 모든 시도를 `record_login()`으로 기록(성공/실패 사유 포함) + +## 의존성 (공통 유틸) + +- [[common_util]] — `common_util_auth`(세션/OTP/해시), `common_util_auth_repository`(DB 조회), `common_util_email`(메일 발송) +- 인증/세션/OTP 정책 상세 → [[auth_rbac]] +- `config_system` — `ADMIN_EMAIL`, `EMAIL_REVERIFY_DAYS` + +## ⚠️ 계획서와 실 코드 불일치 + +[[auth_rbac]]는 계획서 기준(OTP 5분·재시도 3회, 세션 4h/12h, 5회 실패 15분 잠금)으로 기술돼 있으나, +실 코드는 `auth_expires_at = NOW() + 3개월` 갱신·브라우저 신뢰 기반 OTP·5회 실패 시 관리자 알림 메일 방식. +정책 상세 검증 필요 — 규칙 6(실 코드 우선)에 따라 auth_rbac 갱신 대상. diff --git a/docs/wiki/pages/A06_Login/A06_frontend.md b/docs/wiki/pages/A06_Login/A06_frontend.md new file mode 100644 index 0000000..67073ed --- /dev/null +++ b/docs/wiki/pages/A06_Login/A06_frontend.md @@ -0,0 +1,85 @@ +--- +status: stable +page_id: A06_Login +related_pages: ["[[A06_Login/A06_backend]]", "[[A07_Register/A07_frontend]]", "[[auth_rbac]]"] +last_updated: 2026-07-12 +--- + +# A06_Login — Frontend + +로그인 화면. 이메일+비밀번호 1차 → 필요 시 OTP 입력으로 전환하는 단일 폼. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A06_Login_UI_Auth_Page.ts` | `A06_Login/A06_Login_UI_Auth_Page.ts:1-80` | 로그인 폼 렌더링 + 제출 로직 | +| `A06_Login_UI_Style.css` | `A06_Login/A06_Login_UI_Style.css:1-52` | 스타일 (theme.css 변수만 사용) | +| `A06_Login_Api_Fetch.ts` | `A06_Login/A06_Login_Api_Fetch.ts:1-57` | 인증 API 클라이언트 (`credentials: "include"`) | + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderA06Login(root)` | `A06_Login/A06_Login_UI_Auth_Page.ts:17` | 카드+폼(email/password/otp/submit) 조립 | +| `onA06_Login_Submit_Click(event)` | `A06_Login/A06_Login_UI_Auth_Page.ts:34` | 폼 제출 핸들러(검증→요청→OTP 전환/성공) | + +## API 클라이언트 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `requestLogin(email, password)` | `A06_Login/A06_Login_Api_Fetch.ts:30` | `POST /auth/login/request` | +| `verifyLogin(email, otpCode)` | `A06_Login/A06_Login_Api_Fetch.ts:34` | `POST /auth/login/verify` | +| `fetchSession()` | `A06_Login/A06_Login_Api_Fetch.ts:38` | `GET /auth/session` → boolean(로그인 여부) | +| `fetchSessionUser()` | `A06_Login/A06_Login_Api_Fetch.ts:43` | `GET /auth/session` → SessionUser 객체 | +| `logout()` | `A06_Login/A06_Login_Api_Fetch.ts:54` | `POST /auth/logout` | + +- `SessionUser` 타입: id, email, name?, role?, company_id?, is_master? +- `fetchSession`/`fetchSessionUser`/`logout`은 [[a00_app_shell_framework]]에서도 사용 (공유 자원) + +## 제출 로직 (2단계 폼 전환) + +1. 이메일 유효성 검사 (isBlank/isValidEmail) → 실패 시 필드 에러 +2. OTP 미요구 상태면 비밀번호 필수, OTP 요구 상태면 6자리 숫자 검증 +3. `otpRequired` false → `requestLogin`, true → `verifyLogin` +4. 응답 `status === "otp_required"`: + - otp 필드 노출, password 필드 숨김 + - 제출 버튼 라벨 → `A06_Login_Verify` + - 토스트 안내(`A06_Login_OtpSent`) +5. 로그인 성공 → 토스트 후 `navigateTo(ROUTES.B01_ACCOUNT)` + +## 로컬라이제이션 + +모든 텍스트는 [[ui_templates]]에서 로드. 하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목 | `A06_Login_Title` | +| 이메일/비번/OTP 필드 | `A06_Login_Field_Email`, `A06_Login_Field_Password`, `A06_Login_Field_Otp` | +| 제출/인증 버튼 | `A06_Login_Submit`, `A06_Login_Verify` | +| 회원가입 이동 | `A06_Login_ToRegister` | +| 안내/성공 | `A06_Login_OtpSent`, `A06_Login_Success` | +| 오류 | `A06_Login_Error_Email`, `A06_Login_Error_Required`, `A06_Login_Error_Request` | + +## 스타일 (CSS) + +- `.a06-login` — 페이지 래퍼 (중앙 정렬, 상단 정렬) +- `.a06-login__card` — 로그인 카드 (max-width: 400px, surface 배경, border) +- `.a06-login__title` — heading-sm, deep-iris, 중앙 정렬 +- `.a06-login__form` — flex 열 (gap: spacing-16) +- `.a06-login__submit` / `.a06-login__link` — 전체 너비 버튼 + +## 이벤트 핸들러 + +| 함수 | 위치 | 동작 | +|---|---|---| +| `onA06_Login_Submit_Click()` | `A06_Login/A06_Login_UI_Auth_Page.ts:34` | 로그인/OTP 제출 | +| (인라인) 회원가입 버튼 | `A06_Login/A06_Login_UI_Auth_Page.ts:75` | A07_REGISTER로 이동 | + +## 의존성 + +- [[a00_app_shell_framework]] — `navigateTo()` 라우팅 +- `config_frontend.ts` — `ROUTES`, `API_BASE_URL` +- `common_util_validate` — `isBlank`, `isValidEmail` +- [[ui_templates]] — `createButton`, `createInputField`, `showLoadingOverlay`/`hideLoadingOverlay`, `showToast` +- 백엔드 API → [[A06_Login/A06_backend]] diff --git a/docs/wiki/pages/A07_Register/A07_backend.md b/docs/wiki/pages/A07_Register/A07_backend.md new file mode 100644 index 0000000..601045e --- /dev/null +++ b/docs/wiki/pages/A07_Register/A07_backend.md @@ -0,0 +1,57 @@ +--- +status: stable +page_id: A07_Register +related_pages: ["[[A07_Register/A07_frontend]]", "[[A06_Login/A06_backend]]", "[[auth_rbac]]"] +last_updated: 2026-07-12 +--- + +# A07_Register — Backend + +회원가입(2단계: 요청 → OTP 검증) + 회사 검색 API. prefix `/api/auth` ([[A06_Login/A06_backend]]와 공유). + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A07_Register_Router.py` | `A07_Register/A07_Register_Router.py:1-76` | 회원가입/회사검색 API 라우터 | +| `A07_Register_Schema.py` | `A07_Register/A07_Register_Schema.py:1-30` | 요청 검증 Pydantic 모델 2종 | + +## API 엔드포인트 + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `GET /api/auth/companies?q=` | `A07_Register/A07_Register_Router.py:26` | 회사명 검색(1~100자) → id/name 목록 | +| `POST /api/auth/register/request` | `A07_Register/A07_Register_Router.py:31` | 1차 가입 요청(202). OTP 메일 발송, PENDING_EMAIL 계정 생성 | +| `POST /api/auth/register/verify` | `A07_Register/A07_Register_Router.py:56` | OTP 검증 → 가입 완료(NO_COMPANY 상태) | + +## 요청 스키마 (Pydantic) + +| 모델 | 위치 | 필드 | +|---|---|---| +| `RegisterRequest` | `A07_Register/A07_Register_Schema.py:6` | email, password/password_confirm(8~128), name, position?, phone?, terms_version, terms_agreed, privacy_agreed, marketing_agreed | +| `RegisterVerifyRequest` | `A07_Register/A07_Register_Schema.py:27` | email(EmailStr), otp_code(정규식 `^\d{6}$`) | + +- `RegisterRequest.validate_registration` (model_validator): 필수 약관 동의 확인 + 비밀번호 일치 확인 + +## 가입 로직 흐름 + +1. `register/request`: + - 기존 이메일 조회 → `PENDING_EMAIL`이 아니면 409(이미 등록됨) + - `PENDING_EMAIL`(미인증)이면 `refresh_pending_registration()`으로 갱신 + - 신규면 `create_registration()`으로 생성 + - OTP 생성·해시 저장·메일 발송 +2. `register/verify`: + - `PENDING_EMAIL` 상태 확인 → OTP 검증(만료/해시) → 소비 + - `complete_registration()` → 상태 `NO_COMPANY`로 전환 + - **회사 생성/연결은 로그인 후 B01_Dashboard에서 진행** (가입 시점엔 회사 없음) + +## 의존성 (공통 유틸) + +- [[common_util]] — `common_util_auth`(OTP/해시), `common_util_auth_repository`(가입/회사검색 DB), `common_util_email`(메일) +- 사용자 상태 생명주기(PENDING_EMAIL → NO_COMPANY) → [[auth_rbac]] +- 회원 테이블 → [[db_schema/users_auth]] + +## 참고 + +- 회원가입은 회사 없이 완료됨(NO_COMPANY). 회사 검색 API는 프론트 자동완성용이나, + 실제 회사 연결은 B01_Dashboard에서 처리 → [[B01_Dashboard/B01_backend]] diff --git a/docs/wiki/pages/A07_Register/A07_frontend.md b/docs/wiki/pages/A07_Register/A07_frontend.md new file mode 100644 index 0000000..afb5466 --- /dev/null +++ b/docs/wiki/pages/A07_Register/A07_frontend.md @@ -0,0 +1,91 @@ +--- +status: stable +page_id: A07_Register +related_pages: ["[[A07_Register/A07_backend]]", "[[A06_Login/A06_frontend]]", "[[auth_rbac]]"] +last_updated: 2026-07-12 +--- + +# A07_Register — Frontend + +회원가입 화면. 정보 입력 + 약관 아코디언 동의 → OTP 입력으로 전환하는 2단계 폼. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A07_Register_UI_Auth_Page.ts` | `A07_Register/A07_Register_UI_Auth_Page.ts:1-208` | **실사용** 회원가입 UI (약관·OTP·실 API) | +| `A07_Register_UI_Page.ts` | `A07_Register/A07_Register_UI_Page.ts:1-142` | ⚠️ 구버전 잔재 (미사용, 아래 참고) | +| `A07_Register_UI_Style.css` | `A07_Register/A07_Register_UI_Style.css:1-103` | 스타일 (theme.css 변수만 사용) | +| `A07_Register_Api_Fetch.ts` | `A07_Register/A07_Register_Api_Fetch.ts:1-47` | 회원가입/회사검색 API 클라이언트 | + +> ⚠️ **라우터는 `A07_Register_UI_Auth_Page`만 사용** (router.ts:30 확인). `A07_Register_UI_Page.ts`는 +> 회사명+이름+이메일+비번만 받는 단순 폼이며 백엔드 미연동(TODO 주석, `navigateTo`만) — 구버전 잔재로 판단. 정리 권장. + +## 컴포넌트 / 함수 (UI_Auth_Page — 실사용) + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderA07Register(root)` | `A07_Register/A07_Register_UI_Auth_Page.ts:68` | 카드+폼 조립, 약관 텍스트 비동기 로드 후 렌더 | +| `onA07_Register_Submit_Click(event)` | `A07_Register/A07_Register_UI_Auth_Page.ts:146` | 제출 핸들러(검증→가입요청→OTP 전환→검증) | +| `checkboxWithAccordion(label, text)` | `A07_Register/A07_Register_UI_Auth_Page.ts:22` | 체크박스+펼침 상세(약관 본문) 컴포넌트 | +| `loadAgreementText(filename)` | `A07_Register/A07_Register_UI_Auth_Page.ts:58` | `resources/legal/*.txt` 약관 파일 fetch | + +## API 클라이언트 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `requestRegistration(payload)` | `A07_Register/A07_Register_Api_Fetch.ts:28` | `POST /auth/register/request` | +| `verifyRegistration(email, otpCode)` | `A07_Register/A07_Register_Api_Fetch.ts:32` | `POST /auth/register/verify` | +| `searchCompanies(query)` | `A07_Register/A07_Register_Api_Fetch.ts:39` | `GET /auth/companies?q=` → id/name 목록 | + +- `RegisterPayload` 타입: email, password, password_confirm, name, position, phone, terms_version, terms_agreed, privacy_agreed, marketing_agreed + +## 제출 로직 (2단계 폼 전환) + +1. **입력 검증**: 이름/이메일/비번/비번확인 필수, 이메일 형식, 비번 8자 이상, 비번 일치, 필수 약관(terms/privacy) 체크 +2. `requestRegistration()` 호출 (`terms_version: "1.0"` 고정, terms_agreed/privacy_agreed true) +3. 성공 시 `verifyStep = true`: 입력 필드 숨기고 OTP 필드 노출, 버튼 라벨 → `A07_Register_Verify` +4. OTP 제출 → `verifyRegistration()` → 성공 토스트 → `navigateTo(ROUTES.A06_LOGIN)` + +## 약관 동의 (아코디언) + +- `checkboxWithAccordion`으로 이용약관/개인정보/마케팅 3종 생성 +- 약관 본문은 `resources/legal/{terms_of_service,privacy_policy,marketing_consent}.txt`에서 fetch +- 마케팅은 선택(marketing_agreed), 이용약관·개인정보는 필수 + +## 로컬라이제이션 + +모든 텍스트는 [[ui_templates]]에서 로드. 하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목 | `A07_Register_Title` | +| 필드 | `A07_Register_Field_Name`, `_Position`, `_Email`, `_Phone`, `_Password`, `_PasswordConfirm`, `_Otp` | +| 약관 | `A07_Register_Terms`, `_Privacy`, `_Marketing` | +| 제출/인증 | `A07_Register_Submit`, `A07_Register_Verify` | +| 안내/성공 | `A07_Register_OtpSent`, `A07_Register_Success` | +| 오류 | `A07_Register_Error_Required`, `_Email`, `_Password`, `_PasswordMismatch`, `_Terms`, `_Request` | +| 로그인 이동 | `A07_Register_ToLogin` | + +## 스타일 (CSS) + +- `.a07-register__card` — 카드 (max-width: 420px) +- `.a07-register__agreement` — 약관 컨테이너(border, overflow hidden) +- `.a07-register__agreement-summary` — 체크박스+라벨 헤더(클릭 시 상세 토글) +- `.a07-register__agreement-details` / `-content` — 펼침 약관 본문(max-height 200px, pre-wrap) + +## 이벤트 핸들러 + +| 함수 | 위치 | 동작 | +|---|---|---| +| `onA07_Register_Submit_Click()` | `A07_Register/A07_Register_UI_Auth_Page.ts:146` | 가입/OTP 제출 | +| (인라인) 로그인 버튼 | `A07_Register/A07_Register_UI_Auth_Page.ts:201` | A06_LOGIN으로 이동 | +| (인라인) 약관 요약 클릭 | `A07_Register/A07_Register_UI_Auth_Page.ts:47` | 상세 아코디언 토글 | + +## 의존성 + +- [[a00_app_shell_framework]] — `navigateTo()` 라우팅 +- `config_frontend.ts` — `ROUTES`, `API_BASE_URL` +- `common_util_validate` — `isBlank`, `isValidEmail`, `hasMinLength` +- [[ui_templates]] — `createButton`, `createInputField`, `showLoadingOverlay`/`hideLoadingOverlay`, `showToast` +- 백엔드 API → [[A07_Register/A07_backend]] diff --git a/docs/wiki/pages/A08_Support/A08_backend.md b/docs/wiki/pages/A08_Support/A08_backend.md new file mode 100644 index 0000000..762fb76 --- /dev/null +++ b/docs/wiki/pages/A08_Support/A08_backend.md @@ -0,0 +1,67 @@ +--- +status: stable +page_id: A08_Support +related_pages: ["[[A08_Support/A08_frontend]]", "[[A06_Login/A06_backend]]", "[[db_schema/logs_monitoring]]"] +last_updated: 2026-07-12 +--- + +# A08_Support — Backend + +기술지원 문의 접수 API. `support_requests` 테이블 저장 + 관리자 알림 메일. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A08_Support_Router.py` | `A08_Support/A08_Support_Router.py:1-68` | 문의 접수 API (prefix `/api/a08`) | +| `A08_Support_Schema.py` | `A08_Support/A08_Support_Schema.py:1-13` | 문의 요청 검증 Pydantic 모델 | + +## API 엔드포인트 + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `POST /api/a08/support` | `A08_Support/A08_Support_Router.py:27` | 문의 접수. DB 저장 + ADMIN_EMAIL로 알림 메일 | + +## 내부 헬퍼 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `_get_company_name(company_id)` | `A08_Support/A08_Support_Router.py:16` | company_id로 회사명 조회 (없으면 None) | + +## 요청 스키마 (Pydantic) + +| 모델 | 위치 | 필드 | +|---|---|---| +| `SupportRequestPayload` | `A08_Support/A08_Support_Schema.py:6` | name(1~255), email(EmailStr), phone?(≤30), subject(1~255), message(1~5000) | + +## 접수 로직 + +1. `get_optional_session()`으로 로그인 여부 확인 (비로그인 허용) +2. 로그인 상태면 세션의 `company_id` → `_get_company_name()`으로 회사명 조회, 비로그인이면 None +3. `support_requests` INSERT (아래 컬럼) +4. ADMIN_EMAIL 설정 시 관리자에게 문의 알림 메일 발송 + +## DB 저장 컬럼 (실 코드 INSERT 기준) + +`support_requests`에 INSERT하는 컬럼: +`company_id, company_name, user_name, user_email, user_phone, subject, message` + +→ 테이블 정의 → [[db_schema/logs_monitoring]] + +## 특징 + +- **비로그인도 문의 가능** (`get_optional_session`): 세션 없으면 회사 정보만 None으로 저장 +- 로그인 상태면 회사 정보 자동 연결 + +## 의존성 (공통 유틸) + +- [[common_util]] — `common_util_auth`(`get_optional_session`), `common_util_email`(`send_email_background`), `common_util_email_templates`(`support_request_email`) +- `config_system` — `ADMIN_EMAIL` +- DB → [[db_schema/logs_monitoring]] + +## ⚠️ DB 스키마 불일치 (확인 필요) + +[[db_schema/logs_monitoring]]의 `support_requests` 컬럼은 계획서 기준 +(`user_id, title, priority, status`)인데, 실 코드 INSERT는 +`company_id, company_name, user_name, user_email, user_phone, subject, message`. +컬럼명이 다름 — 실 DB 스키마 대조 필요 (규칙6: 실 코드 우선). logs_monitoring 갱신 대상. diff --git a/docs/wiki/pages/A08_Support/A08_frontend.md b/docs/wiki/pages/A08_Support/A08_frontend.md new file mode 100644 index 0000000..72f3493 --- /dev/null +++ b/docs/wiki/pages/A08_Support/A08_frontend.md @@ -0,0 +1,76 @@ +--- +status: stable +page_id: A08_Support +related_pages: ["[[A08_Support/A08_backend]]", "[[a00_app_shell_framework]]", "[[ui_templates]]"] +last_updated: 2026-07-12 +--- + +# A08_Support — Frontend + +기술지원 문의 폼. 이름·이메일·연락처·제목·문의내용(textarea) 입력 후 제출. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A08_Support_UI_Page.ts` | `A08_Support/A08_Support_UI_Page.ts:1-217` | 문의 폼 렌더링 + 제출 로직 | +| `A08_Support_UI_Style.css` | `A08_Support/A08_Support_UI_Style.css:1-64` | 스타일 (theme.css 변수만 사용) | + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderA08Support(root)` | `A08_Support/A08_Support_UI_Page.ts:69` | 카드+폼 조립, 세션 정보 자동 채움 | +| `onA08_Support_Submit_Click(event)` | `A08_Support/A08_Support_UI_Page.ts:133` | 제출 핸들러(검증→fetch POST) | +| `createTextAreaField(label, placeholder)` | `A08_Support/A08_Support_UI_Page.ts:32` | 여러 줄 textarea 필드(에러 슬롯 포함) 생성 | + +## 제출 로직 + +1. 필수값 검사(name/email/subject/message), 이메일 형식 검사 +2. `fetch("/api/a08/support", POST)` 직접 호출 (별도 Api_Fetch 파일 없음) +3. 성공: 폼 리셋 + 성공 메시지(`A08_Support_Success`) 표시 +4. 실패: nameField에 오류 메시지 표시 + +## 세션 자동 채움 + +- 렌더 후 백그라운드에서 `fetchSessionUser()`([[A06_Login/A06_frontend]]) 호출 +- 로그인 상태면 name/email 필드 자동 입력 (렌더링 지연 없음) + +## 로컬라이제이션 + +모든 텍스트는 [[ui_templates]]에서 로드. 하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목/부제 | `A08_Support_Title`, `A08_Support_Subtitle` | +| 필드 | `A08_Support_Field_Name`, `_Email`, `_Phone`, `_Subject`, `_Message` (+각 Placeholder) | +| 제출 | `A08_Support_Submit` | +| 성공 | `A08_Support_Success` | +| 오류 | `A08_Support_Error_Required`, `A08_Support_Error_Email` | + +## 스타일 (CSS) + +- `.a08-support__card` — 카드 (max-width: 520px) +- `.a08-support__success` — 성공 메시지(success 색, mist-violet 배경), 기본 hidden +- `.a08-support__form` — flex 열 (gap: spacing-16) +- `.a08-support__textarea` — resize vertical, min-height 120px +- `.a08-support__submit` — 전체 너비 버튼 + +## 이벤트 핸들러 + +| 함수 | 위치 | 동작 | +|---|---|---| +| `onA08_Support_Submit_Click()` | `A08_Support/A08_Support_UI_Page.ts:133` | 문의 검증·제출 | + +## 의존성 + +- `config_frontend.ts` — (직접 `/api/a08/support` 상대경로 fetch) +- `common_util_validate` — `isBlank`, `isValidEmail` +- [[A06_Login/A06_frontend]] — `fetchSessionUser` (세션 자동 채움) +- [[ui_templates]] — `createButton`, `createInputField` (textarea는 자체 구현) +- 백엔드 API → [[A08_Support/A08_backend]] + +## 참고 + +- 문의 폼은 로그인/비로그인 모두 사용 가능 (세션 있으면 name/email 자동 입력) +- textarea는 공통 컴포넌트에 없어 `createTextAreaField`로 자체 구현 (`.ui-field`/`.ui-input` 스타일 상속) diff --git a/docs/wiki/pages/A09_Security/A09_backend.md b/docs/wiki/pages/A09_Security/A09_backend.md new file mode 100644 index 0000000..5fc36c7 --- /dev/null +++ b/docs/wiki/pages/A09_Security/A09_backend.md @@ -0,0 +1,77 @@ +--- +status: stable +page_id: A09_Security +related_pages: ["[[A09_Security/A09_frontend]]", "[[A06_Login/A06_backend]]", "[[A07_Register/A07_backend]]", "[[auth_rbac]]"] +last_updated: 2026-07-12 +--- + +# A09_Security — Backend + +마스터(회사관리자)·시스템관리자 보안/조직 관리 API + 활동 로그 기록. prefix `/api/security`. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A09_Security_Router.py` | `A09_Security/A09_Security_Router.py:1-123` | 마스터/시스템관리자/활동로그 API | +| `A09_Security_Schema.py` | `A09_Security/A09_Security_Schema.py:1-25` | 요청 검증 Pydantic 모델 3종 | + +## API 엔드포인트 + +### 마스터(회사 관리자) 전용 — `require_master` + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `GET /api/security/master/dashboard` | `A09_Security/A09_Security_Router.py:28` | 마스터 대시보드(회사 기준) | +| `GET /api/security/master/members` | `A09_Security/A09_Security_Router.py:33` | 회사 팀원 목록 | +| `GET /api/security/master/join-requests` | `A09_Security/A09_Security_Router.py:38` | 가입 요청 목록 | +| `POST /api/security/master/join-requests/{id}/decision` | `A09_Security/A09_Security_Router.py:43` | 가입 승인/거부 + 결과 메일 발송 | +| `POST /api/security/master/members/{id}/remove` | `A09_Security/A09_Security_Router.py:59` | 팀원 비활성화(내보내기) | + +### 시스템 관리자 전용 — `require_system_admin` + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `GET /api/security/admin/dashboard` | `A09_Security/A09_Security_Router.py:86` | 시스템 대시보드 + psutil 리소스(cpu/memory/disk/process) | +| `GET /api/security/admin/{collection}` | `A09_Security/A09_Security_Router.py:101` | 컬렉션 목록(companies/users/support) | +| `PATCH /api/security/admin/{entity}/{id}/status` | `A09_Security/A09_Security_Router.py:110` | 엔티티 상태 변경(company/user/support) | + +### 인증 사용자 공통 — `verify_session` + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `POST /api/security/activity` | `A09_Security/A09_Security_Router.py:66` | 활동 로그 기록(202), `activity_logs` INSERT | + +## 요청 스키마 (Pydantic) + +| 모델 | 위치 | 필드 | +|---|---|---| +| `JoinDecisionRequest` | `A09_Security/A09_Security_Schema.py:8` | approved(bool), comment?(≤1000) | +| `AdminStatusRequest` | `A09_Security/A09_Security_Schema.py:13` | status(3~20), reason(1~500) | +| `ActivityLogRequest` | `A09_Security/A09_Security_Schema.py:18` | action_type(Literal 5종), resource_id?, status(SUCCESS/FAILURE), details(dict) | + +- `action_type` Literal: FILE_UPLOAD, FILE_DOWNLOAD, PROJECT_SAVE, DATA_PROCESS, PAGE_VIEW + +## DB 저장 (activity_logs) + +`POST /activity`가 INSERT하는 컬럼: `user_id, action_type, resource_id, status, details(JSON)` +→ 테이블 정의 → [[db_schema/logs_monitoring]] + +## 권한 헬퍼 + +- `require_master` — 회사 마스터(is_master) 권한 +- `require_system_admin` — SYSTEM_ADMIN 역할 +- `verify_session` — 로그인 세션 +- 권한 체계 상세 → [[auth_rbac]] + +## 의존성 (공통 유틸) + +- [[common_util]] — `common_util_auth`(권한 데코레이터), `common_util_auth_repository`(마스터/관리자 조회·처리), `common_util_email`(가입 결과 메일) +- 외부 라이브러리: `psutil`(관리자 대시보드 리소스 계측) → [[dependencies]] +- DB → [[db_schema/logs_monitoring]](activity_logs), [[db_schema/users_auth]](join_requests/companies) + +## 참고 + +- 이 백엔드 API는 마스터/시스템관리자용이나, **프론트(`A09_Security_UI_Page.ts`)는 약관 열람만 하고 이 API를 사용하지 않음**. + API 클라이언트(`A09_Security_Api_Fetch.ts`)는 정의만 되고 미연동 상태 → [[A09_Security/A09_frontend]] 참고 +- B01_Dashboard의 관리자 기능과 역할이 겹칠 수 있음 (마스터 대시보드/멤버관리) — 향후 연동처 확인 필요 diff --git a/docs/wiki/pages/A09_Security/A09_frontend.md b/docs/wiki/pages/A09_Security/A09_frontend.md new file mode 100644 index 0000000..80f20f1 --- /dev/null +++ b/docs/wiki/pages/A09_Security/A09_frontend.md @@ -0,0 +1,78 @@ +--- +status: stable +page_id: A09_Security +related_pages: ["[[A09_Security/A09_backend]]", "[[A06_Login/A06_frontend]]", "[[auth_rbac]]"] +last_updated: 2026-07-12 +--- + +# A09_Security — Frontend + +보안·약관 열람 페이지. 이용약관/개인정보/세션 보안정책 텍스트를 버전과 함께 표시. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `A09_Security_UI_Page.ts` | `A09_Security/A09_Security_UI_Page.ts:1-30` | **실사용** 약관 열람 페이지 렌더링 | +| `A09_Security_Terms.ts` | `A09_Security/A09_Security_Terms.ts:1-16` | 약관 텍스트 데이터(한/영), 버전 상수 | +| `A09_Security_UI_Style.css` | `A09_Security/A09_Security_UI_Style.css:1-14` | 스타일 (theme.css 변수만 사용) | +| `A09_Security_Api_Fetch.ts` | `A09_Security/A09_Security_Api_Fetch.ts:1-61` | ⚠️ API 클라이언트 (정의만, **미사용** — 아래 참고) | + +> ⚠️ **프론트/백엔드 기능 불일치**: `A09_Security_UI_Page.ts`는 약관 텍스트 열람만 하며 +> `A09_Security_Api_Fetch.ts`를 import하지 않는다. API 클라이언트(마스터/관리자 8함수)는 정의만 되고 +> 어디서도 사용되지 않음(grep 확인). 백엔드 API(`/api/security`)는 완비돼 있으나 프론트 연동 미완. + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderA09Security(root)` | `A09_Security/A09_Security_UI_Page.ts:7` | 제목+버전+3개 약관 섹션 렌더 | + +## 약관 데이터 (A09_Security_Terms.ts) + +| 항목 | 위치 | 내용 | +|---|---|---| +| `SECURITY_TERMS_VERSION` | `A09_Security/A09_Security_Terms.ts:1` | 약관 버전 상수 `"1.0"` | +| `securityTerms.terms` | `A09_Security/A09_Security_Terms.ts:4` | 이용약관(한/영) | +| `securityTerms.privacy` | `A09_Security/A09_Security_Terms.ts:8` | 개인정보(한/영, "IP 미수집" 명시) | +| `securityTerms.security` | `A09_Security/A09_Security_Terms.ts:12` | 세션 보안정책(한/영) | + +## API 클라이언트 함수 (⚠️ 미사용, 정의만) + +| 함수 | 위치 | 대응 API | +|---|---|---| +| `getMasterDashboard()` | `A09_Security/A09_Security_Api_Fetch.ts:14` | `GET /security/master/dashboard` | +| `getMembers()` | `A09_Security/A09_Security_Api_Fetch.ts:18` | `GET /security/master/members` | +| `getJoinRequests()` | `A09_Security/A09_Security_Api_Fetch.ts:22` | `GET /security/master/join-requests` | +| `decideJoinRequest(id, approved, comment?)` | `A09_Security/A09_Security_Api_Fetch.ts:26` | `POST .../join-requests/{id}/decision` | +| `removeMember(userId)` | `A09_Security/A09_Security_Api_Fetch.ts:37` | `POST .../members/{id}/remove` | +| `getAdminDashboard()` | `A09_Security/A09_Security_Api_Fetch.ts:41` | `GET /security/admin/dashboard` | +| `getAdminCollection(collection)` | `A09_Security/A09_Security_Api_Fetch.ts:45` | `GET /security/admin/{collection}` | +| `updateAdminStatus(entity, id, status, reason)` | `A09_Security/A09_Security_Api_Fetch.ts:51` | `PATCH /security/admin/{entity}/{id}/status` | + +## 로컬라이제이션 + +모든 텍스트는 [[ui_templates]]에서 로드. 하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목/버전 | `A09_Security_Title`, `A09_Security_Version` | +| 섹션 제목 | `A09_Security_Terms`, `A09_Security_Privacy`, `A09_Security_Policy` | + +- 약관 본문은 로케일이 아닌 `A09_Security_Terms.ts`에 한/영 배열로 별도 관리(`[currentLanguageIndex]`로 선택) + +## 스타일 (CSS) + +- `.a09-security` — 문서 컨테이너(max-width 800px, surface 배경, border) +- `.a09-security section` — 섹션 간격(margin-top: spacing-32) + +## ⚠️ 약관 텍스트와 실 코드 불일치 + +`securityTerms.security`는 "세션 12시간 또는 4시간 비활동 후 만료"로 안내하나, +A06 실 코드는 `auth_expires_at = NOW() + 3개월` 방식 → [[A06_Login/A06_backend]] 참고. +약관 텍스트도 [[auth_rbac]] 계획서 기준으로 작성됨 (실 정책 검증 후 갱신 필요). + +## 의존성 + +- [[ui_templates]] — `ui_locales`, `currentLanguageIndex` (다국어) +- 백엔드 API(미연동) → [[A09_Security/A09_backend]] diff --git a/docs/wiki/pages/B01_Dashboard/B01_api.md b/docs/wiki/pages/B01_Dashboard/B01_api.md new file mode 100644 index 0000000..ba44775 --- /dev/null +++ b/docs/wiki/pages/B01_Dashboard/B01_api.md @@ -0,0 +1,59 @@ +--- +type: page-api +status: stable +page_id: B01_Dashboard +related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B01_Dashboard/B01_backend]]", "[[B01_Dashboard/B01_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B01_Dashboard_Router.py 실 코드 직접 확인 (2026-07-12) +--- + +# B01_Dashboard — API + +기본 prefix: `/api/dashboard` (`B01_Dashboard_Router.py:57`). 공통 인증·오류 형식은 [[../../concepts/auth_rbac]], [[../../concepts/api_common]] 참조. + +## 사용자·회사 +| 항목 | 위치 | 역할 | +|---|---|---| +| `GET /me` | `B01_Dashboard_Router.py:101` | 로그인 사용자 대시보드 정보 조회 | +| `PATCH /me` | `B01_Dashboard_Router.py:109` | 내 기본정보 수정 | +| `GET /user/projects` | `B01_Dashboard_Router.py:118` | 내 프로젝트와 workflow 상태 조회 | +| `GET /user/company` | `B01_Dashboard_Router.py:123` | 소속 회사 조회 | +| `GET /user/companies` | `B01_Dashboard_Router.py:128` | 가입 대상 회사 검색 | +| `POST /user/company/create` | `B01_Dashboard_Router.py:137` | 회사 생성 후 생성자 연결 | +| `POST /user/company/join` | `B01_Dashboard_Router.py:146` | 회사 가입 신청 | + +## 회사 관리자 +| 항목 | 위치 | 역할 | +|---|---|---| +| `GET /admin/members` | `B01_Dashboard_Router.py:155` | 회사 팀원 목록 | +| `POST /admin/members` | `B01_Dashboard_Router.py:163` | 이메일로 팀원 추가 | +| `DELETE /admin/members/{user_id}` | `B01_Dashboard_Router.py:174` | 팀원 회사 연결 해제 | +| `GET /admin/join-requests` | `B01_Dashboard_Router.py:183` | 회사 가입 신청 목록 | +| `PATCH /admin/join-requests/{request_id}` | `B01_Dashboard_Router.py:188` | 가입 신청 승인·거절 | +| `GET /admin/projects` | `B01_Dashboard_Router.py:206` | 회사 프로젝트 목록 | + +## 프로젝트·자동화 +| 항목 | 위치 | 역할 | +|---|---|---| +| `PUT /projects/{project_id}` | `B01_Dashboard_Router.py:214` | 프로젝트 기본정보 수정 | +| `DELETE /projects/{project_id}` | `B01_Dashboard_Router.py:230` | SYSTEM_ADMIN 프로젝트 소프트 삭제 | +| `GET /projects/{project_id}/automations` | `B01_Dashboard_Router.py:366` | 자동화 목록; USER 차단 | +| `POST /projects/{project_id}/automations` | `B01_Dashboard_Router.py:379` | 자동화 생성 | +| `PUT /automations/{automation_id}` | `B01_Dashboard_Router.py:396` | 자동화 수정 | +| `DELETE /automations/{automation_id}` | `B01_Dashboard_Router.py:414` | 자동화 삭제 | +| `POST /automations/{automation_id}/execute` | `B01_Dashboard_Router.py:429` | 자동화 실행시각 기록 | + +## 시스템 관리자 +| 항목 | 위치 | 역할 | +|---|---|---| +| `GET /admin/companies` | `B01_Dashboard_Router.py:255` | 전체 회사 조회 | +| `POST /admin/companies` | `B01_Dashboard_Router.py:261` | 시스템 관리자 회사 생성 | +| `GET /admin/users` | `B01_Dashboard_Router.py:270` | 전체 사용자 조회 | +| `PATCH /admin/users/{user_id}/role` | `B01_Dashboard_Router.py:276` | 역할 변경과 마지막 ADMIN 보호 | +| `PUT /admin/users/{user_id}` | `B01_Dashboard_Router.py:294` | 사용자 관리정보 수정 | +| `PATCH /admin/users/{user_id}/company` | `B01_Dashboard_Router.py:313` | 사용자 회사 배정·해제 | +| `GET /admin/join-requests-all` | `B01_Dashboard_Router.py:325` | 전체 가입 신청 조회 | +| `PATCH /admin/join-requests/{request_id}/approve` | `B01_Dashboard_Router.py:331` | 시스템 관리자 가입 승인 | +| `GET /admin/audit-logs` | `B01_Dashboard_Router.py:341` | 시스템 감사 로그 페이지 조회 | +| `GET /admin/resources` | `B01_Dashboard_Router.py:351` | 1~90일 리소스 통계 조회 | +| `GET /admin/projects-all` | `B01_Dashboard_Router.py:360` | 전체 프로젝트 조회 | diff --git a/docs/wiki/pages/B01_Dashboard/B01_backend.md b/docs/wiki/pages/B01_Dashboard/B01_backend.md new file mode 100644 index 0000000..11ea4d5 --- /dev/null +++ b/docs/wiki/pages/B01_Dashboard/B01_backend.md @@ -0,0 +1,58 @@ +--- +type: page-backend +status: stable +page_id: B01_Dashboard +related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B01_Dashboard/B01_api]]", "[[B01_Dashboard/B01_db]]", "[[B01_Dashboard/B01_dependencies]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B01_Dashboard 실 코드 직접 확인 (2026-07-12) +--- + +# B01_Dashboard — Backend + +## 라우터 권한 헬퍼 +| 항목 | 위치 | 역할 | +|---|---|---| +| `require_company_admin()` | `B01_Dashboard_Router.py:60` | ADMIN 또는 SYSTEM_ADMIN 의존성 검사 | +| `_require_company_id()` | `B01_Dashboard_Router.py:68` | 세션 회사 ID 필수 검사 | +| `_same_company()` | `B01_Dashboard_Router.py:75` | 요청자와 대상의 회사 일치 검사 | +| `_can_edit_project()` | `B01_Dashboard_Router.py:79` | 역할·회사 기준 프로젝트 수정 검사 | +| `_can_manage_automation()` | `B01_Dashboard_Router.py:87` | 자동화 관리 권한 검사 | +| `_can_edit_user()` | `B01_Dashboard_Router.py:93` | 사용자 수정 범위 검사 | + +상세 권한 규칙은 [[../../concepts/auth_rbac]]에서 1차 정의한다. + +## 저장소 함수 +| 항목 | 위치 | 역할 | +| ----------------------------------------------------------------------------- | ----------------------------------------- | -------------------------- | +| `get_dashboard_me()` / `update_user_profile()` | `B01_Dashboard_Repository.py:47,65` | 내 정보 조회·수정 | +| `get_workflow_states_for_projects()` | `B01_Dashboard_Repository.py:83` | 여러 프로젝트의 workflow 상태 배치 조회 | +| `list_user_projects()` / `list_company_projects()` / `list_all_projects()` | `B01_Dashboard_Repository.py:144,165,188` | 역할 범위별 프로젝트 목록 조회 | +| `get_project()` / `update_project()` / `soft_delete_project()` | `B01_Dashboard_Repository.py:210,222,253` | 프로젝트 조회·수정·소프트 삭제 | +| `get_user_company()` / `search_companies()` | `B01_Dashboard_Repository.py:273,293` | 소속 회사와 회사 검색 | +| `create_company()` / `create_system_company()` | `B01_Dashboard_Repository.py:307,347` | 사용자·시스템 관리자 회사 생성 | +| `join_company()` | `B01_Dashboard_Repository.py:378` | 회사 가입 신청과 사용자 상태 전이 | +| `list_company_members()` / `add_company_member()` / `remove_company_member()` | `B01_Dashboard_Repository.py:401,416,439` | 회사 팀원 관리 | +| `list_join_requests()` / `process_join_request()` | `B01_Dashboard_Repository.py:453,471` | 가입 신청 조회·승인·거절 | +| `list_all_companies()` / `list_all_users()` | `B01_Dashboard_Repository.py:507,522` | 시스템 관리자 전체 목록 | +| `change_user_role()` / `get_user_admin_target()` / `update_admin_user()` | `B01_Dashboard_Repository.py:538,547,562` | 사용자 역할·관리정보 변경 | +| `count_company_admins()` / `assign_user_company()` | `B01_Dashboard_Repository.py:584,596` | 마지막 관리자 보호와 회사 배정 | +| `list_audit_logs()` / `get_system_resources()` | `B01_Dashboard_Repository.py:609,624` | 감사 로그와 리소스 통계 조회 | +| `list_project_automations()` / `create_project_automation()` | `B01_Dashboard_Repository.py:682,696` | 자동화 목록·생성 | +| `get_project_automation()` / `update_project_automation()` | `B01_Dashboard_Repository.py:722,735` | 자동화 단건 조회·수정 | +| `delete_project_automation()` / `mark_project_automation_executed()` | `B01_Dashboard_Repository.py:758,779` | 자동화 삭제·실행시각 기록 | + +## 요청 스키마 +| 항목 | 위치 | 역할 | +|---|---|---| +| `UpdateUserRequest` | `B01_Dashboard_Schema.py:6` | 내 정보 수정 검증 | +| `CreateCompanyRequest` | `B01_Dashboard_Schema.py:13` | 회사 생성 검증 | +| `JoinCompanyRequest` / `AddMemberRequest` | `B01_Dashboard_Schema.py:20,24` | 회사 가입·팀원 추가 검증 | +| `ProcessJoinRequest` / `ChangeUserRoleRequest` | `B01_Dashboard_Schema.py:28,33` | 가입 처리·역할 변경 검증 | +| `AssignCompanyRequest` / `UpdateProjectRequest` | `B01_Dashboard_Schema.py:37,41` | 회사 배정·프로젝트 수정 검증 | +| `AdminUpdateUserRequest` / `AutomationRequest` | `B01_Dashboard_Schema.py:51,57` | 관리자 사용자 수정·자동화 검증 | + +## 기술부채 +| 항목 | 위치 | 역할 | +|---|---|---| +| 레거시 상태 추론 | `B01_Dashboard_Repository.py:20` | `_stage_from_status()`가 `project_workflow_stages` 미조회 시 보조값 생성 | +| 700줄 초과 | `B01_Dashboard_Repository.py:1` | 790줄로 프로젝트 단일 파일 제한 초과; 도메인별 저장소 분할 검토 필요 | diff --git a/docs/wiki/pages/B01_Dashboard/B01_db.md b/docs/wiki/pages/B01_Dashboard/B01_db.md new file mode 100644 index 0000000..017f832 --- /dev/null +++ b/docs/wiki/pages/B01_Dashboard/B01_db.md @@ -0,0 +1,32 @@ +--- +type: page-db +status: stable +page_id: B01_Dashboard +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B01_Dashboard/B01_api]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B01_Dashboard_Repository.py 실 코드 직접 확인 (2026-07-12) +--- + +# B01_Dashboard — DB 사용 관계 + +공유 테이블의 정의는 concepts에만 둔다. 이 문서는 B01의 사용 목적과 실제 접근 위치만 기록한다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `users` | `B01_Dashboard_Repository.py:47` | 내 정보·팀원·전체 사용자·역할·회사 연결 관리 → [[db_schema/users_auth]] | +| `companies` | `B01_Dashboard_Repository.py:273` | 소속·검색·생성·전체 회사 조회 → [[db_schema/users_auth]] | +| `join_requests` | `B01_Dashboard_Repository.py:378` | 회사 가입 신청·승인·거절 → [[db_schema/users_auth]] | +| `projects` | `B01_Dashboard_Repository.py:144` | 역할 범위별 목록·수정·소프트 삭제 → [[db_schema/projects]] | +| `project_workflow_stages` | `B01_Dashboard_Repository.py:83` | 프로젝트 목록의 7단계 상태 배치 조회 → [[workflow_state]] | +| `project_automations` | `B01_Dashboard_Repository.py:682` | 자동화 CRUD와 실행시각 기록 → [[db_schema/projects]] | +| `system_audit_logs` | `B01_Dashboard_Repository.py:245` | 프로젝트·회사·자동화 관리 행위 기록·조회 → [[db_schema/logs_monitoring]] | +| `system_resources` | `B01_Dashboard_Repository.py:624` | 기간별 CPU·메모리·디스크 시계열 조회 → [[db_schema/logs_monitoring]] | + +## 트랜잭션 경계 +| 항목 | 위치 | 역할 | +|---|---|---| +| 회사 생성 | `B01_Dashboard_Repository.py:307` | 회사 INSERT, 사용자 연결, 감사 로그를 한 트랜잭션으로 처리 | +| 가입 신청 처리 | `B01_Dashboard_Repository.py:471` | `FOR UPDATE`로 신청 행 잠금 후 신청·사용자 상태 동시 변경 | +| 프로젝트 수정·삭제 | `B01_Dashboard_Repository.py:222,253` | 프로젝트 변경과 감사 로그를 같은 트랜잭션으로 처리 | + +> B01 코드가 직접 기록하는 감사 테이블은 `audit_logs`가 아니라 `system_audit_logs`다. diff --git a/docs/wiki/pages/B01_Dashboard/B01_dependencies.md b/docs/wiki/pages/B01_Dashboard/B01_dependencies.md new file mode 100644 index 0000000..d267309 --- /dev/null +++ b/docs/wiki/pages/B01_Dashboard/B01_dependencies.md @@ -0,0 +1,29 @@ +--- +type: page-dependencies +status: stable +page_id: B01_Dashboard +related_pages: ["[[B01_Dashboard/B01_frontend]]", "[[B01_Dashboard/B01_backend]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B01_Dashboard import 구문 직접 확인 (2026-07-12) +--- + +# B01_Dashboard — Dependencies + +외부 라이브러리의 1차 정의는 [[../../concepts/dependencies]]에 둔다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| FastAPI | `B01_Dashboard_Router.py:5` | APIRouter·Depends·HTTPException 제공 | +| Pydantic | `B01_Dashboard_Schema.py:3` | 요청 모델 타입·범위 검증 | +| aiomysql | `B01_Dashboard_Repository.py:10` | MariaDB 비동기 Raw SQL 접근 | +| psutil | `B01_Dashboard_Repository.py:11` | 현재 CPU·메모리 사용률 측정 | +| `shutil` | `B01_Dashboard_Repository.py:6` | 저장소 디스크 사용량 측정 | +| TypeScript DOM | `B01_Dashboard_UI_Page.ts:81` | 역할별 대시보드와 이벤트 구성 | + +## 프로젝트 공통 모듈 +| 항목 | 위치 | 역할 | +|---|---|---| +| `common_util_auth` | `B01_Dashboard_Router.py:10` | 세션·SYSTEM_ADMIN 권한 의존성 → [[../../concepts/auth_rbac]] | +| `config_db.get_db_pool` | `B01_Dashboard_Repository.py:13` | MariaDB 커넥션 풀 획득 | +| `ui_template_elements` | `B01_Dashboard_UI_Resources.ts:2` | 공통 선형 차트 생성 → [[../../concepts/ui_templates]] | +| `ui_template_locale` | `B01_Dashboard_UI_Resources.ts:1` | 한·영 UI 문자열 선택 → [[../../concepts/ui_templates]] | diff --git a/docs/wiki/pages/B01_Dashboard/B01_frontend.md b/docs/wiki/pages/B01_Dashboard/B01_frontend.md new file mode 100644 index 0000000..70d9ff3 --- /dev/null +++ b/docs/wiki/pages/B01_Dashboard/B01_frontend.md @@ -0,0 +1,55 @@ +--- +type: page-frontend +status: stable +page_id: B01_Dashboard +related_pages: ["[[B01_Dashboard/B01_backend]]", "[[B01_Dashboard/B01_api]]", "[[B01_Dashboard/B01_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B01_Dashboard 실 코드 직접 확인 (2026-07-12) +--- + +# B01_Dashboard — Frontend + +## 파일과 진입점 +| 항목 | 위치 | 역할 | +|---|---|---| +| `renderB01Dashboard()` | `B01_Dashboard_UI_Page.ts:81` | 사용자 역할과 회사 상태에 맞는 대시보드 렌더링 | +| `request()` | `B01_Dashboard_Api_Fetch.ts:171` | 쿠키 포함 요청과 공통 오류 처리 | +| `buildResourcePanel()` | `B01_Dashboard_UI_Resources.ts:13` | CPU·메모리·디스크 현황과 추이 차트 생성 | +| `B01_Dashboard_UI_Style.css` | `B01_Dashboard_UI_Style.css:1` | 대시보드·표·워크플로우·모달 스타일 | + +## UI 권한 헬퍼 +| 항목 | 위치 | 역할 | +|---|---|---| +| `canEditProject()` | `B01_Dashboard_UI_Helper.ts:3` | 프로젝트 수정 버튼 표시 판단 | +| `canDeleteProject()` | `B01_Dashboard_UI_Helper.ts:9` | SYSTEM_ADMIN 삭제 버튼 표시 판단 | +| `canAddUser()` | `B01_Dashboard_UI_Helper.ts:15` | ADMIN 이상 팀원 추가 표시 판단 | +| `canChangeRole()` | `B01_Dashboard_UI_Helper.ts:19` | SYSTEM_ADMIN 역할 변경 표시 판단 | +| `canDeleteUser()` | `B01_Dashboard_UI_Helper.ts:24` | 사용자 제거 표시 판단 | +| `canManageAutomation()` | `B01_Dashboard_UI_Helper.ts:30` | ADMIN 이상 자동화 관리 표시 판단 | + +> UI 헬퍼는 표시만 제어한다. 최종 권한 검증은 백엔드가 수행한다. 상세: [[../../concepts/auth_rbac]]. + +## 모달 +| 항목 | 위치 | 역할 | +|---|---|---| +| `openEditProjectModal()` | `B01_Dashboard_UI_Modals.ts:75` | 프로젝트 기본정보 수정 | +| `openDeleteProjectModal()` | `B01_Dashboard_UI_Modals.ts:127` | 프로젝트 삭제 확인 | +| `openEditUserModal()` | `B01_Dashboard_UI_Modals.ts:138` | 사용자 정보 수정 | +| `openChangeRoleModal()` | `B01_Dashboard_UI_Modals.ts:183` | 사용자 역할 변경 | +| `openDeleteUserModal()` | `B01_Dashboard_UI_Modals.ts:199` | 사용자 제거 확인 | +| `openCreateCompanyModal()` | `B01_Dashboard_UI_Modals.ts:210` | 회사 생성 | +| `openFindCompanyModal()` | `B01_Dashboard_UI_Modals.ts:235` | 회사 검색·가입 신청 | +| `openAddMemberModal()` | `B01_Dashboard_UI_Modals.ts:273` | 회사 팀원 추가 | +| `openAutomationModal()` | `B01_Dashboard_UI_Modals.ts:286` | 프로젝트 자동화 조회·관리 | + +## 공유 자원 연결 +| 항목 | 위치 | 역할 | +|---|---|---| +| 인증·역할 | `B01_Dashboard_UI_Page.ts:81` | 역할별 섹션 제어 → [[../../concepts/auth_rbac]] | +| workflow 상태 | `B01_Dashboard_Api_Fetch.ts:370` | 프로젝트 카드 단계 표시 → [[../../concepts/workflow_state]] | +| 공통 UI | `B01_Dashboard_UI_Resources.ts:2` | `createLineChart()` 사용 → [[../../concepts/ui_templates]] | + +## 기술부채 +| 항목 | 위치 | 역할 | +|---|---|---| +| 700줄 초과 | `B01_Dashboard_UI_Page.ts:1` | 739줄로 프로젝트 단일 파일 제한 초과; 기능별 분할 검토 필요 | diff --git a/docs/wiki/pages/B02_ProjRegister/B02_backend.md b/docs/wiki/pages/B02_ProjRegister/B02_backend.md new file mode 100644 index 0000000..b282cb7 --- /dev/null +++ b/docs/wiki/pages/B02_ProjRegister/B02_backend.md @@ -0,0 +1,72 @@ +--- +status: stable +page_id: B02_ProjRegister +related_pages: ["[[B02_ProjRegister/B02_frontend]]", "[[B02_ProjRegister/B02_db]]", "[[B01_Dashboard/B01_backend]]", "[[B03_FileInput/B03_backend]]", "[[workflow_state]]", "[[storage_paths]]"] +last_updated: 2026-07-12 +--- + +# B02_ProjRegister — Backend + +신규 임도 설계 프로젝트 생성. DB 저장 + 저장소 폴더 초기화 + 워크플로우 7단계 시드 + 감사 로그. + +> ⚠️ raw structure.md에는 B02가 프론트만 있는 것으로 기재됐으나, 실 코드에 백엔드가 이미 구현됨 (2026-07-12 확인). + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `B02_ProjRegister_Router.py` | `B02_ProjRegister/B02_ProjRegister_Router.py:1-44` | 프로젝트 생성 API (prefix `/api/b02`) | +| `B02_ProjRegister_Schema.py` | `B02_ProjRegister/B02_ProjRegister_Schema.py:1-30` | 요청/응답 Pydantic 모델 2종 | +| `B02_ProjRegister_Repository.py` | `B02_ProjRegister/B02_ProjRegister_Repository.py:1-136` | Raw SQL 저장소 + 저장소 초기화 | + +## API 엔드포인트 + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `POST /api/b02/project` | `B02_ProjRegister/B02_ProjRegister_Router.py:15` | 신규 프로젝트 생성. `require_company`로 회사 연결 확인 | + +## 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `post_project()` | `B02_ProjRegister/B02_ProjRegister_Router.py:15` | 세션 company_id 검증 → create_project 호출, ValueError→400, 기타→500 | +| `create_project()` | `B02_ProjRegister/B02_ProjRegister_Repository.py:44` | 트랜잭션: projects INSERT + 워크플로우 시드 + 감사로그 + 저장소 초기화 | +| `get_project_by_id()` | `B02_ProjRegister/B02_ProjRegister_Repository.py:120` | 프로젝트 단건 조회(deleted_at IS NULL) | +| `_build_project_storage()` | `B02_ProjRegister/B02_ProjRegister_Repository.py:20` | 저장 경로 생성 + 저장소 루트 이탈 방지 검증 | +| `_initialize_project_storage()` | `B02_ProjRegister/B02_ProjRegister_Repository.py:29` | 단계별 폴더 생성 + workflow.json/project_manifest.json 원자적 기록 | + +## 요청/응답 스키마 (Pydantic) + +| 모델 | 위치 | 필드 | +|---|---|---| +| `CreateProjectRequest` | `B02_ProjRegister/B02_ProjRegister_Schema.py:6` | name(1~255), region(1~100), road_type(main/branch/fire/stream), project_year(2000~2100), estimated_length_m?(≥0), memo?(≤1000) | +| `CreateProjectResponse` | `B02_ProjRegister/B02_ProjRegister_Schema.py:17` | project_id, name, region, road_type, project_year, estimated_length_m, memo, status, storage_path, created_at | + +## 생성 로직 (create_project 트랜잭션) + +1. `project_id = uuid4()`, 저장 경로 생성·검증(`_build_project_storage`) +2. **트랜잭션 시작**: + - `projects` INSERT (status `'NEW'`, crs_epsg `5178` 고정) + - `initialize_project_stages(cursor, project_id)` — 워크플로우 7단계 시드 → [[workflow_state]] + - `system_audit_logs` INSERT (`PROJECT_CREATE`, resource_type `project`) + - `_initialize_project_storage()` — 저장소 폴더 + workflow.json + project_manifest.json + - commit (실패 시 rollback) +3. 생성된 프로젝트 재조회 후 반환 + +## DB 저장 컬럼 (projects INSERT) + +`id, user_id, company_id, name, region, road_type, project_year, estimated_length_m, memo, status('NEW'), crs_epsg(5178), storage_path, created_at, updated_at` +→ 테이블 정의 → [[db_schema/projects]] + +## 의존성 (공통 유틸) + +- [[common_util]] — `common_util_auth`(`require_company`), `common_util_json`(`atomic_write_json`), `common_util_storage`(`PROJECT_STORAGE_LAYOUT_V2`), `common_util_workflow`(`load_project_workflow`), `common_util_workflow_state`(`initialize_project_stages`) +- 워크플로우 시드 → [[workflow_state]] +- 저장소 경로 규칙 → [[storage_paths]] +- `config_system` — `STORAGE_BASE_DIR` +- DB → [[db_schema/projects]], `system_audit_logs` → [[db_schema/logs_monitoring]] + +## 참고 + +- 프로젝트 생성이 워크플로우 진입점: 생성 직후 프론트는 B03_FileInput으로 이동 +- `workflow.json`은 저장소에 기록되나 실제 단계 판정은 `project_workflow_stages`(DB)가 SSOT → [[workflow_state]] diff --git a/docs/wiki/pages/B02_ProjRegister/B02_db.md b/docs/wiki/pages/B02_ProjRegister/B02_db.md new file mode 100644 index 0000000..d0bf9f0 --- /dev/null +++ b/docs/wiki/pages/B02_ProjRegister/B02_db.md @@ -0,0 +1,30 @@ +--- +status: stable +page_id: B02_ProjRegister +related_pages: ["[[B02_ProjRegister/B02_backend]]", "[[B02_ProjRegister/B02_frontend]]", "[[db_schema/projects]]", "[[workflow_state]]"] +last_updated: 2026-07-12 +--- + +# B02_ProjRegister — DB + +이 페이지가 쓰는 테이블 (정의는 concepts에, 여기선 용도만). + +## 쓰는 테이블 + +| 테이블 | 이 페이지의 용도 | 정의 | +|---|---|---| +| `projects` | 신규 프로젝트 INSERT (status `'NEW'`, crs_epsg `5178`). 단건 조회 | [[db_schema/projects]] | +| `project_workflow_stages` | 생성 시 7단계 시드(`initialize_project_stages`) | [[workflow_state]] | +| `system_audit_logs` | `PROJECT_CREATE` 행위 기록 | [[db_schema/logs_monitoring]] | + +## 저장소(파일시스템) + +- `storage/{company_id}/{user_id}/{project_id}/` 생성 + `workflow.json`/`project_manifest.json` 원자적 기록 +- 경로 생성 책임·규칙 → [[storage_paths]] +- `PROJECT_STORAGE_LAYOUT_V2` 기준 단계별 폴더 + +## 참고 (계획 당시 의도) + +- 계획서(plan_workflow_state_management)에는 "생성 시 project_workflow_stages 7행 시드"가 마이그레이션 Phase 1 과제로 기재됐으나, + **실 코드에 이미 구현됨**(`B02_ProjRegister_Repository.py:90` `initialize_project_stages`). → 규칙6, 실 코드 채택 +- `workflow.json`도 저장소에 기록되나 단계 판정 SSOT는 `project_workflow_stages`(DB) → [[workflow_state]] diff --git a/docs/wiki/pages/B02_ProjRegister/B02_frontend.md b/docs/wiki/pages/B02_ProjRegister/B02_frontend.md new file mode 100644 index 0000000..cde0108 --- /dev/null +++ b/docs/wiki/pages/B02_ProjRegister/B02_frontend.md @@ -0,0 +1,83 @@ +--- +status: stable +page_id: B02_ProjRegister +related_pages: ["[[B02_ProjRegister/B02_backend]]", "[[B02_ProjRegister/B02_db]]", "[[ui_templates]]", "[[a00_app_shell_framework]]"] +last_updated: 2026-07-12 +--- + +# B02_ProjRegister — Frontend + +신규 임도 설계 프로젝트 등록 폼. 기본정보(이름·지역·임도종류·연도·연장·메모) 입력 → 생성 후 B03으로 이동. + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `B02_ProjRegister_UI_Page.ts` | `B02_ProjRegister/B02_ProjRegister_UI_Page.ts:1-179` | 등록 폼 렌더링 + 제출 로직 | +| `B02_ProjRegister_UI_Style.css` | `B02_ProjRegister/B02_ProjRegister_UI_Style.css:1-66` | 스타일 (theme.css 변수만 사용) | + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderB02ProjRegister(root)` | `B02_ProjRegister/B02_ProjRegister_UI_Page.ts:35` | 헤더+카드(2열 그리드 폼) 조립 | +| `onB02_Proj_Submit_Click()` | `B02_ProjRegister/B02_ProjRegister_UI_Page.ts:96` | 제출 핸들러(검증→fetch POST→B03 이동) | + +## 입력 필드 + +| 필드 | 컴포넌트 | 비고 | +|---|---|---| +| 프로젝트명 | createInputField | 필수 | +| 지역 | createInputField | 필수 | +| 임도 종류 | createSelectField | main/branch/fire/stream 4종 | +| 사업연도 | createInputField(number) | 기본 올해, min 2000/max 올해+5 | +| 예상 연장(m) | createInputField(number) | 선택, min 0 | +| 메모 | createInputField(text) | 선택 | + +## 제출 로직 + +1. **1차 유효성 검사**: name/region 필수, project_year 정수·2000~2100, estimated_length_m ≥0(입력 시) +2. `fetch("${API_BASE_URL}/b02/project", POST)` 직접 호출 (별도 Api_Fetch 파일 없음) + - body: name, region, road_type, project_year, estimated_length_m, memo +3. 성공: `localStorage`에 `CURRENT_PROJECT_ID_KEY`로 project_id 저장 → 성공 토스트 → `navigateTo(ROUTES.B03_FILE_INPUT)` +4. 실패: 응답 detail/message 파싱해 에러 토스트 + +## 로컬라이제이션 + +모든 텍스트는 [[ui_templates]]에서 로드. 하드코딩 금지. + +| UI 요소 | 로케일 키 | +|---|---| +| 제목/부제 | `B02_Proj_Title`, `B02_Proj_Subtitle` | +| 필드 | `B02_Proj_Field_Name`, `_Region`, `_RoadType`, `_Year`, `_Length`, `_Memo` (+각 Placeholder) | +| 임도종류 옵션 | `B02_Proj_RoadType_Main`, `_Branch`, `_Fire`, `_Stream` | +| 제출/성공 | `B02_Proj_Submit`, `B02_Proj_Success` | +| 오류 | `B02_Proj_Error_Required`, `Common_Validation_NumberRange`(공통) | + +## 스타일 (CSS) + +- `.b02-proj` — 페이지 래퍼 (max-width: 720px) +- `.b02-proj__header` — 제목+부제 +- `.b02-proj__grid` — 2열 필드 그리드 (640px 이하 1열) +- `.b02-proj__select` — 드롭다운 화살표 여백 +- `.b02-proj__submit` — 좌측 정렬 버튼 +- 폼 전체는 `createCard({ raised: true })`로 감쌈 + +## 이벤트 핸들러 + +| 함수 | 위치 | 동작 | +|---|---|---| +| `onB02_Proj_Submit_Click()` | `B02_ProjRegister/B02_ProjRegister_UI_Page.ts:96` | 프로젝트 생성 검증·제출 | + +## 의존성 + +- [[a00_app_shell_framework]] — `navigateTo()` 라우팅 +- `config_frontend.ts` — `ROUTES`, `API_BASE_URL`, `CURRENT_PROJECT_ID_KEY` +- `common_util_validate` — `isBlank` +- [[ui_templates]] — `createButton`, `createInputField`, `createSelectField`, `createCard`, `showLoadingOverlay`/`hideLoadingOverlay`, `showToast` +- 백엔드 API → [[B02_ProjRegister/B02_backend]] + +## 참고 + +- 프론트가 fetch를 직접 호출 (A08처럼 별도 API 클라이언트 파일 없음) +- 프로젝트 생성 성공 시 `CURRENT_PROJECT_ID_KEY`가 이후 워크플로우(B03~) 진입의 컨텍스트가 됨 diff --git a/docs/wiki/pages/B03_FileInput/B03_api.md b/docs/wiki/pages/B03_FileInput/B03_api.md new file mode 100644 index 0000000..7218bc2 --- /dev/null +++ b/docs/wiki/pages/B03_FileInput/B03_api.md @@ -0,0 +1,32 @@ +--- +type: page-api +status: stable +page_id: B03_FileInput +related_pages: ["[[B03_FileInput/B03_frontend]]", "[[B03_FileInput/B03_backend]]", "[[B03_FileInput/B03_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B03_FileInput_Router.py 실 코드 직접 확인 (2026-07-12) +--- + +# B03_FileInput — API + +기본 prefix: `/api/projects` (`B03_FileInput_Router.py:66`). 세션 인증과 공통 오류 형식은 [[../../concepts/auth_rbac]], [[../../concepts/api_common]]을 참조한다. + +## 일반 업로드 +| 항목 | 위치 | 역할 | +|---|---|---| +| `POST /{project_id}/files` | `B03_FileInput_Router.py:267` | LAS/TIF/TFW/PRJ/DXF 다중 업로드·메타데이터 등록 | + +## 청크 업로드 +| 항목 | 위치 | 역할 | +|---|---|---| +| `POST /{project_id}/upload-sessions` | `B03_FileInput_Router.py:400` | 청크 업로드 세션 생성 | +| `POST /{project_id}/chunks` | `B03_FileInput_Router.py:443` | 청크 1개 저장 및 진행률 반환 | +| `POST /{project_id}/finalize` | `B03_FileInput_Router.py:507` | 모든 청크 병합·원본 파일 등록 | +| `GET /{project_id}/upload-status/{session_id}` | `B03_FileInput_Router.py:623` | 세션 상태·완료 청크 인덱스 조회 | + +## workflow 조회 +| 항목 | 위치 | 역할 | +|---|---|---| +| `GET /{project_id}/workflow-state` | `B03_FileInput_Router.py:667` | `current_stage`와 7단계 상태 반환 | + +전체 경로는 `/api/projects/{project_id}/...`이며, workflow 상태 공통 정의는 [[../../concepts/workflow_state]]에 둔다. diff --git a/docs/wiki/pages/B03_FileInput/B03_backend.md b/docs/wiki/pages/B03_FileInput/B03_backend.md new file mode 100644 index 0000000..12dd394 --- /dev/null +++ b/docs/wiki/pages/B03_FileInput/B03_backend.md @@ -0,0 +1,49 @@ +--- +type: page-backend +status: stable +page_id: B03_FileInput +related_pages: ["[[B03_FileInput/B03_frontend]]", "[[B03_FileInput/B03_api]]", "[[B03_FileInput/B03_db]]", "[[B03_FileInput/B03_dependencies]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B03_FileInput 실 코드 직접 확인 (2026-07-12) +--- + +# B03_FileInput — Backend + +## 입력 검증·파일 처리 +| 항목 | 위치 | 역할 | +|---|---|---| +| `FileUploadDescriptor` | `B03_FileInput_Schema.py:11` | 경로 이탈·확장자·크기 검증 | +| `resolve_upload_destination()` | `B03_FileInput_Engine.py:15` | 프로젝트 WF0 저장 목적지 결정 | +| `save_upload_stream()` | `B03_FileInput_Engine.py:31` | 일반 업로드 스트림 저장 | +| `resolve_chunk_session_dir()` | `B03_FileInput_Engine.py:64` | 임시 청크 디렉터리 결정 | +| `save_upload_chunk()` / `merge_upload_chunks()` | `B03_FileInput_Engine.py:77,124` | 청크 저장·순서 병합 | +| `remove_chunk_session()` | `B03_FileInput_Engine.py:173` | 청크 임시 디렉터리 정리 | + +## 메타데이터 분석 +| 항목 | 위치 | 역할 | +|---|---|---| +| `analyze_las_metadata()` | `B03_FileInput_Engine_Analyze.py:13` | LAS 포인트 수·범위·밀도 분석 | +| `analyze_prj_metadata()` | `B03_FileInput_Engine_Analyze.py:62` | PRJ CRS 분석 | +| `analyze_tfw_metadata()` | `B03_FileInput_Engine_Analyze.py:95` | TFW 변환계수 분석 | +| `analyze_tif_metadata()` | `B03_FileInput_Engine_Analyze.py:119` | TIF 래스터·CRS·범위 분석 | +| `analyze_input_metadata()` | `B03_FileInput_Engine_Analyze.py:146` | 확장자별 분석 라우팅 | + +## 저장소 +| 항목 | 위치 | 역할 | +|---|---|---| +| `create_input_file()` | `B03_FileInput_Repository.py:11` | `input_files` 원본 메타데이터 등록 | +| `get_project_storage_relative_path()` | `B03_FileInput_Repository.py:64` | 프로젝트 상대 저장경로 조회 | +| `create_upload_session()` / `get_upload_session()` | `B03_FileInput_Repository.py:89,135` | 청크 세션 생성·조회 | +| `upsert_upload_chunk()` / `list_completed_chunk_indexes()` | `B03_FileInput_Repository.py:165,216` | 청크 기록·완료 인덱스 조회 | +| `mark_upload_session_completed()` / `mark_upload_session_failed()` | `B03_FileInput_Repository.py:236,253` | 세션 성공·실패 상태 기록 | + +## workflow·알림 +| 항목 | 위치 | 역할 | +|---|---|---| +| `trigger_wf1_analysis_and_email()` | `B03_FileInput_Router.py:147` | WF1 분석 실행과 완료·실패 이메일 연결 | +| `start_stage()` | `B03_FileInput_Router.py:175` | WF1 시작, stage 1 IN_PROGRESS 전이 | +| `complete_stage()` | `B03_FileInput_Router.py:224,347,570` | WF0/WF1 완료 전이 | +| `fail_stage()` | `B03_FileInput_Router.py:256` | WF1 실패 전이 | +| `get_project_workflow_state()` | `B03_FileInput_Router.py:668` | 단일 프로젝트 workflow 상태 반환 | + +workflow 정의: [[../../concepts/workflow_state]], 저장경로: [[../../concepts/storage_paths]]. diff --git a/docs/wiki/pages/B03_FileInput/B03_db.md b/docs/wiki/pages/B03_FileInput/B03_db.md new file mode 100644 index 0000000..fc27317 --- /dev/null +++ b/docs/wiki/pages/B03_FileInput/B03_db.md @@ -0,0 +1,29 @@ +--- +type: page-db +status: stable +page_id: B03_FileInput +related_pages: ["[[B03_FileInput/B03_backend]]", "[[B03_FileInput/B03_api]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B03_FileInput_Repository.py 실 코드 직접 확인 (2026-07-12) +--- + +# B03_FileInput — DB 사용 관계 + +공유 테이블 정의는 [[db_schema/files_surface]]에서 1차 관리한다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `input_files` | `B03_FileInput_Repository.py:11` | 원본 파일 유형·상대경로·크기·메타데이터 등록 | +| `upload_sessions` | `B03_FileInput_Repository.py:89` | 청크 업로드 세션과 전체 파일 정보 저장 | +| `upload_chunks` | `B03_FileInput_Repository.py:165` | 청크 인덱스·해시·크기 저장 | +| `projects` | `B03_FileInput_Router.py:111` | 업로드·WF1 진행상태 호환 캐시 갱신 | +| `project_workflow_stages` | `B03_FileInput_Router.py:175` | stage 0/1 시작·완료·실패 전이와 상태 조회 | + +## 파일 경로 +| 항목 | 위치 | 역할 | +|---|---|---| +| 원본 입력 | `B03_FileInput_Engine.py:15` | `B03_FileInput/input/{file_type}/`에 저장 | +| 청크 임시파일 | `B03_FileInput_Engine.py:64` | 프로젝트 저장소 하위 임시 세션 디렉터리 사용 | +| DB 저장값 | `B03_FileInput_Repository.py:64` | 프로젝트 루트 기준 상대경로 저장 | + +경로 규칙 상세: [[storage_paths]]. diff --git a/docs/wiki/pages/B03_FileInput/B03_dependencies.md b/docs/wiki/pages/B03_FileInput/B03_dependencies.md new file mode 100644 index 0000000..fb0dc59 --- /dev/null +++ b/docs/wiki/pages/B03_FileInput/B03_dependencies.md @@ -0,0 +1,30 @@ +--- +type: page-dependencies +status: stable +page_id: B03_FileInput +related_pages: ["[[B03_FileInput/B03_frontend]]", "[[B03_FileInput/B03_backend]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B03_FileInput import 구문 직접 확인 (2026-07-12) +--- + +# B03_FileInput — Dependencies + +공유 의존성의 1차 정의는 [[../../concepts/dependencies]]에 둔다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| FastAPI | `B03_FileInput_Router.py:10` | multipart 파일·폼 요청과 라우터 | +| Pydantic | `B03_FileInput_Schema.py:6` | 파일명·크기·확장자·청크 요청 검증 | +| aiomysql | `B03_FileInput_Router.py:9` | MariaDB 비동기 트랜잭션 | +| laspy | `B03_FileInput_Engine_Analyze.py:7` | LAS 포인트클라우드 메타데이터 분석 | +| rasterio | `B03_FileInput_Engine_Analyze.py:9` | TIF 래스터 메타데이터 분석 | +| pyproj | `B03_FileInput_Engine_Analyze.py:10` | PRJ/TIF CRS 해석 | +| numpy | `B03_FileInput_Engine_Analyze.py:8` | LAS 통계 계산 | + +## 공통 모듈 +| 항목 | 위치 | 역할 | +|---|---|---| +| `common_util_storage` | `B03_FileInput_Engine.py:11` | 단계별 저장경로 생성·해석 → [[../../concepts/storage_paths]] | +| `common_util_workflow_state` | `B03_FileInput_Router.py:50` | stage 상태 전이 → [[../../concepts/workflow_state]] | +| `common_util_email` | `B03_FileInput_Email.py:8` | 업로드·분석 완료/실패 이메일 발송 | +| `common_util_json` | `B03_FileInput_Router.py:47` | workflow 보조 JSON 원자적 저장 | diff --git a/docs/wiki/pages/B03_FileInput/B03_frontend.md b/docs/wiki/pages/B03_FileInput/B03_frontend.md new file mode 100644 index 0000000..2343ff2 --- /dev/null +++ b/docs/wiki/pages/B03_FileInput/B03_frontend.md @@ -0,0 +1,46 @@ +--- +type: page-frontend +status: stable +page_id: B03_FileInput +related_pages: ["[[B03_FileInput/B03_backend]]", "[[B03_FileInput/B03_api]]", "[[B03_FileInput/B03_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B03_FileInput 실 코드 직접 확인 (2026-07-12) +--- + +# B03_FileInput — Frontend + +## 페이지·업로드 흐름 +| 항목 | 위치 | 역할 | +|---|---|---| +| `renderB03FileInput()` | `B03_FileInput_UI_Page.ts:170` | 파일 입력 화면과 이벤트 등록 | +| 청크 세션 생성 | `B03_FileInput_UI_Page.ts:515` | 대용량 파일을 청크 업로드로 시작 | +| 청크 병합 완료 | `B03_FileInput_UI_Page.ts:558` | 서버 병합 결과를 상태에 저장 | +| WF1 진행률 폴링 | `B03_FileInput_UI_Page.ts:577` | 분석 상태와 진행률 갱신 | +| B04 이동 | `B03_FileInput_UI_Page.ts:609,693` | WF1 완료 시 `ROUTES.B04_WF1_SURFACE`로 이동 | + +## API 클라이언트 +| 항목 | 위치 | 역할 | +|---|---|---| +| `uploadProjectFiles()` | `B03_FileInput_Api_Fetch.ts:60` | 일반 다중 파일 업로드 | +| `createUploadSession()` | `B03_FileInput_Api_Fetch.ts:82` | 청크 세션 생성 | +| `uploadFileChunk()` | `B03_FileInput_Api_Fetch.ts:100` | 단일 청크 전송 | +| `finalizeUploadSession()` | `B03_FileInput_Api_Fetch.ts:119` | 청크 병합 요청 | +| `fetchUploadStatus()` | `B03_FileInput_Api_Fetch.ts:133` | 청크 업로드 상태 조회 | +| `checkWF1AnalysisStatus()` | `B03_FileInput_Api_Fetch.ts:154` | WF1 분석 상태 조회 | + +## 브라우저 상태·오프라인 보조 +| 항목 | 위치 | 역할 | +|---|---|---| +| `loadB03ProjectState()` | `B03_FileInput_State.ts:23` | 프로젝트별 저장 상태 복원 | +| `saveB03UploadedFile()` | `B03_FileInput_State.ts:34` | 업로드 파일 결과 저장 | +| `updateB03AnalysisState()` | `B03_FileInput_State.ts:53` | 분석 상태·진행률 저장 | +| `restoreB03ProjectState()` | `B03_FileInput_State.ts:71` | 재진입 시 상태와 완료 콜백 복원 | +| `registerB03ServiceWorker()` | `B03_FileInput_UI_Page.ts:622` | Service Worker 등록 시도와 안내 토스트 | + +공통 UI는 [[../../concepts/ui_templates]], 단계 상태는 [[../../concepts/workflow_state]]를 참조한다. + +## 기술부채 +| 항목 | 위치 | 역할 | +|---|---|---| +| 700줄 근접 | `B03_FileInput_UI_Page.ts:1` | 695줄; 추가 기능은 상태·업로드·화면 분할 검토 필요 | +| CSS 대형 파일 | `B03_FileInput_UI_Style.css:1` | 376줄; 공통 테마와 페이지 스타일 분리 검토 | diff --git a/docs/wiki/pages/B04_wf1_Surface/B04_api.md b/docs/wiki/pages/B04_wf1_Surface/B04_api.md new file mode 100644 index 0000000..547b920 --- /dev/null +++ b/docs/wiki/pages/B04_wf1_Surface/B04_api.md @@ -0,0 +1,43 @@ +--- +status: stable +page_id: B04_wf1_Surface +related_pages: ["[[B04_wf1_Surface/B04_backend]]", "[[B04_wf1_Surface/B04_frontend]]", "[[B04_wf1_Surface/B04_db]]", "[[B04_wf1_Surface/B04_dependencies]]"] +last_updated: 2026-07-12 +--- + +# B04_wf1_Surface — API + +실제 라우터 prefix: `/api/projects` (`B04_wf1_Surface_Router.py:41`). 총 12개 엔드포인트. + +> ⚠️ 이전 계획서 기반 api.md에는 "추정 경로 surface/analyze·models 2개"로만 기재됐으나, +> 실 코드는 아래 12개(분석·모델·미리보기·등고선·VWorld·GeoJSON 포함). 실 코드 채택(규칙6). + +## 엔드포인트 + +| 엔드포인트 | 위치 | 역할 | +|---|---|---| +| `POST /{project_id}/surface/analyze` | `B04_wf1_Surface_Router.py:147` | LAS 구조화+지면필터+모델생성 실행, DB 기록, WF1 stage 전이 | +| `GET /{project_id}/surface/models` | `B04_wf1_Surface_Router.py:241` | 생성된 지표면 모델 목록 | +| `GET /{project_id}/surface/input-files` | `B04_wf1_Surface_Router.py:260` | 분석 대상 LAS/LAZ 입력파일 목록 | +| `GET /{project_id}/surface/point-cloud` | `B04_wf1_Surface_Router.py:279` | 3D 미리보기용 포인트클라우드 샘플 | +| `GET /{project_id}/surface/ground-stats` | `B04_wf1_Surface_Router.py:341` | 필터별 지면 포인트 통계 | +| `GET /{project_id}/surface/status` | `B04_wf1_Surface_Router.py:372` | WF1 분석 상태 조회 (workflow_state 우선, 레거시 폴백) | +| `GET /{project_id}/surface/models/{model_id}/preview` | `B04_wf1_Surface_Router.py:484` | 모델 미리보기 | +| `GET /{project_id}/surface/models/{model_id}/contour` | `B04_wf1_Surface_Router.py:557` | 등고선 생성/조회 | +| `GET /{project_id}/vworld-meta` | `B04_wf1_Surface_Router.py:643` | VWorld 배경지도 메타 | +| `GET /{project_id}/vworld-map` | `B04_wf1_Surface_Router.py:676` | VWorld 배경지도 타일 | +| `GET /{project_id}/geojson` | `B04_wf1_Surface_Router.py:712` | GIS 벡터 GeoJSON | + +## 요청/응답 스키마 (Pydantic) + +| 모델 | 위치 | 역할 | +|---|---|---| +| `SurfaceAnalyzeRequest` | `B04_wf1_Surface_Schema.py:16` | input_file_id, source_filters?, methods?, force. resolved_filters/methods로 화이트리스트 검증 | +| `SurfaceAnalyzeResponse` | `B04_wf1_Surface_Schema.py:97` | ground_summary, manifest_status, surface_model_ids | +| `SurfaceModelSummary` / `SurfaceModelListResponse` | `B04_wf1_Surface_Schema.py:45,107` | 모델 요약/목록 | +| `SurfaceInputFileSummary` / `...ListResponse` | `B04_wf1_Surface_Schema.py:56,69` | 입력파일 요약/목록 | +| `SurfacePointCloudSampleResponse` | `B04_wf1_Surface_Schema.py:77` | 포인트클라우드 샘플(bounds/points/rgb) | +| `SurfaceGroundStatsResponse` | `B04_wf1_Surface_Schema.py:89` | 필터별 통계 | + +- 공통 오류 포맷 `{"status":"error","message":...}` → [[schema_common]] +- 분석 파라미터 화이트리스트: `SURFACE_MODEL_SOURCE_FILTERS`+`ransac`, `SURFACE_MODEL_PRECOMPUTE` (config_system) diff --git a/docs/wiki/pages/B04_wf1_Surface/B04_backend.md b/docs/wiki/pages/B04_wf1_Surface/B04_backend.md new file mode 100644 index 0000000..8866629 --- /dev/null +++ b/docs/wiki/pages/B04_wf1_Surface/B04_backend.md @@ -0,0 +1,71 @@ +--- +status: stable +page_id: B04_wf1_Surface +related_pages: ["[[B04_wf1_Surface/B04_frontend]]", "[[B04_wf1_Surface/B04_api]]", "[[B04_wf1_Surface/B04_db]]", "[[B04_wf1_Surface/B04_dependencies]]", "[[B03_FileInput/B03_backend]]", "[[B05_wf2_Route/B05_backend]]"] +last_updated: 2026-07-12 +--- + +# B04_wf1_Surface — Backend + +WF1 지표면 분석. LAS 구조화 → 지면 필터 → 지표면 5종 모델 생성 → 스무딩/등고선. 무거운 연산은 `asyncio.to_thread`로 실행. + +## 파일 구성 (오케스트레이터/저장소/라우터) + +| 파일 | 위치 | 역할 | +|---|---|---| +| `B04_wf1_Surface_Router.py` | `B04_wf1_Surface_Router.py:1-739` | `/api/projects` 12개 엔드포인트 → [[B04_wf1_Surface/B04_api]] | +| `B04_wf1_Surface_Schema.py` | `B04_wf1_Surface_Schema.py:1-113` | 요청/응답 검증 | +| `B04_wf1_Surface_Repository.py` | `B04_wf1_Surface_Repository.py:1-236` | processed_point_cloud/surface_models Raw SQL | +| `B04_wf1_Surface_Engine.py` | `B04_wf1_Surface_Engine.py:27` | `run_surface_analysis()` 오케스트레이터(구조화→필터→모델빌드) | + +## 엔진 서브모듈 + +| 파일 | 역할 | +|---|---| +| `..._Engine_Structurize.py` | LAS/LAZ 구조화(structured.npz) | +| `..._Engine_Ground.py` | 지면 마스크 생성/요약(`build_ground_masks`, `summarize_masks`) | +| `..._Engine_Filter_Grid/CSF/PMF/RANSAC.py` | 지면 필터 4종 | +| `..._Engine_Pipeline.py` | `build_all_terrain_models()` 지표면 모델 파이프라인 + manifest | +| `..._Engine_ModelContext.py` | 모델 공통 컨텍스트/메시 유틸 | +| `..._Engine_ModelBuild.py` | TIN/DTM/NURBS/implicit/meshfree 생성 | +| `..._Engine_Smooth.py` | DTM/TIN 스무딩 | +| `..._Engine_Contour.py` | 등고선 생성 | +| `..._Engine_GisVector.py` / `..._Engine_VWorld.py` / `..._Engine_MvtHelper.py` | GIS 벡터 / VWorld 배경지도 / MVT 헬퍼 | + +## 주요 함수 (Router) + +| 함수 | 위치 | 역할 | +|---|---|---| +| `analyze_surface()` | `B04_wf1_Surface_Router.py:147` | 분석 실행: start_stage→to_thread(run_surface_analysis)→DB저장→complete_stage | +| `save_surface_analysis_to_db()` | `B04_wf1_Surface_Router.py:90` | processed_point_cloud + surface_models INSERT (호출자 트랜잭션) | +| `get_wf1_analysis_status()` | `B04_wf1_Surface_Router.py:372` | 상태 조회(project_workflow_stages 우선, 폴백) | +| `update_project_status()` | `B04_wf1_Surface_Router.py:76` | ⚠️ 정의만 있고 **호출처 없음**(죽은 코드, grep 확인) | + +## 워크플로우 상태 전이 + +analyze 흐름에서 `project_workflow_stages`(stage 1) 전이: +- `start_stage(cursor, project_id, 1, params)` — `B04_wf1_Surface_Router.py:168` +- `complete_stage(cursor, project_id, 1)` — `B04_wf1_Surface_Router.py:209` +- `fail_stage(cursor, project_id, 1, err)` — `B04_wf1_Surface_Router.py:227,233` + +→ SSOT 정의·전파 규칙 → [[workflow_state]] + +## ⚠️ 레거시 폴백 (416,420줄) + +`get_wf1_analysis_status()`는 `project_workflow_stages`를 **우선** 조회하고, +행이 없을 때만(백필 미작동 대비) `projects.status` 문자열 비교로 폴백: +- 416줄 `project_status == "WF1_COMPLETE"`, 420줄 `"WF1_ANALYZING"` (`B04_wf1_Surface_Router.py:412-427`) + +이전 wiki는 "구형 잔재, 정리 필요"로 표기했으나, 실제로는 정상 경로가 아닌 **방어적 폴백**. +SSOT가 안정화되면 제거 가능하나 현재는 백필 안전장치로 동작 중. + +## 책임 + +LAS 구조화·지면 필터 → 변환 포인트클라우드 저장 → 지표면 5종 모델 생성 → 스무딩/등고선/미리보기 → 모델 확정 및 하위 단계(B05) stale 전파([[workflow_state]]). + +## 의존성 + +- [[common_util]] — `common_util_workflow_state`(start/complete/fail_stage), 저장소 경로 헬퍼 +- 외부 라이브러리 → [[B04_wf1_Surface/B04_dependencies]] +- DB → [[B04_wf1_Surface/B04_db]] +- config: `SURFACE_MODEL_SOURCE_FILTERS`, `SURFACE_MODEL_PRECOMPUTE`, `build_surface_model_config` diff --git a/docs/wiki/pages/B04_wf1_Surface/B04_db.md b/docs/wiki/pages/B04_wf1_Surface/B04_db.md new file mode 100644 index 0000000..394e610 --- /dev/null +++ b/docs/wiki/pages/B04_wf1_Surface/B04_db.md @@ -0,0 +1,34 @@ +--- +status: stable +page_id: B04_wf1_Surface +related_pages: ["[[B04_wf1_Surface/B04_backend]]", "[[B04_wf1_Surface/B04_api]]", "[[B04_wf1_Surface/B04_dependencies]]", "[[db_schema/files_surface]]"] +last_updated: 2026-07-12 +--- + +# B04_wf1_Surface — DB + +이 페이지가 쓰는 테이블 (정의는 concepts에, 여기선 용도만). + +## 쓰는 테이블 + +| 테이블 | 이 페이지의 용도 | 정의 | +|---|---|---| +| `processed_point_cloud` | 필터/변환된 포인트클라우드 저장(input_files 참조) | [[db_schema/files_surface]] | +| `surface_models` | TIN/DTM/NURBS/implicit/meshfree 모델 메타데이터 | [[db_schema/files_surface]] | +| `terrain_layers` | 등고선 등 파생 레이어 | [[db_schema/files_surface]] | +| `project_workflow_stages` | WF1(stage 1) 상태 전이·조회 | [[workflow_state]] | +| `input_files` | 분석 대상 LAS/LAZ 조회 | [[db_schema/files_surface]] | +| `projects` | (레거시 폴백) status 조회 | [[db_schema/projects]] | + +## Repository 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `create_processed_point_cloud()` | `B04_wf1_Surface_Repository.py` | processed_point_cloud INSERT | +| (surface_models INSERT) | `B04_wf1_Surface_Repository.py` | 모델별 메타데이터 저장 | +| `get_input_file()` | `B04_wf1_Surface_Repository.py` | 입력 LAS 단건 조회 | + +## 참고 + +- `save_surface_analysis_to_db()`([[B04_wf1_Surface/B04_backend]])가 processed_point_cloud + surface_models를 한 트랜잭션으로 저장(호출자가 begin/commit) +- WF1 단계 판정 SSOT는 `project_workflow_stages`. `projects.status`는 레거시 폴백 경로에서만 참조 → [[workflow_state]] diff --git a/docs/wiki/pages/B04_wf1_Surface/B04_dependencies.md b/docs/wiki/pages/B04_wf1_Surface/B04_dependencies.md new file mode 100644 index 0000000..2152491 --- /dev/null +++ b/docs/wiki/pages/B04_wf1_Surface/B04_dependencies.md @@ -0,0 +1,34 @@ +--- +status: stable +page_id: B04_wf1_Surface +related_pages: ["[[B04_wf1_Surface/B04_backend]]", "[[B04_wf1_Surface/B04_frontend]]", "[[dependencies]]"] +last_updated: 2026-07-12 +--- + +# B04_wf1_Surface — Dependencies + +이 페이지가 쓰는 외부 라이브러리 (공통 정의는 [[dependencies]]). + +## 백엔드 (Python) + +| 라이브러리 | 용도 | +|---|---| +| Laspy | LAS/LAZ 구조화 | +| Whitebox / Rasterio | 지면 필터·DEM 처리 | +| Trimesh | TIN/메시 모델 | +| Geopandas / Shapely | GIS 벡터(GeoJSON, 등고선) | +| NumPy | structured.npz 등 배열 연산 | + +→ 공통 정의·버전 → [[dependencies]] + +## 프론트엔드 (TypeScript) + +| 라이브러리 | 위치 | 용도 | +|---|---|---| +| **three.js** | `B04_wf1_Surface_UI_Viewer.ts:1`, `..._TerrainViewer.ts` | WebGL 3D 뷰어(WebGLRenderer, OrbitControls, THREE.Points/Mesh) | + +## ⚠️ dependencies concept 정정 필요 + +[[dependencies]]의 "HTML5 Canvas / WebGL — WebCAD 렌더링 (B04~B06 뷰어, **현재 미구현**)"은 +실 코드와 불일치. B04는 three.js로 3D 뷰어가 **구현됨** → [[B04_wf1_Surface/B04_frontend]]. +dependencies.md에 three.js 항목 추가·"미구현" 문구 정정 필요 (B05/B06 뷰어 상태는 각 페이지 인제스트 시 확인). diff --git a/docs/wiki/pages/B04_wf1_Surface/B04_frontend.md b/docs/wiki/pages/B04_wf1_Surface/B04_frontend.md new file mode 100644 index 0000000..5f5a9bf --- /dev/null +++ b/docs/wiki/pages/B04_wf1_Surface/B04_frontend.md @@ -0,0 +1,66 @@ +--- +status: stable +page_id: B04_wf1_Surface +related_pages: ["[[B04_wf1_Surface/B04_backend]]", "[[B04_wf1_Surface/B04_api]]", "[[B04_wf1_Surface/B04_dependencies]]", "[[ui_templates]]"] +last_updated: 2026-07-12 +--- + +# B04_wf1_Surface — Frontend + +WF1 지표면 분석 화면. 워크플로우 레이아웃(필터/표현 폼 + 모델 목록) + **three.js 기반 3D 뷰어**(포인트클라우드/지형). + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `B04_wf1_Surface_UI_Page.ts` | `B04_wf1_Surface_UI_Page.ts:1-377` | 페이지 조립 + 분석 실행/폴링/뷰어 렌더 | +| `B04_wf1_Surface_UI_Viewer.ts` | `B04_wf1_Surface_UI_Viewer.ts:1-567` | 포인트클라우드 3D 뷰어(three.js) | +| `B04_wf1_Surface_UI_TerrainViewer.ts` | `B04_wf1_Surface_UI_TerrainViewer.ts:1-637` | 지형 메시 3D 뷰어(three.js) | +| `B04_wf1_Surface_Api_Fetch.ts` | `B04_wf1_Surface_Api_Fetch.ts:1-174` | surface API 클라이언트 | +| `B04_wf1_Surface_UI_Style.css` | `B04_wf1_Surface_UI_Style.css` | 폼 그룹/모델 카드/뷰어 스타일 | + +## ⚠️ 계획서와 실 코드 불일치 (3D 뷰어) + +이전 wiki(계획서 기반)는 **"WebCAD 3D 뷰어 미구현"**으로 기재했으나, +실 코드에는 three.js(WebGL) 기반 뷰어가 **구현되어 있음**: +- `createSurfacePointCloudViewer` (`B04_wf1_Surface_UI_Viewer.ts:187` WebGLRenderer, OrbitControls, THREE.Points) +- `createSurfaceTerrainViewer` (`B04_wf1_Surface_UI_TerrainViewer.ts`) +- UI_Page에서 import·인스턴스화(`B04_wf1_Surface_UI_Page.ts:37,38,110,356`) + +→ 규칙6, 실 코드 채택. dependencies도 three.js 반영 → [[B04_wf1_Surface/B04_dependencies]] + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderB04Surface(root)` | `B04_wf1_Surface_UI_Page.ts:95` | 워크플로우 레이아웃+뷰어 조립(async) | +| `createSurfacePointCloudViewer()` | `B04_wf1_Surface_UI_Viewer.ts:187` | 포인트클라우드 뷰어 핸들 생성 | +| `createSurfaceTerrainViewer()` | `B04_wf1_Surface_UI_TerrainViewer.ts` | 지형 메시 뷰어 핸들 생성 | + +## API 클라이언트 함수 + +| 함수 | 위치 | 대응 API | +|---|---|---| +| `analyzeSurface()` | `B04_wf1_Surface_Api_Fetch.ts:117` | `POST .../surface/analyze` | +| `listSurfaceModels()` | `B04_wf1_Surface_Api_Fetch.ts:128` | `GET .../surface/models` | +| `listSurfaceInputFiles()` | `B04_wf1_Surface_Api_Fetch.ts:134` | `GET .../surface/input-files` | +| `fetchSurfacePointCloud()` | `B04_wf1_Surface_Api_Fetch.ts:142` | `GET .../surface/point-cloud` | +| `fetchSurfaceGroundStats()` | `B04_wf1_Surface_Api_Fetch.ts:153` | `GET .../surface/ground-stats` | +| `fetchSurfaceStatus()` | `B04_wf1_Surface_Api_Fetch.ts:161` | `GET .../surface/status` | +| `getVWorldMapUrl()` / `fetchVWorldMeta()` | `B04_wf1_Surface_Api_Fetch.ts:182,186` | VWorld 배경지도 | +| `fetchGisGeoJson()` | `B04_wf1_Surface_Api_Fetch.ts:192` | `GET .../geojson` | + +## 처리 흐름 + +1. 워크플로우 레이아웃(`createWorkflowLayout`) + 스텝(`workflowSteps`) 조립 +2. 입력파일/모델 목록 로드 → 필터·표현 폼 구성 +3. 분석 실행(`analyzeSurface`) → 상태 폴링(`fetchSurfaceStatus`) +4. 완료 시 포인트클라우드(`fetchSurfacePointCloud`) → `viewer.render()` (`B04_wf1_Surface_UI_Page.ts:356`) + +## 의존성 + +- [[a00_app_shell_framework]] — `navigateTo`, `workflowSteps`(b_page_scaffold) +- `config_frontend.ts` — `API_BASE_URL`, `CURRENT_PROJECT_ID_KEY`, `ROUTES`, `RENDER_OPTIONS`, `API_TIMEOUT_MS` +- [[ui_templates]] — `createWorkflowLayout`(ui_template_workflow_layout) 등 +- **three.js** (WebGL 3D 뷰어) → [[B04_wf1_Surface/B04_dependencies]] +- 백엔드 API → [[B04_wf1_Surface/B04_api]] diff --git a/docs/wiki/pages/B05_wf2_Route/B05_api.md b/docs/wiki/pages/B05_wf2_Route/B05_api.md new file mode 100644 index 0000000..7294cd6 --- /dev/null +++ b/docs/wiki/pages/B05_wf2_Route/B05_api.md @@ -0,0 +1,28 @@ +--- +type: page-api +status: stable +page_id: B05_wf2_Route +related_pages: ["[[B05_wf2_Route/B05_frontend]]", "[[B05_wf2_Route/B05_backend]]", "[[B05_wf2_Route/B05_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B05_wf2_Route_Router.py 실 코드 직접 확인 (2026-07-12) +--- + +# B05_wf2_Route — API + +기본 prefix: `/api/projects` (`B05_wf2_Route_Router.py:30`). 공통 세션·오류 형식은 [[../../concepts/auth_rbac]], [[../../concepts/api_common]]을 참조한다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `POST /{project_id}/route/solve` | `B05_wf2_Route_Router.py:33` | RouteSolveRequest 검증, 경로 계산, 결과 3종 DB 저장 | +| `POST /{project_id}/route/confirm` | `B05_wf2_Route_Router.py:136` | 최신 DRAFT 경로를 CONFIRMED로 변경 | + +## solve 처리 결과 +| 항목 | 역할 | +|---|---| +| `route_id` | 새 경로 식별자 | +| `total_length_m` | 계산 경로 총연장 | +| `metrics` | 경사·절성토량·비용 등 통계 | +| `required_points_ok` | BP/EP/CP 조건 충족 여부 | +| `route_data_path` | GeoJSON LineString 상대경로 | + +오류는 표준 `{"status":"error","message":...}` 형식으로 반환한다. diff --git a/docs/wiki/pages/B05_wf2_Route/B05_backend.md b/docs/wiki/pages/B05_wf2_Route/B05_backend.md new file mode 100644 index 0000000..5dbae97 --- /dev/null +++ b/docs/wiki/pages/B05_wf2_Route/B05_backend.md @@ -0,0 +1,50 @@ +--- +type: page-backend +status: stable +page_id: B05_wf2_Route +related_pages: ["[[B05_wf2_Route/B05_frontend]]", "[[B05_wf2_Route/B05_api]]", "[[B05_wf2_Route/B05_db]]", "[[B05_wf2_Route/B05_dependencies]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B05_wf2_Route 실 코드 직접 확인 (2026-07-12) +--- + +# B05_wf2_Route — Backend + +## 요청·응답 모델 +| 항목 | 위치 | 역할 | +|---|---|---| +| `RoutePoint` / `CirclePoint` | `B05_wf2_Route_Schema.py:10,20` | BP·EP·CP와 AP·FP 입력 검증 | +| `RouteSolveRequest` | `B05_wf2_Route_Schema.py:30` | 지표면·알고리즘·등급·제약·가중치 검증 | +| `RouteSolveResponse` | `B05_wf2_Route_Schema.py:84` | route ID·길이·메트릭·GeoJSON 상대경로 응답 | +| `RouteConfirmResponse` | `B05_wf2_Route_Schema.py:96` | 확정 route ID와 confirmed 상태 응답 | + +## 경로 계산 엔진 +| 항목 | 위치 | 역할 | +|---|---|---| +| `run_route_design()` | `B05_wf2_Route_Engine.py:68` | 입력 모델을 경로 설계 오케스트레이터로 실행 | +| `solve_optimal_route()` | `B05_wf2_Route_Engine_Solver.py:278` | DTM 격자·비용면·선택 알고리즘 기반 최적화 | +| `single_segment_dijkstra()` | `B05_wf2_Route_Engine_Geometry.py:149` | 단일 구간 격자 Dijkstra 탐색 | +| `solve_ridge_valley_route()` | `B05_wf2_Route_Engine_RidgeValley.py:510` | ridge-valley 후보와 제약 기반 경로 탐색 | +| `load_or_build_skeleton()` | `B05_wf2_Route_Engine_Skeleton.py:275` | D8 흐름누적 skeleton 캐시·생성 | +| `_build_cost_surface()` | `B05_wf2_Route_Engine_Solver.py:173` | 경사·곡률·회피영역 기반 비용면 생성 | +| `_fillet_alignment()` | `B05_wf2_Route_Engine_RidgeValley.py:406` | 굴곡부 fillet 정렬·곡선반경 반영 | + +## 기하·결과 변환 +| 항목 | 위치 | 역할 | +|---|---|---| +| `compute_gradients()` | `B05_wf2_Route_Engine_Geometry.py:33` | 격자 경사 계산 | +| `circumradius_2d()` | `B05_wf2_Route_Engine_Geometry.py:52` | 3점 곡선반경 계산 | +| `circle_intrusions()` | `B05_wf2_Route_Engine_Geometry.py:90` | 회피·금지 원 침범 검사 | +| `_route_geojson()` / `_sample_render_points()` | `B05_wf2_Route_Engine.py:20,32` | LineString 저장·렌더링 포인트 변환 | + +## 라우터·workflow +| 항목 | 위치 | 역할 | +|---|---|---| +| `solve_route()` | `B05_wf2_Route_Router.py:34` | 계산 실행·DB route/points/statistics 저장·stage 2 완료 | +| `confirm_latest_route()` | `B05_wf2_Route_Router.py:137` | 최신 경로 확정·stage 2 완료·후속 단계 stale 전파 | +| `start_stage()` / `complete_stage()` / `fail_stage()` | `B05_wf2_Route_Router.py:51,96,112,117,122,128,152` | WF2 상태 전이 → [[../../concepts/workflow_state]] | + +## 기술부채 +| 항목 | 위치 | 역할 | +|---|---|---| +| 700줄 초과 | `B05_wf2_Route_Engine_RidgeValley.py:1` | 781줄; ridge-valley 기능 분할 검토 | +| 700줄 근접 | `B05_wf2_Route_Engine_Solver.py:1` | 654줄; 비용면·최적화 분리 검토 | diff --git a/docs/wiki/pages/B05_wf2_Route/B05_db.md b/docs/wiki/pages/B05_wf2_Route/B05_db.md new file mode 100644 index 0000000..f2e19f8 --- /dev/null +++ b/docs/wiki/pages/B05_wf2_Route/B05_db.md @@ -0,0 +1,36 @@ +--- +type: page-db +status: stable +page_id: B05_wf2_Route +related_pages: ["[[B05_wf2_Route/B05_backend]]", "[[B05_wf2_Route/B05_api]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B05_wf2_Route_Repository.py 실 코드 직접 확인 (2026-07-12) +--- + +# B05_wf2_Route — DB 사용 관계 + +테이블 정의는 [[db_schema/route_profile]]에서 1차 관리한다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `routes` | `B05_wf2_Route_Repository.py:27` | surface model·제어점·옵션·GeoJSON 경로 저장 | +| `route_points` | `B05_wf2_Route_Repository.py:75` | chainage·고도·경사별 렌더링 포인트 저장 | +| `route_statistics` | `B05_wf2_Route_Repository.py:109` | 총연장·경사·절성토량·비용 통계 저장 | + +## Repository 함수 +| 항목 | 위치 | 역할 | +|---|---|---| +| `_validate_stage_path()` | `B05_wf2_Route_Repository.py:18` | B05 route 상대경로 이탈 방지 | +| `create_route()` | `B05_wf2_Route_Repository.py:27` | 계산 결과 route 레코드 생성 | +| `insert_route_points()` | `B05_wf2_Route_Repository.py:75` | 샘플 포인트 일괄 저장 | +| `create_route_statistics()` | `B05_wf2_Route_Repository.py:109` | 경로 통계 저장 | +| `get_latest_route()` | `B05_wf2_Route_Repository.py:148` | 프로젝트 최신 경로 조회 | +| `confirm_route()` | `B05_wf2_Route_Repository.py:175` | 경로 상태 CONFIRMED 전환 | + +## 저장 경로 +| 항목 | 역할 | +|---|---| +| `routes.route_data_path` | 프로젝트 루트 기준 `B05_wf2_Route/route/` 내 GeoJSON 상대경로 | +| `route_points` | DB에 렌더링용 샘플 좌표 저장 | + +상세 경로 규칙: [[storage_paths]]. diff --git a/docs/wiki/pages/B05_wf2_Route/B05_dependencies.md b/docs/wiki/pages/B05_wf2_Route/B05_dependencies.md new file mode 100644 index 0000000..a4de18c --- /dev/null +++ b/docs/wiki/pages/B05_wf2_Route/B05_dependencies.md @@ -0,0 +1,29 @@ +--- +type: page-dependencies +status: stable +page_id: B05_wf2_Route +related_pages: ["[[B05_wf2_Route/B05_frontend]]", "[[B05_wf2_Route/B05_backend]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B05_wf2_Route import 구문·엔진 직접 확인 (2026-07-12) +--- + +# B05_wf2_Route — Dependencies + +공유 의존성 정의는 [[../../concepts/dependencies]]에 둔다. + +| 항목 | 역할 | +|---|---| +| Whitebox | D8 흐름누적 기반 skeleton 보조 | +| GeoPandas | 지표면·공간 데이터 처리 | +| Shapely | 경로·금지영역 기하 연산 | +| NumPy | 격자·비용면·Dijkstra 계산 | +| SciPy | 격자 보간·수치 계산 보조 | +| aiomysql | routes·route_points·route_statistics Raw SQL | + +## 페이지 파일별 연결 +| 파일 | 위치 | 역할 | +|---|---|---| +| `B05_wf2_Route_Engine_Skeleton.py` | `:1` | Whitebox/NumPy 흐름누적 skeleton | +| `B05_wf2_Route_Engine_RidgeValley.py` | `:1` | NumPy 기반 ridge-valley 탐색 | +| `B05_wf2_Route_Repository.py` | `:1` | aiomysql 비동기 저장 | +| `B05_wf2_Route_UI_Page.ts` | `:1` | TypeScript DOM·공통 UI 렌더링 | diff --git a/docs/wiki/pages/B05_wf2_Route/B05_frontend.md b/docs/wiki/pages/B05_wf2_Route/B05_frontend.md new file mode 100644 index 0000000..affbb20 --- /dev/null +++ b/docs/wiki/pages/B05_wf2_Route/B05_frontend.md @@ -0,0 +1,44 @@ +--- +type: page-frontend +status: stable +page_id: B05_wf2_Route +related_pages: ["[[B05_wf2_Route/B05_backend]]", "[[B05_wf2_Route/B05_api]]", "[[B05_wf2_Route/B05_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B05_wf2_Route 실 코드 직접 확인 (2026-07-12) +--- + +# B05_wf2_Route — Frontend + +## 화면과 상호작용 +| 항목 | 위치 | 역할 | +|---|---|---| +| `renderB05Route()` | `B05_wf2_Route_UI_Page.ts:74` | 제어점·지표면·제약·결과 3단 UI 렌더링 | +| 경로 계산 실행 | `B05_wf2_Route_UI_Page.ts:285` | 입력값을 `solveRoute()`로 전송하고 결과 메트릭 표시 | +| 경로 확정 | `B05_wf2_Route_UI_Page.ts:311` | 최신 계산 경로를 `confirmRoute()`로 확정 | +| workflow 상태 조회 | `B05_wf2_Route_UI_Page.ts:337` | 진입 단계와 진행상태 확인 | +| B 페이지 scaffold | `B05_wf2_Route_UI_Page.ts:354` | 공통 단계 내비게이션과 페이지 이동 | + +## API 클라이언트 +| 항목 | 위치 | 역할 | +|---|---|---| +| `solveRoute()` | `B05_wf2_Route_Api_Fetch.ts:83` | 경로 탐색 실행 요청 | +| `confirmRoute()` | `B05_wf2_Route_Api_Fetch.ts:94` | 최신 경로 확정 요청 | +| `RouteSolveRequest` | `B05_wf2_Route_Api_Fetch.ts:24` | 지표면·제어점·제약 입력 타입 | +| `RouteSolveResponse` | `B05_wf2_Route_Api_Fetch.ts:40` | 경로 ID·길이·메트릭·저장경로 타입 | + +## 입력 그룹 +| 항목 | 역할 | +|---|---| +| BP/EP/CP | 시작점·끝점·경유 제어점 | +| AP/FP | 회피 원·금지 원과 반경 | +| filter/method/smooth | 지표면 필터·표현·평활화 선택 | +| grade/paved/curve radius | 임도 등급·포장·최소 곡선반경 | +| uphill/downhill/weights | 종단경사 제한과 비용 가중치 | + +현재 코드에는 WebCAD 노선 폴리라인 편집·렌더링 컴포넌트가 없다. + +## 기술부채 +| 항목 | 위치 | 역할 | +|---|---|---| +| WebCAD 미구현 | `B05_wf2_Route_UI_Page.ts:74` | 결과는 메트릭·경로 저장경로 중심으로 표시 | +| CSS 분리 검토 | `B05_wf2_Route_UI_Style.css:1` | 132줄 페이지 전용 스타일 | diff --git a/docs/wiki/pages/B06_wf3_ProfileCross/B06_api.md b/docs/wiki/pages/B06_wf3_ProfileCross/B06_api.md new file mode 100644 index 0000000..619f4f3 --- /dev/null +++ b/docs/wiki/pages/B06_wf3_ProfileCross/B06_api.md @@ -0,0 +1,28 @@ +--- +type: page-api +status: stable +page_id: B06_wf3_ProfileCross +related_pages: ["[[B06_wf3_ProfileCross/B06_frontend]]", "[[B06_wf3_ProfileCross/B06_backend]]", "[[B06_wf3_ProfileCross/B06_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B06_wf3_ProfileCross_Router.py 실 코드 직접 확인 (2026-07-12) +--- + +# B06_wf3_ProfileCross — API + +기본 prefix: `/api/projects` (`B06_wf3_ProfileCross_Router.py:33`). 공통 세션·오류 형식은 [[../../concepts/auth_rbac]], [[../../concepts/api_common]]을 참조한다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `POST /{project_id}/sections/generate` | `B06_wf3_ProfileCross_Router.py:48` | 확정 경로 기반 종단·횡단 생성 및 DB 저장 | +| `GET /{project_id}/sections/{route_id}` | `B06_wf3_ProfileCross_Router.py:151` | 종횡단 결과 요약 조회 | +| `POST /{project_id}/sections/{route_id}/confirm` | `B06_wf3_ProfileCross_Router.py:169` | 해당 route의 종횡단 결과 확정 | + +## 생성 응답 +| 항목 | 역할 | +|---|---| +| `longitudinal_id` | 종단면 레코드 ID | +| `cross_section_count` | 생성된 횡단면 수 | +| `length_m` | 대상 경로 총연장 | +| `longitudinal_file_path` | 종단면 산출 파일 상대경로 | + +오류는 표준 `{"status":"error","message":...}` 형식으로 반환한다. diff --git a/docs/wiki/pages/B06_wf3_ProfileCross/B06_backend.md b/docs/wiki/pages/B06_wf3_ProfileCross/B06_backend.md new file mode 100644 index 0000000..4ef8983 --- /dev/null +++ b/docs/wiki/pages/B06_wf3_ProfileCross/B06_backend.md @@ -0,0 +1,43 @@ +--- +type: page-backend +status: stable +page_id: B06_wf3_ProfileCross +related_pages: ["[[B06_wf3_ProfileCross/B06_frontend]]", "[[B06_wf3_ProfileCross/B06_api]]", "[[B06_wf3_ProfileCross/B06_db]]", "[[B06_wf3_ProfileCross/B06_dependencies]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B06_wf3_ProfileCross 실 코드 직접 확인 (2026-07-12) +--- + +# B06_wf3_ProfileCross — Backend + +## 요청·응답 모델 +| 항목 | 위치 | 역할 | +|---|---|---| +| `SectionGenerateRequest` | `B06_wf3_ProfileCross_Schema.py:8` | route·지표면·측점·횡단 옵션 검증 | +| `SectionGenerateResponse` | `B06_wf3_ProfileCross_Schema.py:26` | 종단 ID·횡단 개수·총연장·파일경로 응답 | +| `SectionConfirmResponse` | `B06_wf3_ProfileCross_Schema.py:38` | 확정 route와 confirmed 상태 응답 | +| `SectionSummaryResponse` | `B06_wf3_ProfileCross_Schema.py:47` | 종단·횡단 결과 요약 응답 | + +## 생성 엔진 +| 항목 | 위치 | 역할 | +|---|---|---| +| `run_section_generation()` | `B06_wf3_ProfileCross_Engine.py:50` | B05 경로 로드·표고 sampler·종횡단 생성 오케스트레이션 | +| `build_surface_sampler()` | `B06_wf3_ProfileCross_Engine_Sampler.py:126` | DTM·보간 방식 표고 sampler 선택 | +| `DtmGridSampler` | `B06_wf3_ProfileCross_Engine_Sampler.py:26` | DTM 격자 기반 표고 조회 | +| `InterpolatedSurfaceSampler` | `B06_wf3_ProfileCross_Engine_Sampler.py:109` | 표면 보간 기반 표고 조회 | +| `generate_sections()` | `B06_wf3_ProfileCross_Engine_Section.py:116` | 측점·종단·횡단 샘플 생성 | +| `_chainages()` | `B06_wf3_ProfileCross_Engine_Section.py:77` | 측점 간격과 종점 포함 여부로 chainage 생성 | +| `_interpolate_xy()` / `_tangent_at()` | `B06_wf3_ProfileCross_Engine_Section.py:86,95` | 경로 좌표 보간·접선 방향 계산 | + +## 라우터·workflow +| 항목 | 위치 | 역할 | +|---|---|---| +| `generate_sections()` | `B06_wf3_ProfileCross_Router.py:49` | 확정 경로 검증·생성·DB 저장·stage 3 완료 | +| `get_sections()` | `B06_wf3_ProfileCross_Router.py:152` | route 종횡단 요약 조회 | +| `confirm_sections()` | `B06_wf3_ProfileCross_Router.py:170` | 결과 확정·stage 3 완료 | +| `start_stage()` / `complete_stage()` / `fail_stage()` | `B06_wf3_ProfileCross_Router.py:68,111,127,132,137,143,187` | WF3 상태 전이 → [[../../concepts/workflow_state]] | + +## 재실행 +| 항목 | 위치 | 역할 | +|---|---|---| +| `delete_sections_for_route()` | `B06_wf3_ProfileCross_Repository.py:27` | 동일 route 기존 결과 삭제 후 재생성 | +| `_validate_stage_path()` | `B06_wf3_ProfileCross_Repository.py:18` | WF3 저장경로 이탈 방지 | diff --git a/docs/wiki/pages/B06_wf3_ProfileCross/B06_db.md b/docs/wiki/pages/B06_wf3_ProfileCross/B06_db.md new file mode 100644 index 0000000..d3c64d1 --- /dev/null +++ b/docs/wiki/pages/B06_wf3_ProfileCross/B06_db.md @@ -0,0 +1,35 @@ +--- +type: page-db +status: stable +page_id: B06_wf3_ProfileCross +related_pages: ["[[B06_wf3_ProfileCross/B06_backend]]", "[[B06_wf3_ProfileCross/B06_api]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B06_wf3_ProfileCross_Repository.py 실 코드 직접 확인 (2026-07-12) +--- + +# B06_wf3_ProfileCross — DB 사용 관계 + +테이블 정의는 [[db_schema/route_profile]]에서 1차 관리한다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `longitudinal_sections` | `B06_wf3_ProfileCross_Repository.py:34` | route별 종단 chainage·표고·경사·설계값 저장 | +| `cross_sections` | `B06_wf3_ProfileCross_Repository.py:67` | 측점별 좌우 표고·폭·절성토 데이터 저장 | + +## Repository 함수 +| 항목 | 위치 | 역할 | +|---|---|---| +| `_validate_stage_path()` | `B06_wf3_ProfileCross_Repository.py:18` | WF3 상대경로 이탈 방지 | +| `delete_sections_for_route()` | `B06_wf3_ProfileCross_Repository.py:27` | 재생성 전 기존 종횡단 삭제 | +| `create_longitudinal_section()` | `B06_wf3_ProfileCross_Repository.py:34` | 종단면 레코드 생성 | +| `insert_cross_sections()` | `B06_wf3_ProfileCross_Repository.py:67` | 횡단면 일괄 저장 | +| `get_longitudinal_section()` | `B06_wf3_ProfileCross_Repository.py:109` | 종단·횡단 결과 조회 | +| `confirm_sections_for_route()` | `B06_wf3_ProfileCross_Repository.py:135` | route 종횡단 상태 확정 | + +## 파일 경로 +| 항목 | 역할 | +|---|---| +| `longitudinal_file_path` | `B06_wf3_ProfileCross/longitudinal/` 산출물 상대경로 | +| `cross_section_file_path` | `B06_wf3_ProfileCross/cross_sections/` 산출물 상대경로 | + +상세 저장 규칙: [[storage_paths]]. diff --git a/docs/wiki/pages/B06_wf3_ProfileCross/B06_dependencies.md b/docs/wiki/pages/B06_wf3_ProfileCross/B06_dependencies.md new file mode 100644 index 0000000..ffdf7e9 --- /dev/null +++ b/docs/wiki/pages/B06_wf3_ProfileCross/B06_dependencies.md @@ -0,0 +1,27 @@ +--- +type: page-dependencies +status: stable +page_id: B06_wf3_ProfileCross +related_pages: ["[[B06_wf3_ProfileCross/B06_frontend]]", "[[B06_wf3_ProfileCross/B06_backend]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B06_wf3_ProfileCross import 구문·엔진 직접 확인 (2026-07-12) +--- + +# B06_wf3_ProfileCross — Dependencies + +공유 의존성 정의는 [[../../concepts/dependencies]]에 둔다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| NumPy | `B06_wf3_ProfileCross_Engine_Section.py:1` | 경로·chainage·단면 샘플 배열 계산 | +| SciPy | `B06_wf3_ProfileCross_Engine_Sampler.py:1` | 표면 보간 sampler | +| aiomysql | `B06_wf3_ProfileCross_Repository.py:1` | 종횡단 Raw SQL 저장·조회 | +| Pydantic | `B06_wf3_ProfileCross_Schema.py:5` | 생성·조회·확정 요청 검증 | +| FastAPI | `B06_wf3_ProfileCross_Router.py:1` | sections API 라우터 | + +## 공통 모듈 +| 항목 | 위치 | 역할 | +|---|---|---| +| `common_util_workflow_state` | `B06_wf3_ProfileCross_Router.py:29` | stage 3 상태 전이 → [[../../concepts/workflow_state]] | +| `common_util_storage` | `B06_wf3_ProfileCross_Engine.py:1` | 프로젝트 상대경로 해석 → [[../../concepts/storage_paths]] | +| `ui_template_workflow_layout` | `B06_wf3_ProfileCross_UI_Page.ts:23` | 공통 workflow 화면 구성 | diff --git a/docs/wiki/pages/B06_wf3_ProfileCross/B06_frontend.md b/docs/wiki/pages/B06_wf3_ProfileCross/B06_frontend.md new file mode 100644 index 0000000..b3a4415 --- /dev/null +++ b/docs/wiki/pages/B06_wf3_ProfileCross/B06_frontend.md @@ -0,0 +1,40 @@ +--- +type: page-frontend +status: stable +page_id: B06_wf3_ProfileCross +related_pages: ["[[B06_wf3_ProfileCross/B06_backend]]", "[[B06_wf3_ProfileCross/B06_api]]", "[[B06_wf3_ProfileCross/B06_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B06_wf3_ProfileCross 실 코드 직접 확인 (2026-07-12) +--- + +# B06_wf3_ProfileCross — Frontend + +## 화면·workflow +| 항목 | 위치 | 역할 | +|---|---|---| +| `renderB06ProfileCross()` | `B06_wf3_ProfileCross_UI_Page.ts:57` | 측점·횡단 옵션·결과 메트릭 화면 렌더링 | +| 종횡단 생성 실행 | `B06_wf3_ProfileCross_UI_Page.ts:201` | 입력 옵션을 `generateSections()`로 전송 | +| 종횡단 확정 | `B06_wf3_ProfileCross_UI_Page.ts:233` | route별 종횡단을 `confirmSections()`로 확정 | +| workflow 상태 조회 | `B06_wf3_ProfileCross_UI_Page.ts:259` | 단계 상태와 진입 가능 단계 조회 | +| workflow layout 구성 | `B06_wf3_ProfileCross_UI_Page.ts:271` | 공통 단계·경로·상태 표시 | + +## API 클라이언트 +| 항목 | 위치 | 역할 | +|---|---|---| +| `generateSections()` | `B06_wf3_ProfileCross_Api_Fetch.ts:82` | 종단면·횡단면 생성 요청 | +| `getSections()` | `B06_wf3_ProfileCross_Api_Fetch.ts:93` | route별 결과 요약 조회 | +| `confirmSections()` | `B06_wf3_ProfileCross_Api_Fetch.ts:103` | 생성 결과 확정 요청 | +| `SectionGenerateRequest` | `B06_wf3_ProfileCross_Api_Fetch.ts:18` | 측점·폭·샘플 간격 입력 타입 | +| `SectionGenerateResponse` | `B06_wf3_ProfileCross_Api_Fetch.ts:31` | 종단 ID·횡단 개수·길이·파일경로 타입 | + +## 입력 옵션 +| 항목 | 역할 | +|---|---| +| `route_id` | 확정된 B05 경로 선택 | +| `filter_key`, `method`, `smooth`, `crs` | 지표면 필터·표현·평활화·좌표계 | +| `station_interval_m` | 종단 측점 간격 | +| `cross_half_width_m` | 횡단 좌우 반폭 | +| `cross_sample_interval_m` | 횡단 표고 샘플 간격 | +| `long_sample_interval_m` | 종단 표고 샘플 간격 | + +현재 코드에는 종단도·횡단 프로필을 WebCAD로 렌더링하는 전용 뷰어가 없다. diff --git a/docs/wiki/pages/B07_wf4_DesignDetail/B07_frontend.md b/docs/wiki/pages/B07_wf4_DesignDetail/B07_frontend.md new file mode 100644 index 0000000..2d247fb --- /dev/null +++ b/docs/wiki/pages/B07_wf4_DesignDetail/B07_frontend.md @@ -0,0 +1,45 @@ +--- +status: stable +page_id: B07_wf4_DesignDetail +related_pages: ["[[B06_wf3_ProfileCross/B06_backend]]", "[[B08_wf5_Quantity/B08_frontend]]", "[[db_schema/structure_output]]", "[[storage_paths]]"] +last_updated: 2026-07-12 +--- + +# B07_wf4_DesignDetail — Frontend + +WF4 상세 설계(구조물 배치). **워크플로우 셸만 존재, 본문 미구현.** + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `B07_wf4_DesignDetail_UI_Page.ts` | `B07_wf4_DesignDetail/B07_wf4_DesignDetail_UI_Page.ts:1-27` | 워크플로우 셸(헤더+스텝바)만 렌더, 본문은 "준비중" 안내 | + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderB07DesignDetail(root)` | `B07_wf4_DesignDetail_UI_Page.ts:20` | `renderPendingWorkflow()` 호출(title, steps, activeStep:4) | + +## 로컬라이제이션 + +| UI 요소 | 로케일 키 | +|---|---| +| 페이지 제목 | `B07_Design_Title` ("4차 · 상세 설계") | + +## 의존성 + +- [[a00_app_shell_framework]] — `renderPendingWorkflow()`, `workflowSteps()` (b_page_scaffold, B04~B09 공용 셸 헬퍼) +- [[ui_templates]] — `ui_locales`, `currentLanguageIndex` + +## 백엔드/DB — 미착수 (계획적 범위 제외) + +- 백엔드(Schema/Engine/Repository/Router) 파일 자체가 존재하지 않음 +- `raw/guidelines/migration_plan.md:271` — **"B07 이후 기능은 이번 마이그레이션 범위에서 제외한다"** (계획 단계에서 명시적으로 제외) +- `raw/guidelines/structure.md:173-174`도 B07을 "워크플로우 셸"로만 기술 — 실 코드와 일치 +- DB는 `structures` 테이블 예정 (컬럼 정의는 계획서 기준) → [[db_schema/structure_output]] (사용처에 B07 이미 등록됨) + +## 참고 + +- 이 페이지는 B08/B09와 함께 "셸만 존재" 3종 중 하나. 실 코드·raw 문서 모두 미착수로 일관되게 확인됨(모순 없음) +- 향후 구현 시 `structures` 테이블(구조물 유형: 낙석방지책/돌붙임/계간수로 등) 기준 계획서 필요 diff --git a/docs/wiki/pages/B08_wf5_Quantity/B08_db.md b/docs/wiki/pages/B08_wf5_Quantity/B08_db.md new file mode 100644 index 0000000..49e877c --- /dev/null +++ b/docs/wiki/pages/B08_wf5_Quantity/B08_db.md @@ -0,0 +1,29 @@ +--- +type: page-db +status: stable +page_id: B08_wf5_Quantity +related_pages: ["[[B08_wf5_Quantity/B08_frontend]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B08 코드 부재 확인 + DB 개념 문서 대조 (2026-07-12) +--- + +# B08_wf5_Quantity — DB + +현재 B08 코드에는 Repository·라우터·DB 쓰기 구현이 없다. 아래는 프로젝트 DB 설계상 예정된 사용 관계다. + +| 항목 | 위치 | 역할 | +|---|---|---| +| `quantity_items` | [[db_schema/structure_output]] | 토공·구조물·포장·배수·녹화·안전시설별 수량과 단가 저장 예정 | +| `quantity_data_path` | [[db_schema/overview]] | B08 수량 산출 파일 상대경로 저장 예정 | + +## 구현 대기 항목 +| 항목 | 현재 상태 | +|---|---| +| B08 Repository | 파일 없음 | +| B08 Router/API | 파일 없음 | +| Pydantic 스키마 | 파일 없음 | +| 수량 계산 엔진 | 파일 없음 | +| `quantity_items` INSERT/UPDATE | 미구현 | +| WF5 상태 전이 | 미구현 | + +저장 폴더 계획: `storage/{company_slug}/{user_slug}/{project_id}/B08_wf5_Quantity/quantities/` → [[storage_paths]]. diff --git a/docs/wiki/pages/B08_wf5_Quantity/B08_frontend.md b/docs/wiki/pages/B08_wf5_Quantity/B08_frontend.md new file mode 100644 index 0000000..32cdbd6 --- /dev/null +++ b/docs/wiki/pages/B08_wf5_Quantity/B08_frontend.md @@ -0,0 +1,42 @@ +--- +type: page-frontend +status: stable +page_id: B08_wf5_Quantity +related_pages: ["[[B08_wf5_Quantity/B08_db]]"] +last_updated: 2026-07-12 +source: 상위 프로젝트 B08_wf5_Quantity 실 코드 직접 확인 (2026-07-12) +--- + +# B08_wf5_Quantity — Frontend + +## 현재 구현 +| 항목 | 위치 | 역할 | +|---|---|---| +| `renderB08Quantity()` | `B08_wf5_Quantity_UI_Page.ts:20` | B08 수량 산출 페이지 진입점 | +| `renderPendingWorkflow()` | `B08_wf5_Quantity_UI_Page.ts:21` | 공통 준비 중 workflow 셸 렌더링 | +| `workflowSteps()` | `B08_wf5_Quantity_UI_Page.ts:23` | 전체 workflow 단계 표시 | +| `L()` | `B08_wf5_Quantity_UI_Page.ts:14` | 한·영 locale 문자열 선택 | + +## 화면 상태 +| 항목 | 값 | +|---|---| +| 제목 | `ui_locales[B08_Quantity_Title]` | +| 활성 단계 | `activeStep: 5` (WF5) | +| 본문 | 미구현; 헤더와 workflow step bar만 표시 | +| 수량 계산 API | 미구현 | +| 수량 결과 테이블·차트 | 미구현 | +| WebCAD/산출물 뷰어 | 미구현 | + +## 계획 책임 +| 항목 | 계획 역할 | +|---|---| +| 토공·구조물·포장·배수 등 수량 산출 | B07 종횡단·구조물 결과를 수량 항목으로 집계 | +| 수량 결과 저장 | `quantity_items`와 `quantity_data_path` 사용 → [[B08_wf5_Quantity/B08_db]] | +| 다음 단계 연결 | WF6 견적·문서 산출로 전달 | + +공통 셸·locale은 [[../../concepts/a00_app_shell_framework]], [[../../concepts/ui_templates]]를 참조한다. + +## 기술부채 +| 항목 | 위치 | 역할 | +|---|---|---| +| 본문 미구현 | `B08_wf5_Quantity_UI_Page.ts:5` | 수량 계산·조회·확정 기능 설계와 구현 필요 | diff --git a/docs/wiki/pages/B09_wf6_Estimation/B09_frontend.md b/docs/wiki/pages/B09_wf6_Estimation/B09_frontend.md new file mode 100644 index 0000000..fce0067 --- /dev/null +++ b/docs/wiki/pages/B09_wf6_Estimation/B09_frontend.md @@ -0,0 +1,45 @@ +--- +status: stable +page_id: B09_wf6_Estimation +related_pages: ["[[B08_wf5_Quantity/B08_frontend]]", "[[db_schema/structure_output]]", "[[storage_paths]]"] +last_updated: 2026-07-12 +--- + +# B09_wf6_Estimation — Frontend + +WF6 견적·문서 산출(Excel/PDF/DXF). **워크플로우 셸만 존재, 본문 미구현.** + +## 파일 구조 + +| 파일 | 위치 | 역할 | +|---|---|---| +| `B09_wf6_Estimation_UI_Page.ts` | `B09_wf6_Estimation/B09_wf6_Estimation_UI_Page.ts:1-27` | 워크플로우 셸(헤더+스텝바)만 렌더, 본문은 "준비중" 안내 | + +## 컴포넌트 / 함수 + +| 함수 | 위치 | 역할 | +|---|---|---| +| `renderB09Estimation(root)` | `B09_wf6_Estimation_UI_Page.ts:20` | `renderPendingWorkflow()` 호출(title, steps, activeStep:6) | + +## 로컬라이제이션 + +| UI 요소 | 로케일 키 | +|---|---| +| 페이지 제목 | `B09_Estimation_Title` ("6차 · 견적·문서") | + +## 의존성 + +- [[a00_app_shell_framework]] — `renderPendingWorkflow()`, `workflowSteps()` (b_page_scaffold, B04~B09 공용 셸 헬퍼) +- [[ui_templates]] — `ui_locales`, `currentLanguageIndex` + +## 백엔드/DB — 미착수 + +- 백엔드(Schema/Engine/Repository/Router) 파일 자체가 존재하지 않음 +- `raw/guidelines/structure.md:177-178`도 B09를 "워크플로우 셸"로만 기술 — 실 코드와 일치 +- DB는 `outputs`/`output_files` 테이블 예정 → [[db_schema/structure_output]] (사용처에 B09 이미 등록됨) +- 산출물 버전 관리(v1/, v2/, ...)는 워크플로우 전체에서 **이 단계에서만** 사용 → [[storage_paths]] (경로패턴 20줄, B09 이미 related_pages 등록됨) + +## 참고 + +- B07/B08과 함께 "셸만 존재" 3종 중 하나. 실 코드·raw 문서 모두 미착수로 일관되게 확인됨(모순 없음) +- 향후 구현 시 Excel/PDF/DXF 3종 산출물 생성 로직 + `outputs_directory_path`/`output_file_path` 경로 기록 필요 diff --git a/init_db.py b/init_db.py deleted file mode 100644 index 2933247..0000000 --- a/init_db.py +++ /dev/null @@ -1,51 +0,0 @@ -"""DB 마이그레이션 실행 스크립트.""" - -import asyncio -import sys -from pathlib import Path - -import aiomysql - -from config.config_db import DB_HOST, DB_NAME, DB_PASSWORD, DB_PORT, DB_USER - - -async def run_migration(): - """SQL 마이그레이션 파일 실행.""" - connection = await aiomysql.connect( - host=DB_HOST, - port=DB_PORT, - user=DB_USER, - password=DB_PASSWORD, - db=DB_NAME, - charset="utf8mb4", - ) - - try: - async with connection.cursor() as cursor: - migration_file = Path(__file__).parent / "migrations" / "001_create_upload_tables.sql" - sql_content = migration_file.read_text(encoding="utf-8") - - # SQL 파일의 각 명령문 실행 (';'으로 분리) - statements = [stmt.strip() for stmt in sql_content.split(";") if stmt.strip()] - - for i, stmt in enumerate(statements, 1): - print(f"[{i}/{len(statements)}] executing...") - await cursor.execute(stmt) - print(f" OK") - - await connection.commit() - print("\nMigration complete!") - return True - - except Exception as e: - print(f"\nMigration failed: {e}") - await connection.rollback() - return False - - finally: - connection.close() - - -if __name__ == "__main__": - success = asyncio.run(run_migration()) - sys.exit(0 if success else 1) diff --git a/main.py b/main.py index 189a8c5..01d9a91 100644 --- a/main.py +++ b/main.py @@ -28,6 +28,7 @@ from B01_Dashboard.B01_Dashboard_Router import router as b01_dashboard_router from B02_ProjRegister.B02_ProjRegister_Router import router as b02_proj_register_router from B03_FileInput.B03_FileInput_Router import router as b03_file_input_router from B04_wf1_Surface.B04_wf1_Surface_Router import router as b04_surface_router +from B04_wf1_Surface.B04_wf1_Surface_Router import tiles_router from B05_wf2_Route.B05_wf2_Route_Router import router as b05_route_router from B06_wf3_ProfileCross.B06_wf3_ProfileCross_Router import router as b06_section_router from common_util.common_util_auth import require_company, verify_session @@ -244,9 +245,11 @@ protected = [Depends(verify_session)] protected_with_company = [Depends(verify_session), Depends(require_company)] app.include_router(b03_file_input_router, dependencies=protected_with_company) app.include_router(b04_surface_router, dependencies=protected_with_company) +app.include_router(tiles_router, dependencies=protected_with_company) app.include_router(b05_route_router, dependencies=protected_with_company) app.include_router(b06_section_router, dependencies=protected_with_company) + # ───────────────────────────────────────────────────────────────────────── # 앱 실행 # ───────────────────────────────────────────────────────────────────────── diff --git a/requirements.txt b/requirements.txt index a9d80eb..6269631 100644 --- a/requirements.txt +++ b/requirements.txt @@ -19,6 +19,7 @@ idna==3.18 ImageIO==2.37.3 Jinja2==3.1.2 laspy==2.4.1 +mapbox-vector-tile>=2.0.1 lazy-loader==0.5 MarkupSafe==3.0.3 networkx==3.6.1 diff --git a/scratch_inspect.py b/scratch_inspect.py deleted file mode 100644 index a4a9797..0000000 --- a/scratch_inspect.py +++ /dev/null @@ -1,9 +0,0 @@ -import re - -path = "D:/02_Software_Prog/임도설계 및 견적자동화 프로그램 개발/0_old/main.py" -with open(path, "r", encoding="utf-8") as f: - code = f.read() - -print("--- Endpoints ---") -for m in re.finditer(r'@app\.(get|post)\("([^"]+)"\)', code): - print(m.group(0)) diff --git a/ui_template/ui_template_locale.ts b/ui_template/ui_template_locale.ts index 4696eb5..3d32c03 100644 --- a/ui_template/ui_template_locale.ts +++ b/ui_template/ui_template_locale.ts @@ -557,7 +557,7 @@ export const ui_locales = { B03_File_Group_Optional: ["선택 파일", "Optional files"], B03_File_Slot_PointCloud: ["포인트클라우드", "Point Cloud"], B03_File_Slot_Projection: ["좌표계 정의", "Projection"], - B03_File_Slot_RasterCoord: ["래스터 좌표", "Raster Coord"], + B03_File_Slot_RasterCoord: ["래스터 좌표", "Raster Coord 1"], B03_File_Slot_TerrainDem: ["지형 래스터", "Terrain DEM"], B03_File_Slot_CadDrawing: ["CAD 도면", "CAD Drawing"], B03_File_Card_Select: ["파일 선택", "Select file"], diff --git a/ui_template/ui_template_workflow_layout.ts b/ui_template/ui_template_workflow_layout.ts index fd96719..4b841d9 100644 --- a/ui_template/ui_template_workflow_layout.ts +++ b/ui_template/ui_template_workflow_layout.ts @@ -43,20 +43,12 @@ function createStepBar( if (index === activeStep) button.classList.add("is-active"); button.textContent = step; - // DB state 기반 활성화 로직 - let enabled = false; - if (options?.stages && options.stages.length > 0) { - enabled = index === 0 || options.stages[index - 1]?.state === "COMPLETE"; - } else { - enabled = index <= activeStep; - } + // 스텝바는 항상 자유롭게 이동 가능(게이팅하지 않음). + // 단계 완료/무효화 판정은 사용자가 각 페이지의 액션 버튼(업로드·분석 실행 등)을 + // 눌렀을 때 백엔드가 계산·DB 갱신하며, 여기서는 그 결과를 색상/툴팁으로 표시만 한다. + button.classList.add("is-enabled"); - button.disabled = !enabled; - if (enabled) { - button.classList.add("is-enabled"); - } - - // state 기반 스타일링 + // state 기반 스타일링 (표시 전용) if (options?.stages && options.stages[index]) { const state = options.stages[index].state; button.classList.add(`state-${state.toLowerCase()}`); @@ -73,8 +65,8 @@ function createStepBar( } } - // 클릭 이벤트 - if (enabled && options?.routes && options?.routes[index]) { + // 클릭 이벤트 — 모든 스텝에서 이동 허용 + if (options?.routes && options?.routes[index]) { button.addEventListener("click", () => { options.onStepClick?.(index, options.routes![index]); }); diff --git a/vite-dev.out.log b/vite-dev.out.log index 76a6a1d..d1a3e11 100644 --- a/vite-dev.out.log +++ b/vite-dev.out.log @@ -7,3 +7,4 @@ Port 5173 is in use, trying another one... VITE v8.1.0 ready in 295 ms ➜ Local: http://127.0.0.1:5174/ +오후 7:36:11 [vite] (client) page reload app_shell.ts diff --git a/wiki/설계자동화/.obsidian/app.json b/wiki/설계자동화/.obsidian/app.json deleted file mode 100644 index 9e26dfe..0000000 --- a/wiki/설계자동화/.obsidian/app.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/wiki/설계자동화/환영합니다!.md b/wiki/설계자동화/환영합니다!.md deleted file mode 100644 index d80d118..0000000 --- a/wiki/설계자동화/환영합니다!.md +++ /dev/null @@ -1,5 +0,0 @@ -새로운 *보관함*입니다. - -내용을 한번 적어보세요, [[create a link]], 혹은 [임포터](https://help.obsidian.md/Plugins/Importer)를 사용해봐도 좋습니다! - -준비가 됐다면 이 노트를 삭제하고 맞춤형 보관함을 만들어보세요. \ No newline at end of file