56 lines
2.5 KiB
PL/PgSQL
56 lines
2.5 KiB
PL/PgSQL
-- Update user equipment for better spreader support
|
|
-- Note: we already have 'manufacturer' and 'model' columns, so let's use those
|
|
-- Add brand as alias for manufacturer for consistency with new API
|
|
ALTER TABLE user_equipment
|
|
ADD COLUMN IF NOT EXISTS brand VARCHAR(100),
|
|
ADD COLUMN IF NOT EXISTS notes TEXT;
|
|
|
|
-- Copy existing manufacturer data to brand field for consistency
|
|
UPDATE user_equipment SET brand = manufacturer WHERE brand IS NULL AND manufacturer IS NOT NULL;
|
|
|
|
-- Create table to store product-specific spreader settings
|
|
-- This links products to specific spreader settings
|
|
CREATE TABLE IF NOT EXISTS product_spreader_settings (
|
|
id SERIAL PRIMARY KEY,
|
|
product_id INTEGER REFERENCES products(id) ON DELETE CASCADE,
|
|
user_product_id INTEGER REFERENCES user_products(id) ON DELETE CASCADE,
|
|
spreader_brand VARCHAR(100) NOT NULL,
|
|
spreader_model VARCHAR(100),
|
|
setting_value VARCHAR(20) NOT NULL,
|
|
rate_description VARCHAR(200), -- e.g., "1 lb nitrogen per 1000 sq ft"
|
|
notes TEXT,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
-- Ensure we have either product_id or user_product_id, but not both
|
|
CHECK (
|
|
(product_id IS NOT NULL AND user_product_id IS NULL) OR
|
|
(product_id IS NULL AND user_product_id IS NOT NULL)
|
|
)
|
|
);
|
|
|
|
-- Create indexes for better performance
|
|
CREATE INDEX IF NOT EXISTS idx_product_spreader_settings_product ON product_spreader_settings(product_id);
|
|
CREATE INDEX IF NOT EXISTS idx_product_spreader_settings_user_product ON product_spreader_settings(user_product_id);
|
|
CREATE INDEX IF NOT EXISTS idx_product_spreader_settings_brand ON product_spreader_settings(spreader_brand);
|
|
CREATE INDEX IF NOT EXISTS idx_user_equipment_brand_model ON user_equipment(brand, model);
|
|
|
|
-- Add trigger to update updated_at timestamp
|
|
CREATE OR REPLACE FUNCTION update_product_spreader_settings_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = CURRENT_TIMESTAMP;
|
|
RETURN NEW;
|
|
END;
|
|
$$ language 'plpgsql';
|
|
|
|
DROP TRIGGER IF EXISTS update_product_spreader_settings_updated_at_trigger ON product_spreader_settings;
|
|
CREATE TRIGGER update_product_spreader_settings_updated_at_trigger
|
|
BEFORE UPDATE ON product_spreader_settings
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE update_product_spreader_settings_updated_at();
|
|
|
|
-- Drop the old spreader_settings table since we're using a different approach
|
|
DROP TABLE IF EXISTS spreader_settings;
|
|
|
|
SELECT 'Updated spreader system for user-defined spreaders and product settings!' as migration_status; |