# Geutebruck API System Architecture (Text Diagram) ``` ┌─────────────────────────────────────────────────────────────────────────────┐ │ GEUTEBRUCK API SYSTEM ARCHITECTURE │ │ (Current Implementation) │ └─────────────────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────────────────┐ │ CLIENT LAYER │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Web App │ │ GeViSet │ │ Postman │ │ Mobile App │ │ │ │ (Browser) │ │ (Config UI) │ │ (Testing) │ │ │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ │ │ HTTP/REST │ SetupClient │ HTTP/REST │ HTTP/REST │ │ │ │ (Port blocked │ │ │ │ │ │ when API runs) │ │ │ └─────────┼─────────────────┼──────────────────┼──────────────────┼───────────┘ │ │ │ │ ▼ ▼ ▼ ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ PYTHON API LAYER (FastAPI) Port 8000 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ REST API Endpoints │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ │ │ /auth/* │ │ /cameras/* │ │ /monitors/* │ │ │ │ │ │ - login │ │ - list │ │ - list │ │ │ │ │ │ - logout │ │ - get details │ │ - get details │ │ │ │ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────┐ ┌────────────────────────────────────────┐ │ │ │ │ │ /crossswitch/* │ │ /configuration/* ✅ IMPLEMENTED │ │ │ │ │ │ - execute │ │ ┌──────────────┐ ┌─────────────────┐ │ │ │ │ │ │ - clear │ │ │ /servers │ │ /action-mappings│ │ │ │ │ │ │ - get state │ │ │ - GET (list) │ │ - GET (list) │ │ │ │ │ │ └──────────────────┘ │ │ - POST │ │ - POST │ │ │ │ │ │ │ │ - PUT │ │ - PUT │ │ │ │ │ │ ┌──────────────────┐ │ │ - DELETE │ │ - DELETE │ │ │ │ │ │ │ /health │ │ └──────────────┘ └─────────────────┘ │ │ │ │ │ │ /docs (Swagger) │ └────────────────────────────────────────┘ │ │ │ │ └──────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ Services Layer │ │ │ │ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ │ │ │ │ │ AuthService │ │CameraService │ │ ConfigurationService ✅│ │ │ │ │ │ MonitorSvc │ │ CrossSwitch │ │ - Server CRUD │ │ │ │ │ └──────────────┘ └──────────────┘ │ - ActionMapping CRUD │ │ │ │ │ └────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ gRPC calls │ │ ▼ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ Port 50051 (gRPC) ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ C# SDK BRIDGE (gRPC Service) Port 50051 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ gRPC Services │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ │ │ CameraService │ │ MonitorService │ │ CrossSwitch │ │ │ │ │ │ - ListCameras │ │ - ListMonitors │ │ - Execute │ │ │ │ │ │ - GetDetails │ │ - GetDetails │ │ - Clear │ │ │ │ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ │ │ ConfigurationService ✅ IMPLEMENTED │ │ │ │ │ │ ┌───────────────────┐ ┌──────────────────────────┐ │ │ │ │ │ │ │ Server Methods │ │ ActionMapping Methods │ │ │ │ │ │ │ │ - CreateServer │ │ - CreateActionMapping │ │ │ │ │ │ │ │ - GetAllServers │ │ - GetAllActionMappings │ │ │ │ │ │ │ │ - GetServer │ │ - GetActionMapping │ │ │ │ │ │ │ │ - UpdateServer⚠️ │ │ - UpdateActionMapping │ │ │ │ │ │ │ │ - DeleteServer │ │ - DeleteActionMapping │ │ │ │ │ │ │ └───────────────────┘ └──────────────────────────┘ │ │ │ │ │ └────────────────────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ SDK Wrapper Components │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ │ │ GeViDatabase │ │ StateQuery │ │ SetupClient ✅ │ │ │ │ │ │ Wrapper │ │ Handler │ │ - Download .set │ │ │ │ │ │ - Connect │ │ - GetFirst/Next │ │ - Upload .set │ │ │ │ │ │ - Callback Mgmt │ │ - Enumerate │ │ - Parse tree │ │ │ │ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ │ │ FolderTree │ │ FolderTree │ │ Action │ │ │ │ │ │ Parser ✅ │ │ Writer ✅ │ │ Dispatcher │ │ │ │ │ │ - Parse .set │ │ - Build tree │ │ - Send actions │ │ │ │ │ │ - Navigate nodes │ │ - Write nodes │ │ │ │ │ │ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ │ GeViScope SDK API │ │ │ (GeViProcAPINET_4_0.dll) │ │ ▼ │ └─────────────────────────────────────────────────────────────────────────────┘ │ │ Ports 7700-7703 ▼ ┌─────────────────────────────────────────────────────────────────────────────┐ │ GEVISERVER (GeViSoft Server) Ports 7700-7703 │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────────────┐ │ │ │ Core Services │ │ │ │ ┌──────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ │ │ │ │ Camera Manager │ │ Monitor Manager │ │ Action Engine │ │ │ │ │ │ - Video inputs │ │ - Video outputs │ │ - Event system │ │ │ │ │ │ - PTZ control │ │ - CrossSwitch │ │ - Automation │ │ │ │ │ └──────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ │ │ │ │ │ ┌────────────────────────────────────────────────────────────┐ │ │ │ │ │ Configuration Storage │ │ │ │ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ │ │ │ │ TestMKS.set (Binary Configuration File) ✅ │ │ │ │ │ │ │ │ ┌────────────────┐ ┌─────────────────────────┐ │ │ │ │ │ │ │ │ │ GeViGCoreServer│ │ ActionMapping │ │ │ │ │ │ │ │ │ │ - 13 servers │ │ - 64 mappings │ │ │ │ │ │ │ │ │ │ - Server_1 │ │ - Input → Output rules │ │ │ │ │ │ │ │ │ │ - Server_2 │ │ - VMD triggers │ │ │ │ │ │ │ │ │ │ - ... │ │ - CrossSwitch actions │ │ │ │ │ │ │ │ │ └────────────────┘ └─────────────────────────┘ │ │ │ │ │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ │ └────────────────────────────────────────────────────────────┘ │ │ │ └────────────────────────────────────────────────────────────────────┘ │ │ │ │ Started with: geviserver.exe console │ └─────────────────────────────────────────────────────────────────────────────┘ ``` ## Service Management ``` PowerShell Scripts (Repository Root): ┌──────────────────────────────────────────────────────────────────────┐ │ start-services.ps1 │ │ ├─ 1. Start GeViServer (console mode) Wait for port 7700 │ │ ├─ 2. Start SDK Bridge Wait for port 50051 │ │ └─ 3. Start Python API (uvicorn) Wait for port 8000 │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ stop-services.ps1 │ │ ├─ 1. Stop Python API (uvicorn) │ │ ├─ 2. Stop SDK Bridge │ │ └─ 3. Stop GeViServer │ └──────────────────────────────────────────────────────────────────────┘ ┌──────────────────────────────────────────────────────────────────────┐ │ status-services.ps1 │ │ ├─ Check GeViServer status (PID, ports 7700-7703) │ │ ├─ Check SDK Bridge status (PID, port 50051) │ │ ├─ Check Python API status (PID, port 8000) │ │ └─ Test API health endpoint (HTTP GET /health) │ └──────────────────────────────────────────────────────────────────────┘ ``` ## Implemented Features ✅ - ✅ GeViServer Integration - ✅ SDK Bridge (C# gRPC) - ✅ Configuration Management (User Story 12) - G-Core Server CRUD - Action Mapping CRUD - Cascade deletion prevention - ✅ Python REST API - ✅ Service Management Scripts ## Known Issues ⚠️ - ⚠️ Server UPDATE operation has bug - ⚠️ SetupClient port conflict with GeViSet ## Ports & Communication | Port | Service | Purpose | |------------|----------------------|----------------------------------| | 7700-7703 | GeViServer | SDK connections, camera control | | 50051 | SDK Bridge (gRPC) | Python API ↔ SDK Bridge | | 8000 | Python API (HTTP) | REST API, Swagger UI |