Database Schema¶
FileFlux uses PostgreSQL 16 with auto-migration from backend/internal/db/schema.sql.
Entity Relationship Diagram¶
erDiagram
users ||--o{ tokens : creates
users ||--o{ jobs : creates
agents ||--o{ tokens : "registered via"
jobs ||--o{ transfers : triggers
agents ||--o{ transfers : "source/dest"
transfers ||--o{ transfer_chunks : contains
users {
serial id PK
varchar email UK
varchar name
varchar password_hash
varchar role
timestamp last_login
timestamp created_at
}
agents {
serial id PK
varchar name
varchar type
varchar status
varchar ip_address
varchar system
varchar version
varchar description
varchar transport_mode
timestamp last_seen
timestamp last_poll_at
timestamp created_at
}
tokens {
serial id PK
varchar token_value UK
varchar name
int agent_id FK
varchar description
timestamp expires_at
timestamp last_used
timestamp created_at
}
jobs {
serial id PK
varchar name
varchar type
varchar status
int source_agent_id FK
varchar source_path
int destination_agent_id FK
varchar destination_path
varchar schedule
text description
int user_id FK
timestamp last_run
timestamp created_at
}
transfers {
serial id PK
int job_id FK
varchar filename
bigint size
varchar status
int source_agent_id FK
int destination_agent_id FK
varchar source_path
varchar destination_path
varchar checksum
real progress
text error
varchar file_hash
varchar compression
int chunk_size
int total_chunks
int completed_chunks
bigint bytes_transferred
int retry_count
int max_retries
timestamp start_time
timestamp end_time
timestamp created_at
}
transfer_chunks {
serial id PK
int transfer_id FK
int chunk_index
varchar chunk_hash
int size_compressed
int size_original
varchar status
timestamp received_at
}
agent_message_queue {
serial id PK
int agent_id FK
varchar message_type
jsonb payload
varchar status
timestamp created_at
timestamp processed_at
}
Migrations¶
Schema is defined in backend/internal/db/schema.sql and applied automatically on startup via pgDB.Migrate(). All DDL statements use IF NOT EXISTS / IF NOT EXISTS for idempotent re-runs.
Indexes¶
Key indexes for query performance:
transfers(job_id)— Fast lookup by jobtransfers(status)— Filter by statusagents(status)— Active agent queriestokens(token_value)— Token validationjobs(source_agent_id, destination_agent_id)— Agent relationship queriestransfer_chunks(transfer_id)— Chunk lookup by transferagent_message_queue(agent_id, status)— Pending message lookup