feat(role): add role_code across schema and APIs
This commit is contained in:
@@ -68,13 +68,15 @@ CREATE TABLE systems (
|
||||
CREATE TABLE roles (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
role_key TEXT NOT NULL UNIQUE,
|
||||
role_code TEXT NOT NULL,
|
||||
system_id UUID NOT NULL REFERENCES systems(id) ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'active',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
CONSTRAINT uq_roles_system_name UNIQUE (system_id, name)
|
||||
CONSTRAINT uq_roles_system_name UNIQUE (system_id, name),
|
||||
CONSTRAINT uq_roles_system_role_code UNIQUE (system_id, role_code)
|
||||
);
|
||||
|
||||
CREATE TABLE site_roles (
|
||||
@@ -126,6 +128,7 @@ CREATE INDEX idx_users_username ON users(username);
|
||||
CREATE INDEX idx_users_email ON users(email);
|
||||
CREATE INDEX idx_sites_company_id ON sites(company_id);
|
||||
CREATE INDEX idx_roles_system_id ON roles(system_id);
|
||||
CREATE INDEX idx_roles_role_code ON roles(role_code);
|
||||
CREATE INDEX idx_site_roles_site_id ON site_roles(site_id);
|
||||
CREATE INDEX idx_site_roles_role_id ON site_roles(role_id);
|
||||
CREATE INDEX idx_user_sites_user_id ON user_sites(user_id);
|
||||
|
||||
27
scripts/migrate_add_role_code.sql
Normal file
27
scripts/migrate_add_role_code.sql
Normal file
@@ -0,0 +1,27 @@
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE roles
|
||||
ADD COLUMN IF NOT EXISTS role_code TEXT;
|
||||
|
||||
UPDATE roles
|
||||
SET role_code = name
|
||||
WHERE role_code IS NULL OR btrim(role_code) = '';
|
||||
|
||||
ALTER TABLE roles
|
||||
ALTER COLUMN role_code SET NOT NULL;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'uq_roles_system_role_code'
|
||||
) THEN
|
||||
ALTER TABLE roles
|
||||
ADD CONSTRAINT uq_roles_system_role_code UNIQUE (system_id, role_code);
|
||||
END IF;
|
||||
END$$;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_roles_role_code ON roles(role_code);
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user