UPDATE: Add super admin
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
CREATE EXTENSION IF NOT EXISTS postgis;
|
||||
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||||
CREATE EXTENSION IF NOT EXISTS btree_gist;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id UUID PRIMARY KEY DEFAULT uuidv7(),
|
||||
|
||||
1
db/migrations/000008_files.down.sql
Normal file
1
db/migrations/000008_files.down.sql
Normal file
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS medias;
|
||||
20
db/migrations/000008_files.up.sql
Normal file
20
db/migrations/000008_files.up.sql
Normal file
@@ -0,0 +1,20 @@
|
||||
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
||||
|
||||
CREATE TABLE medias (
|
||||
id UUID PRIMARY KEY DEFAULT uuidv7(),
|
||||
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
|
||||
storage_key VARCHAR(255) UNIQUE NOT NULL,
|
||||
original_name VARCHAR(255) NOT NULL,
|
||||
mime_type VARCHAR(100) NOT NULL,
|
||||
size BIGINT NOT NULL,
|
||||
target_type VARCHAR(50) NOT NULL,
|
||||
target_id UUID NOT NULL,
|
||||
file_metadata JSONB DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_medias_target ON medias (target_type, target_id);
|
||||
CREATE INDEX idx_medias_user_created ON medias (user_id, created_at DESC);
|
||||
CREATE INDEX idx_medias_original_name_trgm ON medias USING GIN (original_name gin_trgm_ops);
|
||||
CREATE INDEX idx_medias_storage_key_trgm ON medias USING GIN (storage_key gin_trgm_ops);
|
||||
39
db/query/files.sql
Normal file
39
db/query/files.sql
Normal file
@@ -0,0 +1,39 @@
|
||||
-- name: CreateMedia :one
|
||||
INSERT INTO medias (
|
||||
user_id, storage_key, original_name, mime_type, size, target_type, target_id, file_metadata
|
||||
) VALUES (
|
||||
$1, $2, $3, $4, $5, $6, $7, $8
|
||||
)
|
||||
RETURNING *;
|
||||
|
||||
-- name: GetMediasByTarget :many
|
||||
SELECT * FROM medias
|
||||
WHERE target_type = $1 AND target_id = $2
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: DeleteMedia :exec
|
||||
DELETE FROM medias
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: SearchMedias :many
|
||||
SELECT *
|
||||
FROM medias
|
||||
WHERE
|
||||
(sqlc.narg('cursor')::uuid IS NULL OR id > sqlc.narg('cursor')::uuid)
|
||||
AND (sqlc.narg('target_types')::varchar[] IS NULL OR target_type = ANY(sqlc.narg('target_types')::varchar[]))
|
||||
AND (
|
||||
sqlc.narg('search_text')::text IS NULL OR
|
||||
original_name ILIKE '%' || sqlc.narg('search_text')::text || '%' OR
|
||||
storage_key ILIKE '%' || sqlc.narg('search_text')::text || '%'
|
||||
)
|
||||
ORDER BY id ASC
|
||||
LIMIT sqlc.arg('limit');
|
||||
|
||||
-- name: GetMediasByUserID :many
|
||||
SELECT * FROM medias
|
||||
WHERE user_id = $1
|
||||
ORDER BY created_at DESC;
|
||||
|
||||
-- name: GetMediaByID :one
|
||||
SELECT * FROM medias
|
||||
WHERE id = $1;
|
||||
@@ -48,4 +48,19 @@ CREATE TABLE IF NOT EXISTS user_verifications (
|
||||
reviewed_by UUID REFERENCES users(id),
|
||||
reviewed_at TIMESTAMPTZ,
|
||||
created_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE medias (
|
||||
id UUID PRIMARY KEY DEFAULT uuidv7(),
|
||||
user_id UUID REFERENCES users(id) ON DELETE CASCADE,
|
||||
storage_key VARCHAR(255) UNIQUE NOT NULL,
|
||||
original_name VARCHAR(255) NOT NULL,
|
||||
mime_type VARCHAR(100) NOT NULL,
|
||||
size BIGINT NOT NULL,
|
||||
target_type VARCHAR(50) NOT NULL,
|
||||
target_id UUID NOT NULL,
|
||||
file_metadata JSONB DEFAULT '{}'::jsonb,
|
||||
created_at TIMESTAMPTZ DEFAULT now(),
|
||||
updated_at TIMESTAMPTZ DEFAULT now()
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user