spreader stuff

This commit is contained in:
Jake Kasper
2025-08-24 13:41:12 -04:00
parent 3ad4782021
commit 229454c466
10 changed files with 616 additions and 17 deletions

View File

@@ -0,0 +1,56 @@
-- 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;