-- Drop existing tables (clean slate) DROP TABLE IF EXISTS maintenance_schedules CASCADE; DROP TABLE IF EXISTS maintenance_logs CASCADE; -- Create maintenance_records table CREATE TABLE maintenance_records ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id VARCHAR(255) NOT NULL, vehicle_id UUID NOT NULL, category VARCHAR(50) NOT NULL, subtypes TEXT[] NOT NULL, date DATE NOT NULL, odometer_reading INTEGER, cost DECIMAL(10, 2), shop_name VARCHAR(200), notes TEXT, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_maintenance_vehicle FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE CASCADE, CONSTRAINT check_category CHECK (category IN ('routine_maintenance', 'repair', 'performance_upgrade')), CONSTRAINT check_subtypes_not_empty CHECK (array_length(subtypes, 1) > 0) ); -- Create maintenance_schedules table CREATE TABLE maintenance_schedules ( id UUID PRIMARY KEY DEFAULT uuid_generate_v4(), user_id VARCHAR(255) NOT NULL, vehicle_id UUID NOT NULL, category VARCHAR(50) NOT NULL, subtypes TEXT[] NOT NULL, interval_months INTEGER, interval_miles INTEGER, last_service_date DATE, last_service_mileage INTEGER, next_due_date DATE, next_due_mileage INTEGER, is_active BOOLEAN DEFAULT true, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_schedule_vehicle FOREIGN KEY (vehicle_id) REFERENCES vehicles(id) ON DELETE CASCADE, CONSTRAINT check_schedule_category CHECK (category IN ('routine_maintenance', 'repair', 'performance_upgrade')) ); -- Indexes for performance CREATE INDEX idx_maintenance_records_user_id ON maintenance_records(user_id); CREATE INDEX idx_maintenance_records_vehicle_id ON maintenance_records(vehicle_id); CREATE INDEX idx_maintenance_records_date ON maintenance_records(date DESC); CREATE INDEX idx_maintenance_records_category ON maintenance_records(category); CREATE INDEX idx_maintenance_schedules_user_id ON maintenance_schedules(user_id); CREATE INDEX idx_maintenance_schedules_vehicle_id ON maintenance_schedules(vehicle_id); CREATE INDEX idx_maintenance_schedules_next_due_date ON maintenance_schedules(next_due_date); CREATE INDEX idx_maintenance_schedules_active ON maintenance_schedules(is_active) WHERE is_active = true; -- Triggers for updated_at DROP TRIGGER IF EXISTS update_maintenance_records_updated_at ON maintenance_records; CREATE TRIGGER update_maintenance_records_updated_at BEFORE UPDATE ON maintenance_records FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); DROP TRIGGER IF EXISTS update_maintenance_schedules_updated_at ON maintenance_schedules; CREATE TRIGGER update_maintenance_schedules_updated_at BEFORE UPDATE ON maintenance_schedules FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();