import { sql } from 'slonik'; import type { AlterationScript } from '../lib/types/alteration.js'; const alteration: AlterationScript = { up: async (pool) => { await pool.query(sql` -- scopes create table scopes ( id varchar(21) not null, resource_id varchar(21) references resources (id) on update cascade on delete cascade, name varchar(256) not null, description text, created_at timestamptz not null default(now()), primary key (id) ); -- update table roles, add id and replace pkey alter table roles add column id varchar(21); update roles set id = name; alter table roles alter column id set not null; alter table roles drop constraint roles_pkey; create unique index roles_pkey on roles using btree(id); create unique index roles__name on roles (name); -- roles_scopes create table roles_scopes ( role_id varchar(21) references roles (id) on update cascade on delete cascade, scope_id varchar(21) references scopes (id) on update cascade on delete cascade, constraint roles_permissison_pkey primary key (role_id, scope_id) ); `); }, down: async (pool) => { await pool.query(sql` drop table roles_scopes cascade; drop table scopes cascade; alter table roles drop constraint if exists roles_pkey, drop column id, add primary key (name); drop index roles__name; `); }, }; export default alteration;