mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-05-05 11:50:04 -05:00
Make room for client code
This commit is contained in:
@@ -0,0 +1 @@
|
||||
DROP TABLE resources;
|
||||
@@ -0,0 +1,14 @@
|
||||
CREATE TABLE resources (
|
||||
id uuid PRIMARY KEY,
|
||||
parent uuid REFERENCES resources(id) ON UPDATE CASCADE ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
dir BOOLEAN NOT NULL,
|
||||
created TIMESTAMP NOT NULL,
|
||||
modified TIMESTAMP NOT NULL,
|
||||
deleted TIMESTAMP,
|
||||
size INT,
|
||||
etag TEXT
|
||||
-- CONSTRAINT resource_parent FOREIGN KEY REFERENCES resources(id) ON UPDATE CASCADE ON DELETE CASCADE;
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX unique_member_resource ON resources(parent, name) WHERE deleted IS NULL;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE users;
|
||||
@@ -0,0 +1,6 @@
|
||||
CREATE TABLE users(
|
||||
username TEXT NOT NULL PRIMARY KEY,
|
||||
display_name TEXT NOT NULL,
|
||||
password_hash TEXT NOT NULL,
|
||||
deleted TIMESTAMP
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE storage_backends;
|
||||
@@ -0,0 +1,5 @@
|
||||
CREATE TABLE storage_backends(
|
||||
name TEXT PRIMARY KEY,
|
||||
driver TEXT NOT NULL,
|
||||
params JSONB NOT NULL
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE silos;
|
||||
@@ -0,0 +1,9 @@
|
||||
CREATE TABLE silos(
|
||||
id UUID PRIMARY KEY,
|
||||
created TIMESTAMP NOT NULL,
|
||||
modified TIMESTAMP NOT NULL,
|
||||
deleted TIMESTAMP,
|
||||
owner TEXT NOT NULL REFERENCES users(username) ON UPDATE CASCADE ON DELETE CASCADE,
|
||||
name TEXT NOT NULL,
|
||||
storage TEXT NOT NULL REFERENCES storage_backends(name) ON UPDATE CASCADE ON DELETE CASCADE
|
||||
);
|
||||
@@ -0,0 +1,83 @@
|
||||
-- name: ResourceById :one
|
||||
SELECT * from resources WHERE id = $1;
|
||||
|
||||
-- name: CreateResource :exec
|
||||
INSERT INTO resources(
|
||||
id, parent, name, dir, created, modified
|
||||
) VALUES (
|
||||
$1, $2, $3, $4, NOW(), NOW()
|
||||
);
|
||||
|
||||
-- name: UpdateResourceContents :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
size = $1,
|
||||
etag = $2,
|
||||
modified = NOW()
|
||||
WHERE id = $3;
|
||||
|
||||
-- name: UpdateResourceModified :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
modified = NOW()
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: Rename :exec
|
||||
UPDATE resources
|
||||
SET
|
||||
name = CASE WHEN (@name::text = '') THEN name ELSE @name::text END,
|
||||
parent = @parent::uuid,
|
||||
modified = NOW()
|
||||
WHERE id = @id::uuid;
|
||||
|
||||
|
||||
-- name: ReadDir :many
|
||||
WITH RECURSIVE nodes(id, parent, name, dir, created, modified, size, etag, depth, path) AS (
|
||||
SELECT r.id, r.parent, r.name, r.dir, r.created, r.modified, r.size, r.etag, 0, ''::text
|
||||
FROM resources r WHERE r.id = @id::uuid
|
||||
UNION ALL
|
||||
SELECT r.id, r.parent, r.name, r.dir, r.created, r.modified, r.size, r.etag, n.depth + 1, concat(n.path, '/', r.name)
|
||||
FROM resources r JOIN nodes n on r.parent = n.id
|
||||
WHERE deleted IS NULL
|
||||
AND CASE WHEN @recursive::boolean THEN true ELSE depth < 1 END
|
||||
)
|
||||
SELECT * from nodes
|
||||
WHERE CASE WHEN @include_root::boolean THEN true ELSE depth > 0 END;
|
||||
|
||||
-- name: ResourceByPath :one
|
||||
WITH RECURSIVE nodes(id, parent, name, dir, created, modified, size, etag, depth, path, search) AS (
|
||||
SELECT r.id, r.parent, r.name, r.dir, r.created, r.modified, r.size, r.etag, 0, ''::text, @search::text[]
|
||||
FROM resources r WHERE r.id = @root::uuid
|
||||
UNION ALL
|
||||
SELECT r.id, r.parent, r.name, r.dir, r.created, r.modified, r.size, r.etag, n.depth + 1, concat(n.path, '/', r.name), n.search
|
||||
FROM resources r JOIN nodes n on r.parent = n.id
|
||||
WHERE deleted IS NULL
|
||||
AND r.name = n.search[n.depth + 1]
|
||||
)
|
||||
SELECT * FROM nodes WHERE cardinality(search) = depth;
|
||||
|
||||
-- name: DeleteRecursive :exec
|
||||
WITH RECURSIVE nodes(id, parent) AS (
|
||||
SELECT r.id, r.parent
|
||||
FROM resources r WHERE r.id = @id::uuid
|
||||
UNION ALL
|
||||
SELECT r.id, r.parent
|
||||
FROM resources r JOIN nodes n on r.parent = n.id
|
||||
WHERE deleted IS NULL
|
||||
)
|
||||
UPDATE resources
|
||||
SET modified = NOW(), deleted = NOW()
|
||||
WHERE id in (SELECT id FROM nodes);
|
||||
|
||||
-- name: HardDeleteRecursive :many
|
||||
WITH RECURSIVE nodes(id, parent) AS (
|
||||
SELECT r.id, r.parent
|
||||
FROM resources r WHERE r.id = @id::uuid
|
||||
UNION ALL
|
||||
SELECT r.id, r.parent
|
||||
FROM resources r JOIN nodes n on r.parent = n.id
|
||||
WHERE deleted IS NULL
|
||||
)
|
||||
DELETE FROM resources
|
||||
WHERE id in (SELECT id FROM nodes)
|
||||
RETURNING id, dir;
|
||||
@@ -0,0 +1,15 @@
|
||||
-- name: SiloById :one
|
||||
SELECT * from silos where id = $1;
|
||||
|
||||
-- name: DeleteSilo :exec
|
||||
DELETE from silos where id = $1;
|
||||
|
||||
-- name: CreateSilo :exec
|
||||
INSERT INTO silos(
|
||||
id, created, modified, owner, name, storage
|
||||
) VALUES(
|
||||
$1, NOW(), NOW(), $2, $3, $4
|
||||
);
|
||||
|
||||
-- name: ListSilos :many
|
||||
SELECT * from silos;
|
||||
@@ -0,0 +1,9 @@
|
||||
-- name: AllStorageBackends :many
|
||||
SELECT * from storage_backends;
|
||||
|
||||
-- name: CreateStorageBackend :exec
|
||||
INSERT INTO storage_backends(
|
||||
name, driver, params
|
||||
) VALUES(
|
||||
$1, $2, $3
|
||||
);
|
||||
@@ -0,0 +1,13 @@
|
||||
-- name: CreateUser :one
|
||||
INSERT INTO users(
|
||||
username, display_name, password_hash
|
||||
) VALUES (
|
||||
$1, $2, $3
|
||||
)
|
||||
RETURNING *;
|
||||
|
||||
-- name: UserByUsername :one
|
||||
SELECT * from users WHERE username = $1;
|
||||
|
||||
-- name: ListUsers :many
|
||||
SELECT * from users WHERE deleted IS NULL;
|
||||
Reference in New Issue
Block a user