FleetOS Company-Owned Migration Plan
🎯 Objective
📋 Phase 1: Database Migration
Step 1.1: Add Company Columns to service_requests
-- ============================================
-- FLEETOS COMPANY-OWNED MIGRATION
-- Add company columns to service_requests table
-- Safe to run: Uses IF NOT EXISTS, backward compatible
-- ============================================
-- Add fleet_company_id column
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='service_requests' AND column_name='fleet_company_id'
) THEN
ALTER TABLE service_requests
ADD COLUMN fleet_company_id UUID REFERENCES companies(company_id);
RAISE NOTICE '✅ Added fleet_company_id column';
ELSE
RAISE NOTICE 'ℹ️ fleet_company_id column already exists';
END IF;
END $$;
-- Add supplier_company_id column
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='service_requests' AND column_name='supplier_company_id'
) THEN
ALTER TABLE service_requests
ADD COLUMN supplier_company_id UUID REFERENCES companies(company_id);
RAISE NOTICE '✅ Added supplier_company_id column';
ELSE
RAISE NOTICE 'ℹ️ supplier_company_id column already exists';
END IF;
END $$;
-- Add submitted_by_user_id column (audit trail)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='service_requests' AND column_name='submitted_by_user_id'
) THEN
ALTER TABLE service_requests
ADD COLUMN submitted_by_user_id UUID REFERENCES users(user_id);
RAISE NOTICE '✅ Added submitted_by_user_id column';
ELSE
RAISE NOTICE 'ℹ️ submitted_by_user_id column already exists';
END IF;
END $$;
-- Add assigned_to_user_id column (current tech working)
DO $$
BEGIN
IF NOT EXISTS (
SELECT 1 FROM information_schema.columns
WHERE table_name='service_requests' AND column_name='assigned_to_user_id'
) THEN
ALTER TABLE service_requests
ADD COLUMN assigned_to_user_id UUID REFERENCES users(user_id);
RAISE NOTICE '✅ Added assigned_to_user_id column';
ELSE
RAISE NOTICE 'ℹ️ assigned_to_user_id column already exists';
END IF;
END $$;
-- Create indexes for performance
CREATE INDEX IF NOT EXISTS idx_service_requests_fleet_company
ON service_requests(fleet_company_id);
CREATE INDEX IF NOT EXISTS idx_service_requests_supplier_company
ON service_requests(supplier_company_id);
CREATE INDEX IF NOT EXISTS idx_service_requests_submitted_by
ON service_requests(submitted_by_user_id);
CREATE INDEX IF NOT EXISTS idx_service_requests_assigned_to
ON service_requests(assigned_to_user_id);
-- Log completion
DO $$
BEGIN
RAISE NOTICE '✅ FleetOS company-owned migration complete!';
RAISE NOTICE ' - fleet_company_id added';
RAISE NOTICE ' - supplier_company_id added';
RAISE NOTICE ' - submitted_by_user_id added';
RAISE NOTICE ' - assigned_to_user_id added';
RAISE NOTICE ' - Indexes created';
RAISE NOTICE '⚠️ Old columns (fleet_user_id, supplier_id) still exist for backward compatibility';
RAISE NOTICE '⚠️ Update application code to use new columns';
END $$;📝 Phase 2: Code Changes
Step 2.1: Update QueryService.createServiceRequest()
Step 2.2: Update Seed Functions (Fleet Side)
Step 2.3: Update Seed Functions (Supplier Side)
Step 2.4: Update Manual Request Form
Step 2.5: Update Fleet Request Form
Step 2.6: Update App.tsx Route Handlers
🧪 Phase 3: Testing Checklist
Pre-Migration Tests
Migration Tests
Code Tests
Database Verification Queries
🔄 Phase 4: Rollback Strategy
If Migration Fails
📅 Deployment Plan
Step 1: Preparation
Step 2: Database Migration
Step 3: Code Deployment
Step 4: Verification
Step 5: Documentation
✅ Success Criteria
📊 Estimated Timeline
Phase
Task
Time
🚀 Ready to Execute
Last updated
Was this helpful?