diff --git a/.githooks/pre-commit b/.githooks/pre-commit index 7a28940..c469fcd 100755 --- a/.githooks/pre-commit +++ b/.githooks/pre-commit @@ -1,54 +1,73 @@ #!/bin/bash #============================================================================== -# pre-commit hook (React TypeScript) -# TypeScript 컴파일 + 린트 검증 — 실패 시 커밋 차단 +# pre-commit hook (Monorepo: frontend + backend) +# 변경된 영역만 선택적으로 검증 #============================================================================== -echo "pre-commit: TypeScript 타입 체크 중..." +# 스테이징된 파일 목록 +STAGED=$(git diff --cached --name-only --diff-filter=ACM) -# npm 확인 -if ! command -v npx &>/dev/null; then - echo "경고: npx가 설치되지 않았습니다. 검증을 건너뜁니다." - exit 0 +# frontend 변경 확인 +FRONTEND_CHANGED=$(echo "$STAGED" | grep -E '^frontend/' || true) + +# backend 변경 확인 +BACKEND_CHANGED=$(echo "$STAGED" | grep -E '^backend/' || true) + +# === Frontend 검증 === +if [ -n "$FRONTEND_CHANGED" ] && [ -d "frontend" ]; then + echo "pre-commit: frontend TypeScript 타입 체크 중..." + + if ! command -v npx &>/dev/null; then + echo "경고: npx가 설치되지 않았습니다. 검증을 건너뜁니다." + elif [ ! -d "frontend/node_modules" ]; then + echo "경고: frontend/node_modules가 없습니다. 'cd frontend && npm install' 후 다시 시도하세요." + exit 1 + else + (cd frontend && npx tsc --noEmit --pretty 2>&1) + TSC_RESULT=$? + + if [ $TSC_RESULT -ne 0 ]; then + echo "" + echo "╔══════════════════════════════════════════════════════════╗" + echo "║ TypeScript 타입 에러! 커밋이 차단되었습니다. ║" + echo "╚══════════════════════════════════════════════════════════╝" + exit 1 + fi + echo "pre-commit: 타입 체크 성공" + + # ESLint + if [ -f "frontend/eslint.config.js" ] || [ -f "frontend/eslint.config.mjs" ]; then + echo "pre-commit: frontend ESLint 검증 중..." + (cd frontend && npx eslint src/ --quiet 2>&1) + LINT_RESULT=$? + + if [ $LINT_RESULT -ne 0 ]; then + echo "" + echo "╔══════════════════════════════════════════════════════════╗" + echo "║ ESLint 에러! 커밋이 차단되었습니다. ║" + echo "║ 'cd frontend && npm run lint:fix'로 자동 수정 시도. ║" + echo "╚══════════════════════════════════════════════════════════╝" + exit 1 + fi + echo "pre-commit: ESLint 통과" + fi + fi fi -# node_modules 확인 -if [ ! -d "node_modules" ]; then - echo "경고: node_modules가 없습니다. 'npm install' 실행 후 다시 시도하세요." - exit 1 -fi +# === Backend 검증 === +if [ -n "$BACKEND_CHANGED" ] && [ -d "backend" ] && [ -f "backend/pom.xml" ]; then + echo "pre-commit: backend 컴파일 체크 중..." + (cd backend && ./mvnw compile -q 2>&1) + MVN_RESULT=$? -# TypeScript 타입 체크 -npx tsc --noEmit --pretty 2>&1 -TSC_RESULT=$? - -if [ $TSC_RESULT -ne 0 ]; then - echo "" - echo "╔══════════════════════════════════════════════════════════╗" - echo "║ TypeScript 타입 에러! 커밋이 차단되었습니다. ║" - echo "║ 타입 에러를 수정한 후 다시 커밋해주세요. ║" - echo "╚══════════════════════════════════════════════════════════╝" - echo "" - exit 1 -fi - -echo "pre-commit: 타입 체크 성공" - -# ESLint 검증 (설정 파일이 있는 경우만) -if [ -f ".eslintrc.js" ] || [ -f ".eslintrc.json" ] || [ -f ".eslintrc.cjs" ] || [ -f "eslint.config.js" ] || [ -f "eslint.config.mjs" ]; then - echo "pre-commit: ESLint 검증 중..." - npx eslint src/ --ext .ts,.tsx --quiet 2>&1 - LINT_RESULT=$? - - if [ $LINT_RESULT -ne 0 ]; then + if [ $MVN_RESULT -ne 0 ]; then echo "" echo "╔══════════════════════════════════════════════════════════╗" - echo "║ ESLint 에러! 커밋이 차단되었습니다. ║" - echo "║ 'npm run lint -- --fix'로 자동 수정을 시도해보세요. ║" + echo "║ Backend 컴파일 에러! 커밋이 차단되었습니다. ║" echo "╚══════════════════════════════════════════════════════════╝" - echo "" exit 1 fi - - echo "pre-commit: ESLint 통과" + echo "pre-commit: backend 컴파일 성공" fi + +exit 0 diff --git a/.gitignore b/.gitignore index 10ab9d5..1e9ea7f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,11 @@ # === Build === -dist/ -build/ +frontend/dist/ +frontend/build/ +backend/target/ +backend/build/ # === Dependencies === +frontend/node_modules/ node_modules/ # === IDE === @@ -27,12 +30,15 @@ yarn-debug.log* yarn-error.log* # === Test === -coverage/ +frontend/coverage/ +backend/coverage/ # === Cache === -.eslintcache -.prettiercache -*.tsbuildinfo +frontend/.eslintcache +frontend/.prettiercache +frontend/*.tsbuildinfo +frontend/.vite/ +.vite/ # === Code Review Graph (로컬 전용) === .code-review-graph/ @@ -55,3 +61,9 @@ coverage/ .claude/skills/version/ .claude/skills/fix-issue/ .claude/scripts/ + +# === Backend (Spring Boot) === +backend/.mvn/wrapper/maven-wrapper.jar +backend/.gradle/ +backend/HELP.md +backend/*.log diff --git a/CLAUDE.md b/CLAUDE.md index afdc18e..2d4b589 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,74 +1,76 @@ -# KCG AI Monitoring +# KCG AI Monitoring (모노레포) 해양경찰청 AI 기반 불법어선 탐지 및 단속 지원 플랫폼 -## 기술 스택 +## 모노레포 구조 -- **프레임워크**: React 19 + TypeScript 5.9 -- **빌드**: Vite 8 -- **스타일**: Tailwind CSS 4 + CVA (class-variance-authority) -- **지도**: MapLibre GL 5 + deck.gl 9 -- **차트**: ECharts 6 -- **상태관리**: Zustand 5 -- **다국어**: i18next (ko/en, 10개 네임스페이스) -- **라우팅**: React Router 7 -- **린트**: ESLint 10 (flat config) +``` +kcg-ai-monitoring/ +├── frontend/ # React 19 + TypeScript + Vite (UI) +├── backend/ # Spring Boot 3.x + Java 21 (자체 인증/권한/감사 + 분석 프록시) +├── database/ # PostgreSQL 마이그레이션 (Flyway) +│ └── migration/ +├── docs/ # 프로젝트 문서 (SFR, 아키텍처) +├── .claude/ # Claude Code 워크플로우 +├── .githooks/ # Git hooks (commit-msg, pre-commit, post-checkout) +└── Makefile # 통합 dev/build 명령 +``` + +## 시스템 구성 + +``` +[Frontend Vite :5173] ──→ [Backend Spring :8080] ──┬→ [Iran Backend :8080] (분석 데이터 read) + │ └→ [Prediction FastAPI :8001] + └→ [PostgreSQL kcgaidb] (자체 인증/권한/감사/의사결정) +``` + +- **자체 백엔드**: 인증/권한/감사로그/관리자 + 운영자 의사결정 (확정/제외/학습) +- **iran 백엔드 프록시**: 분석 결과 read-only 참조 (vessel_analysis, group_polygons, correlations) +- **신규 DB (kcgaidb)**: 자체 생산 데이터만 저장, prediction 분석 테이블은 미복사 ## 명령어 ```bash -npm run dev # 개발 서버 (Vite) -npm run build # 프로덕션 빌드 -npm run lint # ESLint 검사 -npm run lint:fix # ESLint 자동 수정 -npm run format # Prettier 포맷팅 -npm run format:check # 포맷팅 검사 +make install # 의존성 설치 +make dev # 프론트 + 백엔드 동시 실행 +make dev-frontend # 프론트만 +make dev-backend # 백엔드만 +make build # 전체 빌드 +make lint # 프론트 lint +make format # 프론트 prettier ``` -## 디렉토리 구조 +## 기술 스택 -``` -src/ -├── app/ # 라우터, 인증, 레이아웃 -├── features/ # 13개 도메인 모듈 (31+ 페이지) -│ ├── admin/ # 관리자 -│ ├── ai-operations/ # AI 작전 -│ ├── auth/ # 인증 -│ ├── dashboard/ # 대시보드 -│ ├── detection/ # 탐지 -│ ├── enforcement/ # 단속 -│ ├── field-ops/ # 현장작전 -│ ├── monitoring/ # 모니터링 -│ ├── patrol/ # 순찰 -│ ├── risk-assessment/# 위험평가 -│ ├── statistics/ # 통계 -│ ├── surveillance/ # 감시 -│ └── vessel/ # 선박 -├── lib/ # 공유 라이브러리 -│ ├── charts/ # ECharts 래퍼 + 프리셋 -│ ├── i18n/ # i18next 설정 + 로케일 -│ ├── map/ # MapLibre + deck.gl 통합 -│ └── theme/ # 디자인 토큰 + CVA 변형 -├── data/mock/ # 7개 목 데이터 모듈 -├── stores/ # Zustand 스토어 (8개) -├── services/ # API 서비스 샘플 -├── shared/ # 공유 UI 컴포넌트 -└── styles/ # CSS (Dark/Light 테마) -``` +### Frontend (`frontend/`) +- React 19, TypeScript 5.9, Vite 8 +- Tailwind CSS 4 + CVA +- MapLibre GL 5 + deck.gl 9 (지도) +- ECharts 6 (차트) +- Zustand 5 (상태관리) +- i18next (ko/en) +- React Router 7 +- ESLint 10 + Prettier -## Path Alias +### Backend (`backend/`) — Phase 2에서 초기화 +- Spring Boot 3.x + Java 21 +- Spring Security + JWT +- PostgreSQL + Flyway +- Caffeine (권한 캐싱) +- 트리 기반 RBAC (wing 패턴) -| Alias | 경로 | -|-------|------| -| `@/` | `src/` | -| `@lib/` | `src/lib/` | -| `@shared/` | `src/shared/` | -| `@features/` | `src/features/` | -| `@data/` | `src/data/` | -| `@stores/` | `src/stores/` | +### Database (`kcgaidb`) +- PostgreSQL +- 사용자: `kcg-app` +- 스키마: `kcg` + +## 권한 체계 + +좌측 탭(메뉴) = 권한 그룹, 내부 패널/액션 = 자식 자원, CRUD 단위 개별 제어. +상세는 `.claude/plans/vast-tinkering-knuth.md` 참조. ## 팀 컨벤션 -- 팀 규칙은 `.claude/rules/` 참조 -- 커밋: Conventional Commits (한국어), `.githooks/commit-msg`로 검증 -- Git Hooks: `.githooks/` (core.hooksPath 설정됨) +- 팀 규칙: `.claude/rules/` +- 커밋: Conventional Commits (한국어), `.githooks/commit-msg` 검증 +- pre-commit: `frontend/` 디렉토리 기준 TypeScript + ESLint 검증 diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7f1ba41 --- /dev/null +++ b/Makefile @@ -0,0 +1,47 @@ +.PHONY: help install dev dev-frontend dev-backend build build-frontend build-backend lint format test clean + +help: + @echo "사용 가능한 명령:" + @echo " make install - 프론트엔드 의존성 설치" + @echo " make dev - 프론트엔드 + 백엔드 동시 실행" + @echo " make dev-frontend - 프론트엔드 dev 서버만 실행 (Vite)" + @echo " make dev-backend - 백엔드 dev 서버만 실행 (Spring Boot)" + @echo " make build - 프론트엔드 + 백엔드 빌드" + @echo " make build-frontend - 프론트엔드 빌드" + @echo " make build-backend - 백엔드 빌드" + @echo " make lint - 프론트엔드 lint 검사" + @echo " make format - 프론트엔드 prettier 포맷팅" + @echo " make clean - 빌드 산출물 삭제" + +install: + cd frontend && npm install + @if [ -f backend/pom.xml ]; then cd backend && ./mvnw dependency:resolve || true; fi + +dev-frontend: + cd frontend && npm run dev + +dev-backend: + @if [ -f backend/pom.xml ]; then cd backend && ./mvnw spring-boot:run -Dspring-boot.run.profiles=local; \ + else echo "백엔드가 아직 초기화되지 않았습니다 (Phase 2에서 추가)"; fi + +dev: + @$(MAKE) -j2 dev-frontend dev-backend + +build-frontend: + cd frontend && npm run build + +build-backend: + @if [ -f backend/pom.xml ]; then cd backend && ./mvnw clean package -DskipTests; \ + else echo "백엔드가 아직 초기화되지 않았습니다 (Phase 2에서 추가)"; fi + +build: build-frontend build-backend + +lint: + cd frontend && npm run lint + +format: + cd frontend && npm run format + +clean: + rm -rf frontend/dist frontend/node_modules/.vite + @if [ -f backend/pom.xml ]; then cd backend && ./mvnw clean; fi diff --git a/backend/README.md b/backend/README.md new file mode 100644 index 0000000..f4428c9 --- /dev/null +++ b/backend/README.md @@ -0,0 +1,18 @@ +# Backend (Spring Boot) + +Phase 2에서 초기화 예정. + +## 계획된 구성 +- Spring Boot 3.x + Java 21 +- PostgreSQL + Flyway +- Spring Security + JWT +- Caffeine 캐시 +- 트리 기반 RBAC 권한 체계 (wing 패턴) + +## 책임 +- 자체 인증/권한/감사로그 +- 운영자 의사결정 (모선 확정/제외/학습) +- iran 백엔드 분석 데이터 프록시 +- 관리자 화면 API + +상세 설계: `.claude/plans/vast-tinkering-knuth.md` diff --git a/database/migration/README.md b/database/migration/README.md new file mode 100644 index 0000000..98f608e --- /dev/null +++ b/database/migration/README.md @@ -0,0 +1,30 @@ +# Database Migrations + +PostgreSQL 마이그레이션 (Flyway 형식). + +## DB 정보 +- DB Name: `kcgaidb` +- User: `kcg-app` +- Schema: `kcg` + +## 마이그레이션 파일 (Phase 2에서 작성) + +| 파일 | 내용 | +|---|---| +| `V001__auth_init.sql` | 사용자, 조직, 역할, 로그인 이력 | +| `V002__perm_tree.sql` | 권한 트리 + 권한 매트릭스 | +| `V003__perm_seed.sql` | 초기 역할 + 트리 노드 시드 | +| `V004__access_logs.sql` | 감사로그, 접근 이력 | +| `V005__parent_workflow.sql` | 모선 워크플로우 (운영자 결정/제외/학습 세션) | + +## 실행 방법 + +```bash +# DB 생성 (1회) +psql -U postgres -c "CREATE DATABASE kcgaidb;" +psql -U postgres -c "CREATE USER \"kcg-app\" WITH PASSWORD 'Kcg2026ai';" +psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE kcgaidb TO \"kcg-app\";" + +# 마이그레이션은 backend Spring Boot가 기동 시 자동 실행 (Flyway) +cd backend && ./mvnw spring-boot:run +``` diff --git a/.node-version b/frontend/.node-version similarity index 100% rename from .node-version rename to frontend/.node-version diff --git a/.npmrc b/frontend/.npmrc similarity index 100% rename from .npmrc rename to frontend/.npmrc diff --git a/.prettierignore b/frontend/.prettierignore similarity index 100% rename from .prettierignore rename to frontend/.prettierignore diff --git a/.prettierrc b/frontend/.prettierrc similarity index 100% rename from .prettierrc rename to frontend/.prettierrc diff --git a/eslint.config.js b/frontend/eslint.config.js similarity index 100% rename from eslint.config.js rename to frontend/eslint.config.js diff --git a/index.html b/frontend/index.html similarity index 100% rename from index.html rename to frontend/index.html diff --git a/package-lock.json b/frontend/package-lock.json similarity index 100% rename from package-lock.json rename to frontend/package-lock.json diff --git a/package.json b/frontend/package.json similarity index 100% rename from package.json rename to frontend/package.json diff --git a/postcss.config.mjs b/frontend/postcss.config.mjs similarity index 100% rename from postcss.config.mjs rename to frontend/postcss.config.mjs diff --git a/src/app/App.tsx b/frontend/src/app/App.tsx similarity index 100% rename from src/app/App.tsx rename to frontend/src/app/App.tsx diff --git a/src/app/auth/AuthContext.tsx b/frontend/src/app/auth/AuthContext.tsx similarity index 100% rename from src/app/auth/AuthContext.tsx rename to frontend/src/app/auth/AuthContext.tsx diff --git a/src/app/layout/MainLayout.tsx b/frontend/src/app/layout/MainLayout.tsx similarity index 100% rename from src/app/layout/MainLayout.tsx rename to frontend/src/app/layout/MainLayout.tsx diff --git a/src/data/areasCodes.json b/frontend/src/data/areasCodes.json similarity index 100% rename from src/data/areasCodes.json rename to frontend/src/data/areasCodes.json diff --git a/src/data/commonCodes.ts b/frontend/src/data/commonCodes.ts similarity index 100% rename from src/data/commonCodes.ts rename to frontend/src/data/commonCodes.ts diff --git a/src/data/fisheryCodes.json b/frontend/src/data/fisheryCodes.json similarity index 100% rename from src/data/fisheryCodes.json rename to frontend/src/data/fisheryCodes.json diff --git a/src/data/mock/enforcement.ts b/frontend/src/data/mock/enforcement.ts similarity index 100% rename from src/data/mock/enforcement.ts rename to frontend/src/data/mock/enforcement.ts diff --git a/src/data/mock/events.ts b/frontend/src/data/mock/events.ts similarity index 100% rename from src/data/mock/events.ts rename to frontend/src/data/mock/events.ts diff --git a/src/data/mock/gear.ts b/frontend/src/data/mock/gear.ts similarity index 100% rename from src/data/mock/gear.ts rename to frontend/src/data/mock/gear.ts diff --git a/src/data/mock/kpi.ts b/frontend/src/data/mock/kpi.ts similarity index 100% rename from src/data/mock/kpi.ts rename to frontend/src/data/mock/kpi.ts diff --git a/src/data/mock/patrols.ts b/frontend/src/data/mock/patrols.ts similarity index 100% rename from src/data/mock/patrols.ts rename to frontend/src/data/mock/patrols.ts diff --git a/src/data/mock/transfers.ts b/frontend/src/data/mock/transfers.ts similarity index 100% rename from src/data/mock/transfers.ts rename to frontend/src/data/mock/transfers.ts diff --git a/src/data/mock/vessels.ts b/frontend/src/data/mock/vessels.ts similarity index 100% rename from src/data/mock/vessels.ts rename to frontend/src/data/mock/vessels.ts diff --git a/src/data/speciesCodes.json b/frontend/src/data/speciesCodes.json similarity index 100% rename from src/data/speciesCodes.json rename to frontend/src/data/speciesCodes.json diff --git a/src/data/vesselTypeCodes.json b/frontend/src/data/vesselTypeCodes.json similarity index 100% rename from src/data/vesselTypeCodes.json rename to frontend/src/data/vesselTypeCodes.json diff --git a/src/features/admin/AccessControl.tsx b/frontend/src/features/admin/AccessControl.tsx similarity index 100% rename from src/features/admin/AccessControl.tsx rename to frontend/src/features/admin/AccessControl.tsx diff --git a/src/features/admin/AdminPanel.tsx b/frontend/src/features/admin/AdminPanel.tsx similarity index 100% rename from src/features/admin/AdminPanel.tsx rename to frontend/src/features/admin/AdminPanel.tsx diff --git a/src/features/admin/DataHub.tsx b/frontend/src/features/admin/DataHub.tsx similarity index 100% rename from src/features/admin/DataHub.tsx rename to frontend/src/features/admin/DataHub.tsx diff --git a/src/features/admin/NoticeManagement.tsx b/frontend/src/features/admin/NoticeManagement.tsx similarity index 100% rename from src/features/admin/NoticeManagement.tsx rename to frontend/src/features/admin/NoticeManagement.tsx diff --git a/src/features/admin/SystemConfig.tsx b/frontend/src/features/admin/SystemConfig.tsx similarity index 100% rename from src/features/admin/SystemConfig.tsx rename to frontend/src/features/admin/SystemConfig.tsx diff --git a/src/features/admin/index.ts b/frontend/src/features/admin/index.ts similarity index 100% rename from src/features/admin/index.ts rename to frontend/src/features/admin/index.ts diff --git a/src/features/ai-operations/AIAssistant.tsx b/frontend/src/features/ai-operations/AIAssistant.tsx similarity index 100% rename from src/features/ai-operations/AIAssistant.tsx rename to frontend/src/features/ai-operations/AIAssistant.tsx diff --git a/src/features/ai-operations/AIModelManagement.tsx b/frontend/src/features/ai-operations/AIModelManagement.tsx similarity index 100% rename from src/features/ai-operations/AIModelManagement.tsx rename to frontend/src/features/ai-operations/AIModelManagement.tsx diff --git a/src/features/ai-operations/MLOpsPage.tsx b/frontend/src/features/ai-operations/MLOpsPage.tsx similarity index 100% rename from src/features/ai-operations/MLOpsPage.tsx rename to frontend/src/features/ai-operations/MLOpsPage.tsx diff --git a/src/features/ai-operations/index.ts b/frontend/src/features/ai-operations/index.ts similarity index 100% rename from src/features/ai-operations/index.ts rename to frontend/src/features/ai-operations/index.ts diff --git a/src/features/auth/LoginPage.tsx b/frontend/src/features/auth/LoginPage.tsx similarity index 100% rename from src/features/auth/LoginPage.tsx rename to frontend/src/features/auth/LoginPage.tsx diff --git a/src/features/auth/index.ts b/frontend/src/features/auth/index.ts similarity index 100% rename from src/features/auth/index.ts rename to frontend/src/features/auth/index.ts diff --git a/src/features/dashboard/Dashboard.tsx b/frontend/src/features/dashboard/Dashboard.tsx similarity index 100% rename from src/features/dashboard/Dashboard.tsx rename to frontend/src/features/dashboard/Dashboard.tsx diff --git a/src/features/dashboard/index.ts b/frontend/src/features/dashboard/index.ts similarity index 100% rename from src/features/dashboard/index.ts rename to frontend/src/features/dashboard/index.ts diff --git a/src/features/detection/ChinaFishing.tsx b/frontend/src/features/detection/ChinaFishing.tsx similarity index 100% rename from src/features/detection/ChinaFishing.tsx rename to frontend/src/features/detection/ChinaFishing.tsx diff --git a/src/features/detection/DarkVesselDetection.tsx b/frontend/src/features/detection/DarkVesselDetection.tsx similarity index 100% rename from src/features/detection/DarkVesselDetection.tsx rename to frontend/src/features/detection/DarkVesselDetection.tsx diff --git a/src/features/detection/GearDetection.tsx b/frontend/src/features/detection/GearDetection.tsx similarity index 100% rename from src/features/detection/GearDetection.tsx rename to frontend/src/features/detection/GearDetection.tsx diff --git a/src/features/detection/GearIdentification.tsx b/frontend/src/features/detection/GearIdentification.tsx similarity index 100% rename from src/features/detection/GearIdentification.tsx rename to frontend/src/features/detection/GearIdentification.tsx diff --git a/src/features/detection/index.ts b/frontend/src/features/detection/index.ts similarity index 100% rename from src/features/detection/index.ts rename to frontend/src/features/detection/index.ts diff --git a/src/features/enforcement/EnforcementHistory.tsx b/frontend/src/features/enforcement/EnforcementHistory.tsx similarity index 100% rename from src/features/enforcement/EnforcementHistory.tsx rename to frontend/src/features/enforcement/EnforcementHistory.tsx diff --git a/src/features/enforcement/EventList.tsx b/frontend/src/features/enforcement/EventList.tsx similarity index 100% rename from src/features/enforcement/EventList.tsx rename to frontend/src/features/enforcement/EventList.tsx diff --git a/src/features/enforcement/index.ts b/frontend/src/features/enforcement/index.ts similarity index 100% rename from src/features/enforcement/index.ts rename to frontend/src/features/enforcement/index.ts diff --git a/src/features/field-ops/AIAlert.tsx b/frontend/src/features/field-ops/AIAlert.tsx similarity index 100% rename from src/features/field-ops/AIAlert.tsx rename to frontend/src/features/field-ops/AIAlert.tsx diff --git a/src/features/field-ops/MobileService.tsx b/frontend/src/features/field-ops/MobileService.tsx similarity index 100% rename from src/features/field-ops/MobileService.tsx rename to frontend/src/features/field-ops/MobileService.tsx diff --git a/src/features/field-ops/ShipAgent.tsx b/frontend/src/features/field-ops/ShipAgent.tsx similarity index 100% rename from src/features/field-ops/ShipAgent.tsx rename to frontend/src/features/field-ops/ShipAgent.tsx diff --git a/src/features/field-ops/index.ts b/frontend/src/features/field-ops/index.ts similarity index 100% rename from src/features/field-ops/index.ts rename to frontend/src/features/field-ops/index.ts diff --git a/src/features/monitoring/MonitoringDashboard.tsx b/frontend/src/features/monitoring/MonitoringDashboard.tsx similarity index 100% rename from src/features/monitoring/MonitoringDashboard.tsx rename to frontend/src/features/monitoring/MonitoringDashboard.tsx diff --git a/src/features/monitoring/index.ts b/frontend/src/features/monitoring/index.ts similarity index 100% rename from src/features/monitoring/index.ts rename to frontend/src/features/monitoring/index.ts diff --git a/src/features/patrol/FleetOptimization.tsx b/frontend/src/features/patrol/FleetOptimization.tsx similarity index 100% rename from src/features/patrol/FleetOptimization.tsx rename to frontend/src/features/patrol/FleetOptimization.tsx diff --git a/src/features/patrol/PatrolRoute.tsx b/frontend/src/features/patrol/PatrolRoute.tsx similarity index 100% rename from src/features/patrol/PatrolRoute.tsx rename to frontend/src/features/patrol/PatrolRoute.tsx diff --git a/src/features/patrol/index.ts b/frontend/src/features/patrol/index.ts similarity index 100% rename from src/features/patrol/index.ts rename to frontend/src/features/patrol/index.ts diff --git a/src/features/risk-assessment/EnforcementPlan.tsx b/frontend/src/features/risk-assessment/EnforcementPlan.tsx similarity index 100% rename from src/features/risk-assessment/EnforcementPlan.tsx rename to frontend/src/features/risk-assessment/EnforcementPlan.tsx diff --git a/src/features/risk-assessment/RiskMap.tsx b/frontend/src/features/risk-assessment/RiskMap.tsx similarity index 100% rename from src/features/risk-assessment/RiskMap.tsx rename to frontend/src/features/risk-assessment/RiskMap.tsx diff --git a/src/features/risk-assessment/index.ts b/frontend/src/features/risk-assessment/index.ts similarity index 100% rename from src/features/risk-assessment/index.ts rename to frontend/src/features/risk-assessment/index.ts diff --git a/src/features/statistics/ExternalService.tsx b/frontend/src/features/statistics/ExternalService.tsx similarity index 100% rename from src/features/statistics/ExternalService.tsx rename to frontend/src/features/statistics/ExternalService.tsx diff --git a/src/features/statistics/ReportManagement.tsx b/frontend/src/features/statistics/ReportManagement.tsx similarity index 100% rename from src/features/statistics/ReportManagement.tsx rename to frontend/src/features/statistics/ReportManagement.tsx diff --git a/src/features/statistics/Statistics.tsx b/frontend/src/features/statistics/Statistics.tsx similarity index 100% rename from src/features/statistics/Statistics.tsx rename to frontend/src/features/statistics/Statistics.tsx diff --git a/src/features/statistics/index.ts b/frontend/src/features/statistics/index.ts similarity index 100% rename from src/features/statistics/index.ts rename to frontend/src/features/statistics/index.ts diff --git a/src/features/surveillance/LiveMapView.tsx b/frontend/src/features/surveillance/LiveMapView.tsx similarity index 100% rename from src/features/surveillance/LiveMapView.tsx rename to frontend/src/features/surveillance/LiveMapView.tsx diff --git a/src/features/surveillance/MapControl.tsx b/frontend/src/features/surveillance/MapControl.tsx similarity index 100% rename from src/features/surveillance/MapControl.tsx rename to frontend/src/features/surveillance/MapControl.tsx diff --git a/src/features/surveillance/index.ts b/frontend/src/features/surveillance/index.ts similarity index 100% rename from src/features/surveillance/index.ts rename to frontend/src/features/surveillance/index.ts diff --git a/src/features/vessel/TransferDetection.tsx b/frontend/src/features/vessel/TransferDetection.tsx similarity index 100% rename from src/features/vessel/TransferDetection.tsx rename to frontend/src/features/vessel/TransferDetection.tsx diff --git a/src/features/vessel/VesselDetail.tsx b/frontend/src/features/vessel/VesselDetail.tsx similarity index 100% rename from src/features/vessel/VesselDetail.tsx rename to frontend/src/features/vessel/VesselDetail.tsx diff --git a/src/features/vessel/index.ts b/frontend/src/features/vessel/index.ts similarity index 100% rename from src/features/vessel/index.ts rename to frontend/src/features/vessel/index.ts diff --git a/src/lib/charts/BaseChart.tsx b/frontend/src/lib/charts/BaseChart.tsx similarity index 100% rename from src/lib/charts/BaseChart.tsx rename to frontend/src/lib/charts/BaseChart.tsx diff --git a/src/lib/charts/index.ts b/frontend/src/lib/charts/index.ts similarity index 100% rename from src/lib/charts/index.ts rename to frontend/src/lib/charts/index.ts diff --git a/src/lib/charts/presets/AreaChart.tsx b/frontend/src/lib/charts/presets/AreaChart.tsx similarity index 100% rename from src/lib/charts/presets/AreaChart.tsx rename to frontend/src/lib/charts/presets/AreaChart.tsx diff --git a/src/lib/charts/presets/BarChart.tsx b/frontend/src/lib/charts/presets/BarChart.tsx similarity index 100% rename from src/lib/charts/presets/BarChart.tsx rename to frontend/src/lib/charts/presets/BarChart.tsx diff --git a/src/lib/charts/presets/LineChart.tsx b/frontend/src/lib/charts/presets/LineChart.tsx similarity index 100% rename from src/lib/charts/presets/LineChart.tsx rename to frontend/src/lib/charts/presets/LineChart.tsx diff --git a/src/lib/charts/presets/PieChart.tsx b/frontend/src/lib/charts/presets/PieChart.tsx similarity index 100% rename from src/lib/charts/presets/PieChart.tsx rename to frontend/src/lib/charts/presets/PieChart.tsx diff --git a/src/lib/charts/presets/index.ts b/frontend/src/lib/charts/presets/index.ts similarity index 100% rename from src/lib/charts/presets/index.ts rename to frontend/src/lib/charts/presets/index.ts diff --git a/src/lib/charts/theme.ts b/frontend/src/lib/charts/theme.ts similarity index 100% rename from src/lib/charts/theme.ts rename to frontend/src/lib/charts/theme.ts diff --git a/src/lib/charts/tokens.ts b/frontend/src/lib/charts/tokens.ts similarity index 100% rename from src/lib/charts/tokens.ts rename to frontend/src/lib/charts/tokens.ts diff --git a/src/lib/i18n/config.ts b/frontend/src/lib/i18n/config.ts similarity index 100% rename from src/lib/i18n/config.ts rename to frontend/src/lib/i18n/config.ts diff --git a/src/lib/i18n/index.ts b/frontend/src/lib/i18n/index.ts similarity index 100% rename from src/lib/i18n/index.ts rename to frontend/src/lib/i18n/index.ts diff --git a/src/lib/i18n/locales/en/admin.json b/frontend/src/lib/i18n/locales/en/admin.json similarity index 100% rename from src/lib/i18n/locales/en/admin.json rename to frontend/src/lib/i18n/locales/en/admin.json diff --git a/src/lib/i18n/locales/en/ai.json b/frontend/src/lib/i18n/locales/en/ai.json similarity index 100% rename from src/lib/i18n/locales/en/ai.json rename to frontend/src/lib/i18n/locales/en/ai.json diff --git a/src/lib/i18n/locales/en/auth.json b/frontend/src/lib/i18n/locales/en/auth.json similarity index 100% rename from src/lib/i18n/locales/en/auth.json rename to frontend/src/lib/i18n/locales/en/auth.json diff --git a/src/lib/i18n/locales/en/common.json b/frontend/src/lib/i18n/locales/en/common.json similarity index 100% rename from src/lib/i18n/locales/en/common.json rename to frontend/src/lib/i18n/locales/en/common.json diff --git a/src/lib/i18n/locales/en/dashboard.json b/frontend/src/lib/i18n/locales/en/dashboard.json similarity index 100% rename from src/lib/i18n/locales/en/dashboard.json rename to frontend/src/lib/i18n/locales/en/dashboard.json diff --git a/src/lib/i18n/locales/en/detection.json b/frontend/src/lib/i18n/locales/en/detection.json similarity index 100% rename from src/lib/i18n/locales/en/detection.json rename to frontend/src/lib/i18n/locales/en/detection.json diff --git a/src/lib/i18n/locales/en/enforcement.json b/frontend/src/lib/i18n/locales/en/enforcement.json similarity index 100% rename from src/lib/i18n/locales/en/enforcement.json rename to frontend/src/lib/i18n/locales/en/enforcement.json diff --git a/src/lib/i18n/locales/en/fieldOps.json b/frontend/src/lib/i18n/locales/en/fieldOps.json similarity index 100% rename from src/lib/i18n/locales/en/fieldOps.json rename to frontend/src/lib/i18n/locales/en/fieldOps.json diff --git a/src/lib/i18n/locales/en/patrol.json b/frontend/src/lib/i18n/locales/en/patrol.json similarity index 100% rename from src/lib/i18n/locales/en/patrol.json rename to frontend/src/lib/i18n/locales/en/patrol.json diff --git a/src/lib/i18n/locales/en/statistics.json b/frontend/src/lib/i18n/locales/en/statistics.json similarity index 100% rename from src/lib/i18n/locales/en/statistics.json rename to frontend/src/lib/i18n/locales/en/statistics.json diff --git a/src/lib/i18n/locales/ko/admin.json b/frontend/src/lib/i18n/locales/ko/admin.json similarity index 100% rename from src/lib/i18n/locales/ko/admin.json rename to frontend/src/lib/i18n/locales/ko/admin.json diff --git a/src/lib/i18n/locales/ko/ai.json b/frontend/src/lib/i18n/locales/ko/ai.json similarity index 100% rename from src/lib/i18n/locales/ko/ai.json rename to frontend/src/lib/i18n/locales/ko/ai.json diff --git a/src/lib/i18n/locales/ko/auth.json b/frontend/src/lib/i18n/locales/ko/auth.json similarity index 100% rename from src/lib/i18n/locales/ko/auth.json rename to frontend/src/lib/i18n/locales/ko/auth.json diff --git a/src/lib/i18n/locales/ko/common.json b/frontend/src/lib/i18n/locales/ko/common.json similarity index 100% rename from src/lib/i18n/locales/ko/common.json rename to frontend/src/lib/i18n/locales/ko/common.json diff --git a/src/lib/i18n/locales/ko/dashboard.json b/frontend/src/lib/i18n/locales/ko/dashboard.json similarity index 100% rename from src/lib/i18n/locales/ko/dashboard.json rename to frontend/src/lib/i18n/locales/ko/dashboard.json diff --git a/src/lib/i18n/locales/ko/detection.json b/frontend/src/lib/i18n/locales/ko/detection.json similarity index 100% rename from src/lib/i18n/locales/ko/detection.json rename to frontend/src/lib/i18n/locales/ko/detection.json diff --git a/src/lib/i18n/locales/ko/enforcement.json b/frontend/src/lib/i18n/locales/ko/enforcement.json similarity index 100% rename from src/lib/i18n/locales/ko/enforcement.json rename to frontend/src/lib/i18n/locales/ko/enforcement.json diff --git a/src/lib/i18n/locales/ko/fieldOps.json b/frontend/src/lib/i18n/locales/ko/fieldOps.json similarity index 100% rename from src/lib/i18n/locales/ko/fieldOps.json rename to frontend/src/lib/i18n/locales/ko/fieldOps.json diff --git a/src/lib/i18n/locales/ko/patrol.json b/frontend/src/lib/i18n/locales/ko/patrol.json similarity index 100% rename from src/lib/i18n/locales/ko/patrol.json rename to frontend/src/lib/i18n/locales/ko/patrol.json diff --git a/src/lib/i18n/locales/ko/statistics.json b/frontend/src/lib/i18n/locales/ko/statistics.json similarity index 100% rename from src/lib/i18n/locales/ko/statistics.json rename to frontend/src/lib/i18n/locales/ko/statistics.json diff --git a/src/lib/map/BaseMap.tsx b/frontend/src/lib/map/BaseMap.tsx similarity index 100% rename from src/lib/map/BaseMap.tsx rename to frontend/src/lib/map/BaseMap.tsx diff --git a/src/lib/map/constants.ts b/frontend/src/lib/map/constants.ts similarity index 100% rename from src/lib/map/constants.ts rename to frontend/src/lib/map/constants.ts diff --git a/src/lib/map/hooks/useMapLayers.ts b/frontend/src/lib/map/hooks/useMapLayers.ts similarity index 100% rename from src/lib/map/hooks/useMapLayers.ts rename to frontend/src/lib/map/hooks/useMapLayers.ts diff --git a/src/lib/map/index.ts b/frontend/src/lib/map/index.ts similarity index 100% rename from src/lib/map/index.ts rename to frontend/src/lib/map/index.ts diff --git a/src/lib/map/layers/boundaries.ts b/frontend/src/lib/map/layers/boundaries.ts similarity index 100% rename from src/lib/map/layers/boundaries.ts rename to frontend/src/lib/map/layers/boundaries.ts diff --git a/src/lib/map/layers/heatmap.ts b/frontend/src/lib/map/layers/heatmap.ts similarity index 100% rename from src/lib/map/layers/heatmap.ts rename to frontend/src/lib/map/layers/heatmap.ts diff --git a/src/lib/map/layers/index.ts b/frontend/src/lib/map/layers/index.ts similarity index 100% rename from src/lib/map/layers/index.ts rename to frontend/src/lib/map/layers/index.ts diff --git a/src/lib/map/layers/markers.ts b/frontend/src/lib/map/layers/markers.ts similarity index 100% rename from src/lib/map/layers/markers.ts rename to frontend/src/lib/map/layers/markers.ts diff --git a/src/lib/map/layers/polyline.ts b/frontend/src/lib/map/layers/polyline.ts similarity index 100% rename from src/lib/map/layers/polyline.ts rename to frontend/src/lib/map/layers/polyline.ts diff --git a/src/lib/map/layers/static.ts b/frontend/src/lib/map/layers/static.ts similarity index 100% rename from src/lib/map/layers/static.ts rename to frontend/src/lib/map/layers/static.ts diff --git a/src/lib/map/layers/zones.ts b/frontend/src/lib/map/layers/zones.ts similarity index 100% rename from src/lib/map/layers/zones.ts rename to frontend/src/lib/map/layers/zones.ts diff --git a/src/lib/map/types.ts b/frontend/src/lib/map/types.ts similarity index 100% rename from src/lib/map/types.ts rename to frontend/src/lib/map/types.ts diff --git a/src/lib/theme/colors.ts b/frontend/src/lib/theme/colors.ts similarity index 100% rename from src/lib/theme/colors.ts rename to frontend/src/lib/theme/colors.ts diff --git a/src/lib/theme/index.ts b/frontend/src/lib/theme/index.ts similarity index 100% rename from src/lib/theme/index.ts rename to frontend/src/lib/theme/index.ts diff --git a/src/lib/theme/tokens.ts b/frontend/src/lib/theme/tokens.ts similarity index 100% rename from src/lib/theme/tokens.ts rename to frontend/src/lib/theme/tokens.ts diff --git a/src/lib/theme/variants.ts b/frontend/src/lib/theme/variants.ts similarity index 100% rename from src/lib/theme/variants.ts rename to frontend/src/lib/theme/variants.ts diff --git a/src/main.tsx b/frontend/src/main.tsx similarity index 100% rename from src/main.tsx rename to frontend/src/main.tsx diff --git a/src/services/api.ts b/frontend/src/services/api.ts similarity index 100% rename from src/services/api.ts rename to frontend/src/services/api.ts diff --git a/src/services/event.ts b/frontend/src/services/event.ts similarity index 100% rename from src/services/event.ts rename to frontend/src/services/event.ts diff --git a/src/services/index.ts b/frontend/src/services/index.ts similarity index 100% rename from src/services/index.ts rename to frontend/src/services/index.ts diff --git a/src/services/kpi.ts b/frontend/src/services/kpi.ts similarity index 100% rename from src/services/kpi.ts rename to frontend/src/services/kpi.ts diff --git a/src/services/patrol.ts b/frontend/src/services/patrol.ts similarity index 100% rename from src/services/patrol.ts rename to frontend/src/services/patrol.ts diff --git a/src/services/vessel.ts b/frontend/src/services/vessel.ts similarity index 100% rename from src/services/vessel.ts rename to frontend/src/services/vessel.ts diff --git a/src/services/ws.ts b/frontend/src/services/ws.ts similarity index 100% rename from src/services/ws.ts rename to frontend/src/services/ws.ts diff --git a/src/shared/components/common/DataTable.tsx b/frontend/src/shared/components/common/DataTable.tsx similarity index 100% rename from src/shared/components/common/DataTable.tsx rename to frontend/src/shared/components/common/DataTable.tsx diff --git a/src/shared/components/common/ExcelExport.tsx b/frontend/src/shared/components/common/ExcelExport.tsx similarity index 100% rename from src/shared/components/common/ExcelExport.tsx rename to frontend/src/shared/components/common/ExcelExport.tsx diff --git a/src/shared/components/common/FileUpload.tsx b/frontend/src/shared/components/common/FileUpload.tsx similarity index 100% rename from src/shared/components/common/FileUpload.tsx rename to frontend/src/shared/components/common/FileUpload.tsx diff --git a/src/shared/components/common/NotificationBanner.tsx b/frontend/src/shared/components/common/NotificationBanner.tsx similarity index 100% rename from src/shared/components/common/NotificationBanner.tsx rename to frontend/src/shared/components/common/NotificationBanner.tsx diff --git a/src/shared/components/common/PageToolbar.tsx b/frontend/src/shared/components/common/PageToolbar.tsx similarity index 100% rename from src/shared/components/common/PageToolbar.tsx rename to frontend/src/shared/components/common/PageToolbar.tsx diff --git a/src/shared/components/common/Pagination.tsx b/frontend/src/shared/components/common/Pagination.tsx similarity index 100% rename from src/shared/components/common/Pagination.tsx rename to frontend/src/shared/components/common/Pagination.tsx diff --git a/src/shared/components/common/PrintButton.tsx b/frontend/src/shared/components/common/PrintButton.tsx similarity index 100% rename from src/shared/components/common/PrintButton.tsx rename to frontend/src/shared/components/common/PrintButton.tsx diff --git a/src/shared/components/common/SaveButton.tsx b/frontend/src/shared/components/common/SaveButton.tsx similarity index 100% rename from src/shared/components/common/SaveButton.tsx rename to frontend/src/shared/components/common/SaveButton.tsx diff --git a/src/shared/components/common/SearchInput.tsx b/frontend/src/shared/components/common/SearchInput.tsx similarity index 100% rename from src/shared/components/common/SearchInput.tsx rename to frontend/src/shared/components/common/SearchInput.tsx diff --git a/src/shared/components/common/index.ts b/frontend/src/shared/components/common/index.ts similarity index 100% rename from src/shared/components/common/index.ts rename to frontend/src/shared/components/common/index.ts diff --git a/src/shared/components/ui/badge.tsx b/frontend/src/shared/components/ui/badge.tsx similarity index 100% rename from src/shared/components/ui/badge.tsx rename to frontend/src/shared/components/ui/badge.tsx diff --git a/src/shared/components/ui/card.tsx b/frontend/src/shared/components/ui/card.tsx similarity index 100% rename from src/shared/components/ui/card.tsx rename to frontend/src/shared/components/ui/card.tsx diff --git a/src/stores/enforcementStore.ts b/frontend/src/stores/enforcementStore.ts similarity index 100% rename from src/stores/enforcementStore.ts rename to frontend/src/stores/enforcementStore.ts diff --git a/src/stores/eventStore.ts b/frontend/src/stores/eventStore.ts similarity index 100% rename from src/stores/eventStore.ts rename to frontend/src/stores/eventStore.ts diff --git a/src/stores/gearStore.ts b/frontend/src/stores/gearStore.ts similarity index 100% rename from src/stores/gearStore.ts rename to frontend/src/stores/gearStore.ts diff --git a/src/stores/kpiStore.ts b/frontend/src/stores/kpiStore.ts similarity index 100% rename from src/stores/kpiStore.ts rename to frontend/src/stores/kpiStore.ts diff --git a/src/stores/patrolStore.ts b/frontend/src/stores/patrolStore.ts similarity index 100% rename from src/stores/patrolStore.ts rename to frontend/src/stores/patrolStore.ts diff --git a/src/stores/settingsStore.ts b/frontend/src/stores/settingsStore.ts similarity index 100% rename from src/stores/settingsStore.ts rename to frontend/src/stores/settingsStore.ts diff --git a/src/stores/transferStore.ts b/frontend/src/stores/transferStore.ts similarity index 100% rename from src/stores/transferStore.ts rename to frontend/src/stores/transferStore.ts diff --git a/src/stores/vesselStore.ts b/frontend/src/stores/vesselStore.ts similarity index 100% rename from src/stores/vesselStore.ts rename to frontend/src/stores/vesselStore.ts diff --git a/src/styles/fonts.css b/frontend/src/styles/fonts.css similarity index 100% rename from src/styles/fonts.css rename to frontend/src/styles/fonts.css diff --git a/src/styles/index.css b/frontend/src/styles/index.css similarity index 100% rename from src/styles/index.css rename to frontend/src/styles/index.css diff --git a/src/styles/tailwind.css b/frontend/src/styles/tailwind.css similarity index 100% rename from src/styles/tailwind.css rename to frontend/src/styles/tailwind.css diff --git a/src/styles/theme.css b/frontend/src/styles/theme.css similarity index 100% rename from src/styles/theme.css rename to frontend/src/styles/theme.css diff --git a/src/vite-env.d.ts b/frontend/src/vite-env.d.ts similarity index 100% rename from src/vite-env.d.ts rename to frontend/src/vite-env.d.ts diff --git a/tsconfig.json b/frontend/tsconfig.json similarity index 100% rename from tsconfig.json rename to frontend/tsconfig.json diff --git a/vite.config.ts b/frontend/vite.config.ts similarity index 80% rename from vite.config.ts rename to frontend/vite.config.ts index ce761c1..d28c5b2 100644 --- a/vite.config.ts +++ b/frontend/vite.config.ts @@ -18,4 +18,13 @@ export default defineConfig({ '@stores': path.resolve(__dirname, './src/stores'), }, }, + server: { + port: 5173, + proxy: { + '/api': { + target: 'http://localhost:8080', + changeOrigin: true, + }, + }, + }, })