29 lines
1.6 KiB
SQL
29 lines
1.6 KiB
SQL
CREATE TABLE `organization_memberships` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`organization_id` text NOT NULL,
|
|
`user_id` text NOT NULL,
|
|
`role` text DEFAULT 'user' NOT NULL,
|
|
`created_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
|
|
`updated_at` integer DEFAULT (cast(unixepoch('subsecond') * 1000 as integer)) NOT NULL,
|
|
`archived_at` integer,
|
|
FOREIGN KEY (`organization_id`) REFERENCES `organizations`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
CREATE UNIQUE INDEX `organization_memberships_organization_user_unique` ON `organization_memberships` (`organization_id`,`user_id`);--> statement-breakpoint
|
|
CREATE INDEX `organization_memberships_organization_id_idx` ON `organization_memberships` (`organization_id`);--> statement-breakpoint
|
|
CREATE INDEX `organization_memberships_user_id_idx` ON `organization_memberships` (`user_id`);--> statement-breakpoint
|
|
INSERT INTO `organization_memberships` (`id`, `organization_id`, `user_id`, `role`)
|
|
SELECT lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-' || lower(hex(randomblob(2))) || '-' || lower(hex(randomblob(2))) || '-' || lower(hex(randomblob(6))),
|
|
organizations.`id`,
|
|
user.`id`,
|
|
CASE WHEN user.`role` = 'admin' THEN 'admin' ELSE 'user' END
|
|
FROM `organizations`
|
|
CROSS JOIN `user`
|
|
WHERE NOT EXISTS (
|
|
SELECT 1
|
|
FROM `organization_memberships`
|
|
WHERE `organization_memberships`.`organization_id` = organizations.`id`
|
|
AND `organization_memberships`.`user_id` = user.`id`
|
|
);
|