3.5 KiB
3.5 KiB
Database Field Name Inconsistencies Report
Overview
This report documents all database field name inconsistencies found between the database schema (init.sql) and Python code usage in the v2_adminpanel application.
1. Sessions Table - Duplicate/Alias Fields
Issue
The sessions table contains multiple duplicate columns that serve as aliases, causing confusion and inconsistent usage:
-- Current schema has these duplicate fields:
is_active BOOLEAN DEFAULT TRUE,
active BOOLEAN DEFAULT TRUE -- Alias for is_active
started_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
login_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- Alias for started_at
last_heartbeat TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
last_activity TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- Alias for last_heartbeat
ended_at TIMESTAMP WITH TIME ZONE,
logout_time TIMESTAMP WITH TIME ZONE, -- Alias for ended_at
Code Usage Examples
routes/session_routes.py:- Line 32:
WHERE s.is_active = TRUE - Line 88:
s.active - Line 192:
WHERE active = true - Line 201:
SET active = false
- Line 32:
2. Device ID vs Hardware ID Mismatch
Issue
The database schema uses hardware_id but the code references device_id:
-- Database schema:
sessions.hardware_id VARCHAR(100)
device_registrations.hardware_id TEXT NOT NULL
Code Usage Examples
routes/session_routes.py:- Line 84:
s.device_id - Line 134:
'device_id': row[3] - Line 190:
SELECT license_key, username, device_id - Line 326:
COUNT(DISTINCT s.device_id) as unique_devices
- Line 84:
3. Time Field Inconsistencies
Issue
Mixed usage of time field names:
Code Usage Examples
models.pyline 167:ORDER BY s.start_time DESC(but schema hasstarted_at)- Session history queries mix
login_timeandstarted_at
4. Field Naming Patterns
Consistent Patterns Found
- ✅ All tables use
created_at(notcreated) - ✅ Most tables use
is_activepattern - ✅ Foreign keys use
_idsuffix consistently
Inconsistent Patterns
- ❌ Sessions table has both
is_activeandactive - ❌ Time fields have multiple aliases
Migration Scripts
Step 1: Fix device_id references in code
-- Create view for backward compatibility
CREATE OR REPLACE VIEW sessions_compat AS
SELECT
*,
hardware_id as device_id -- Alias for compatibility
FROM sessions;
Step 2: Remove duplicate columns (after code update)
-- Remove duplicate columns from sessions table
ALTER TABLE sessions
DROP COLUMN IF EXISTS active,
DROP COLUMN IF EXISTS login_time,
DROP COLUMN IF EXISTS last_activity,
DROP COLUMN IF EXISTS logout_time;
Step 3: Update indexes if needed
-- Recreate any indexes that used the dropped columns
-- (Check existing indexes first)
Recommended Code Changes
1. Update session_routes.py
Replace all occurrences of:
device_id→hardware_idactive→is_activelogin_time→started_atlast_activity→last_heartbeatlogout_time→ended_at
2. Update models.py
- Line 167: Change
start_timetostarted_at
3. Create database migration script
Create a migration that:
- Updates all code references
- Creates compatibility views
- Removes duplicate columns
- Updates any affected indexes
Testing Checklist
- All session queries work correctly
- Session history displays properly
- Active session count is accurate
- Device tracking works correctly
- All time-based queries function properly