diff --git a/routes/shared_env.py b/routes/shared_env.py index daca6dc..08adcd9 100644 --- a/routes/shared_env.py +++ b/routes/shared_env.py @@ -71,6 +71,66 @@ CREATE TABLE IF NOT EXISTS timer_function_shared_envs ( ); CREATE INDEX idx_timer_func_shared_env ON timer_function_shared_envs(timer_function_id); + +CREATE INDEX idx_shared_env_versions ON shared_environment_versions(shared_env_id); + +-- 2. Add version_number column to main table +ALTER TABLE shared_environments +ADD COLUMN IF NOT EXISTS version_number INT NOT NULL DEFAULT 1; + +-- 3. Create trigger function for automatic versioning +CREATE OR REPLACE FUNCTION fn_shared_env_versioning() +RETURNS TRIGGER +LANGUAGE plpgsql +AS $$ +DECLARE + next_version INT; +BEGIN + IF TG_OP = 'INSERT' THEN + -- Create initial version record + INSERT INTO shared_environment_versions (shared_env_id, environment, version_number) + VALUES (NEW.id, NEW.environment, 1); + + -- Ensure version_number is set explicitly + UPDATE shared_environments + SET version_number = 1 + WHERE id = NEW.id; + + RETURN NEW; + + ELSIF TG_OP = 'UPDATE' THEN + -- Only create new version if environment JSON changed + IF NEW.environment IS DISTINCT FROM OLD.environment THEN + -- Get next version number + SELECT COALESCE(MAX(version_number), 0) + 1 + INTO next_version + FROM shared_environment_versions + WHERE shared_env_id = NEW.id; + + -- Insert new version record + INSERT INTO shared_environment_versions (shared_env_id, environment, version_number) + VALUES (NEW.id, NEW.environment, next_version); + + -- Update main table version number + UPDATE shared_environments + SET version_number = next_version + WHERE id = NEW.id; + END IF; + + RETURN NEW; + END IF; + + RETURN NEW; +END; +$$; + +-- 4. Create trigger to fire on INSERT or UPDATE +CREATE TRIGGER tr_shared_env_versioning +AFTER INSERT OR UPDATE +ON shared_environments +FOR EACH ROW +EXECUTE PROCEDURE fn_shared_env_versioning(); + ''' shared_env = Blueprint('shared_env', __name__)