mirror of
https://github.com/coder/coder.git
synced 2025-07-12 00:14:10 +00:00
feat: enable soft delete for organizations (#16584)
- Add deleted column to organizations table - Add trigger to check for existing workspaces, templates, groups and members in a org before allowing the soft delete --------- Co-authored-by: Steven Masley <stevenmasley@gmail.com> Co-authored-by: Steven Masley <Emyrk@users.noreply.github.com>
This commit is contained in:
@ -1,89 +1,97 @@
|
||||
-- name: GetDefaultOrganization :one
|
||||
SELECT
|
||||
*
|
||||
*
|
||||
FROM
|
||||
organizations
|
||||
organizations
|
||||
WHERE
|
||||
is_default = true
|
||||
is_default = true
|
||||
LIMIT
|
||||
1;
|
||||
1;
|
||||
|
||||
-- name: GetOrganizations :many
|
||||
SELECT
|
||||
*
|
||||
*
|
||||
FROM
|
||||
organizations
|
||||
organizations
|
||||
WHERE
|
||||
true
|
||||
-- Filter by ids
|
||||
AND CASE
|
||||
WHEN array_length(@ids :: uuid[], 1) > 0 THEN
|
||||
id = ANY(@ids)
|
||||
ELSE true
|
||||
END
|
||||
AND CASE
|
||||
WHEN @name::text != '' THEN
|
||||
LOWER("name") = LOWER(@name)
|
||||
ELSE true
|
||||
END
|
||||
-- Optionally include deleted organizations
|
||||
deleted = @deleted
|
||||
-- Filter by ids
|
||||
AND CASE
|
||||
WHEN array_length(@ids :: uuid[], 1) > 0 THEN
|
||||
id = ANY(@ids)
|
||||
ELSE true
|
||||
END
|
||||
AND CASE
|
||||
WHEN @name::text != '' THEN
|
||||
LOWER("name") = LOWER(@name)
|
||||
ELSE true
|
||||
END
|
||||
;
|
||||
|
||||
-- name: GetOrganizationByID :one
|
||||
SELECT
|
||||
*
|
||||
*
|
||||
FROM
|
||||
organizations
|
||||
organizations
|
||||
WHERE
|
||||
id = $1;
|
||||
id = $1;
|
||||
|
||||
-- name: GetOrganizationByName :one
|
||||
SELECT
|
||||
*
|
||||
*
|
||||
FROM
|
||||
organizations
|
||||
organizations
|
||||
WHERE
|
||||
LOWER("name") = LOWER(@name)
|
||||
-- Optionally include deleted organizations
|
||||
deleted = @deleted AND
|
||||
LOWER("name") = LOWER(@name)
|
||||
LIMIT
|
||||
1;
|
||||
1;
|
||||
|
||||
-- name: GetOrganizationsByUserID :many
|
||||
SELECT
|
||||
*
|
||||
*
|
||||
FROM
|
||||
organizations
|
||||
organizations
|
||||
WHERE
|
||||
id = ANY(
|
||||
SELECT
|
||||
organization_id
|
||||
FROM
|
||||
organization_members
|
||||
WHERE
|
||||
user_id = $1
|
||||
);
|
||||
-- Optionally include deleted organizations
|
||||
deleted = @deleted AND
|
||||
id = ANY(
|
||||
SELECT
|
||||
organization_id
|
||||
FROM
|
||||
organization_members
|
||||
WHERE
|
||||
user_id = $1
|
||||
);
|
||||
|
||||
-- name: InsertOrganization :one
|
||||
INSERT INTO
|
||||
organizations (id, "name", display_name, description, icon, created_at, updated_at, is_default)
|
||||
organizations (id, "name", display_name, description, icon, created_at, updated_at, is_default)
|
||||
VALUES
|
||||
-- If no organizations exist, and this is the first, make it the default.
|
||||
(@id, @name, @display_name, @description, @icon, @created_at, @updated_at, (SELECT TRUE FROM organizations LIMIT 1) IS NULL) RETURNING *;
|
||||
-- If no organizations exist, and this is the first, make it the default.
|
||||
(@id, @name, @display_name, @description, @icon, @created_at, @updated_at, (SELECT TRUE FROM organizations LIMIT 1) IS NULL) RETURNING *;
|
||||
|
||||
-- name: UpdateOrganization :one
|
||||
UPDATE
|
||||
organizations
|
||||
organizations
|
||||
SET
|
||||
updated_at = @updated_at,
|
||||
name = @name,
|
||||
display_name = @display_name,
|
||||
description = @description,
|
||||
icon = @icon
|
||||
updated_at = @updated_at,
|
||||
name = @name,
|
||||
display_name = @display_name,
|
||||
description = @description,
|
||||
icon = @icon
|
||||
WHERE
|
||||
id = @id
|
||||
id = @id
|
||||
RETURNING *;
|
||||
|
||||
-- name: DeleteOrganization :exec
|
||||
DELETE FROM
|
||||
organizations
|
||||
-- name: UpdateOrganizationDeletedByID :exec
|
||||
UPDATE organizations
|
||||
SET
|
||||
deleted = true,
|
||||
updated_at = @updated_at
|
||||
WHERE
|
||||
id = $1 AND
|
||||
is_default = false;
|
||||
id = @id AND
|
||||
is_default = false;
|
||||
|
||||
|
Reference in New Issue
Block a user