Make room for client code

This commit is contained in:
Abhishek Shroff
2024-05-10 03:39:24 +05:30
parent 09a7ba4fef
commit ca56e77f0c
62 changed files with 0 additions and 0 deletions
@@ -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;
+1
View File
@@ -0,0 +1 @@
DROP TABLE users;
+6
View File
@@ -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
);
+1
View File
@@ -0,0 +1 @@
DROP TABLE silos;
+9
View File
@@ -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
);
+83
View File
@@ -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;
+15
View File
@@ -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;
+9
View File
@@ -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
);
+13
View File
@@ -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;