31 lines
1013 B
PL/PgSQL
31 lines
1013 B
PL/PgSQL
-- Migration: Update fn_register_user to handle default organization
|
|
-- Assigns users to the 'Default Organization' (0...1) if no name is provided.
|
|
|
|
CREATE OR REPLACE FUNCTION fn_register_user(
|
|
p_email VARCHAR(255),
|
|
p_password_hash VARCHAR(255),
|
|
p_full_name VARCHAR(255),
|
|
p_role VARCHAR(50),
|
|
p_org_name VARCHAR(255) DEFAULT NULL
|
|
) RETURNS SETOF users AS $$
|
|
DECLARE
|
|
v_org_id UUID;
|
|
BEGIN
|
|
-- Find or create organization
|
|
IF p_org_name IS NULL OR p_org_name = '' OR p_org_name = 'Default Organization' THEN
|
|
v_org_id := '00000000-0000-0000-0000-000000000001';
|
|
ELSE
|
|
INSERT INTO organizations (name)
|
|
VALUES (p_org_name)
|
|
ON CONFLICT (name) DO UPDATE SET name = EXCLUDED.name
|
|
RETURNING id INTO v_org_id;
|
|
END IF;
|
|
|
|
-- Create user
|
|
RETURN QUERY
|
|
INSERT INTO users (email, password_hash, full_name, role, organization_id)
|
|
VALUES (p_email, p_password_hash, p_full_name, p_role, v_org_id)
|
|
RETURNING *;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|