Ctrl K
ComunidadGuías…

drizzle/0078_workspace_membership_manual.sql

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
CREATE TABLE IF NOT EXISTS public.workspaces (
  id text PRIMARY KEY,
  name varchar(160) NOT NULL,
  created_at timestamptz NOT NULL DEFAULT now(),
  updated_at timestamptz NOT NULL DEFAULT now()
);

CREATE TABLE IF NOT EXISTS public.workspace_members (
  workspace_id text NOT NULL REFERENCES public.workspaces(id) ON DELETE CASCADE,
  user_id text NOT NULL REFERENCES public.users(id) ON DELETE CASCADE,
  role varchar(16) NOT NULL DEFAULT 'operator',
  created_at timestamptz NOT NULL DEFAULT now(),
  updated_at timestamptz NOT NULL DEFAULT now(),
  CONSTRAINT workspace_members_workspace_user_unique UNIQUE (workspace_id, user_id),
  CONSTRAINT workspace_members_role_check CHECK (role IN ('admin', 'manager', 'operator', 'viewer'))
);

CREATE INDEX IF NOT EXISTS workspace_members_user_created_idx
  ON public.workspace_members (user_id, created_at);

CREATE INDEX IF NOT EXISTS workspace_members_workspace_role_idx
  ON public.workspace_members (workspace_id, role);

INSERT INTO public.workspaces (id, name)
SELECT 'legacy-' || md5(current_database()), 'Sentrovia Workspace'
WHERE EXISTS (SELECT 1 FROM public.users)
ON CONFLICT (id) DO NOTHING;

INSERT INTO public.workspace_members (workspace_id, user_id, role, created_at, updated_at)
SELECT
  'legacy-' || md5(current_database()),
  users.id,
  CASE
    WHEN users.role IN ('admin', 'manager', 'operator', 'viewer') THEN users.role
    WHEN users.role = 'member' THEN 'operator'
    ELSE 'viewer'
  END,
  users.created_at,
  users.updated_at
FROM public.users
ON CONFLICT (workspace_id, user_id) DO NOTHING;