Update
This commit is contained in:
@@ -0,0 +1,80 @@
|
||||
-- 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();
|
||||
Reference in New Issue
Block a user