chore: import upstream snapshot with attribution
Backend Tests / Tests (other) (push) Failing after 1s
Backend Tests / Static Checks (push) Failing after 2s
Backend Tests / Tests (internal) (push) Failing after 2s
Backend Tests / Tests (server) (push) Failing after 1s
Backend Tests / Tests (store) (push) Failing after 1s
Build Canary Image / build-frontend (push) Failing after 1s
Frontend Tests / Lint (push) Failing after 1s
Build Canary Image / build-push (linux/amd64) (push) Has been skipped
Build Canary Image / build-push (linux/arm64) (push) Has been skipped
Build Canary Image / merge (push) Has been skipped
Frontend Tests / Build (push) Failing after 1s
Release Please / release-please (push) Failing after 0s
Proto Linter / Lint Protos (push) Failing after 2s
Backend Tests / Tests (other) (push) Failing after 1s
Backend Tests / Static Checks (push) Failing after 2s
Backend Tests / Tests (internal) (push) Failing after 2s
Backend Tests / Tests (server) (push) Failing after 1s
Backend Tests / Tests (store) (push) Failing after 1s
Build Canary Image / build-frontend (push) Failing after 1s
Frontend Tests / Lint (push) Failing after 1s
Build Canary Image / build-push (linux/amd64) (push) Has been skipped
Build Canary Image / build-push (linux/arm64) (push) Has been skipped
Build Canary Image / merge (push) Has been skipped
Frontend Tests / Build (push) Failing after 1s
Release Please / release-please (push) Failing after 0s
Proto Linter / Lint Protos (push) Failing after 2s
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
ALTER TABLE memo ADD COLUMN resource_name TEXT;
|
||||
|
||||
UPDATE memo SET resource_name = uuid_in(md5(random()::text || random()::text)::cstring);
|
||||
|
||||
ALTER TABLE memo ALTER COLUMN resource_name SET NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX idx_memo_resource_name ON memo (resource_name);
|
||||
|
||||
ALTER TABLE resource ADD COLUMN resource_name TEXT;
|
||||
|
||||
UPDATE resource SET resource_name = uuid_in(md5(random()::text || random()::text)::cstring);
|
||||
|
||||
ALTER TABLE resource ALTER COLUMN resource_name SET NOT NULL;
|
||||
|
||||
CREATE UNIQUE INDEX idx_resource_resource_name ON resource (resource_name);
|
||||
@@ -0,0 +1,9 @@
|
||||
-- reaction
|
||||
CREATE TABLE reaction (
|
||||
id SERIAL PRIMARY KEY,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
creator_id INTEGER NOT NULL,
|
||||
content_id TEXT NOT NULL,
|
||||
reaction_type TEXT NOT NULL,
|
||||
UNIQUE(creator_id, content_id, reaction_type)
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE "user" ADD COLUMN description TEXT NOT NULL DEFAULT '';
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE memo RENAME COLUMN resource_name TO uid;
|
||||
|
||||
ALTER TABLE resource RENAME COLUMN resource_name TO uid;
|
||||
@@ -0,0 +1,11 @@
|
||||
ALTER TABLE resource ADD COLUMN storage_type TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE resource ADD COLUMN reference TEXT NOT NULL DEFAULT '';
|
||||
ALTER TABLE resource ADD COLUMN payload TEXT NOT NULL DEFAULT '{}';
|
||||
|
||||
UPDATE resource SET storage_type = 'LOCAL', reference = internal_path WHERE internal_path IS NOT NULL AND internal_path != '';
|
||||
|
||||
UPDATE resource SET storage_type = 'EXTERNAL', reference = external_link WHERE external_link IS NOT NULL AND external_link != '';
|
||||
|
||||
ALTER TABLE resource DROP COLUMN internal_path;
|
||||
|
||||
ALTER TABLE resource DROP COLUMN external_link;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE memo ADD COLUMN tags JSONB NOT NULL DEFAULT '[]';
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE memo ADD COLUMN payload JSONB NOT NULL DEFAULT '{}';
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS tag;
|
||||
@@ -0,0 +1,12 @@
|
||||
UPDATE "reaction" SET "reaction_type" = '👍' WHERE "reaction_type" = 'THUMBS_UP';
|
||||
UPDATE "reaction" SET "reaction_type" = '👎' WHERE "reaction_type" = 'THUMBS_DOWN';
|
||||
UPDATE "reaction" SET "reaction_type" = '💛' WHERE "reaction_type" = 'HEART';
|
||||
UPDATE "reaction" SET "reaction_type" = '🔥' WHERE "reaction_type" = 'FIRE';
|
||||
UPDATE "reaction" SET "reaction_type" = '👏' WHERE "reaction_type" = 'CLAPPING_HANDS';
|
||||
UPDATE "reaction" SET "reaction_type" = '😂' WHERE "reaction_type" = 'LAUGH';
|
||||
UPDATE "reaction" SET "reaction_type" = '👌' WHERE "reaction_type" = 'OK_HAND';
|
||||
UPDATE "reaction" SET "reaction_type" = '🚀' WHERE "reaction_type" = 'ROCKET';
|
||||
UPDATE "reaction" SET "reaction_type" = '👀' WHERE "reaction_type" = 'EYES';
|
||||
UPDATE "reaction" SET "reaction_type" = '🤔' WHERE "reaction_type" = 'THINKING_FACE';
|
||||
UPDATE "reaction" SET "reaction_type" = '🤡' WHERE "reaction_type" = 'CLOWN_FACE';
|
||||
UPDATE "reaction" SET "reaction_type" = '❓' WHERE "reaction_type" = 'QUESTION_MARK';
|
||||
@@ -0,0 +1,2 @@
|
||||
-- Drop deprecated tags column.
|
||||
ALTER TABLE memo DROP COLUMN IF EXISTS tags;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- Add pinned column.
|
||||
ALTER TABLE memo ADD COLUMN pinned BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
|
||||
-- Update pinned column from memo_organizer.
|
||||
UPDATE memo
|
||||
SET pinned = TRUE
|
||||
FROM memo_organizer
|
||||
WHERE memo.id = memo_organizer.memo_id AND memo_organizer.pinned = 1;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS webhook;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE resource RENAME TO attachment;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS memo_organizer;
|
||||
@@ -0,0 +1 @@
|
||||
UPDATE "user" SET role = 'ADMIN' WHERE role = 'HOST';
|
||||
@@ -0,0 +1,5 @@
|
||||
-- Set storage type to DATABASE for existing instances that have no storage setting configured.
|
||||
-- This preserves backward-compatible behavior before the default was changed to LOCAL.
|
||||
INSERT INTO system_setting (name, value, description)
|
||||
SELECT 'STORAGE', '{"storageType":"DATABASE"}', ''
|
||||
WHERE NOT EXISTS (SELECT 1 FROM system_setting WHERE name = 'STORAGE');
|
||||
@@ -0,0 +1,8 @@
|
||||
-- Add uid column to idp table
|
||||
ALTER TABLE idp ADD COLUMN uid TEXT NOT NULL DEFAULT '';
|
||||
|
||||
-- Populate uid for existing rows using hex of id as a fallback
|
||||
UPDATE idp SET uid = LPAD(TO_HEX(id), 8, '0') WHERE uid = '';
|
||||
|
||||
-- Create unique index on uid
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS idx_idp_uid ON idp (uid);
|
||||
@@ -0,0 +1,13 @@
|
||||
UPDATE inbox AS i
|
||||
SET message = jsonb_set(
|
||||
i.message::jsonb - 'activityId',
|
||||
'{memoComment}',
|
||||
jsonb_build_object(
|
||||
'memoId',
|
||||
a.payload->'memoComment'->'memoId',
|
||||
'relatedMemoId',
|
||||
a.payload->'memoComment'->'relatedMemoId'
|
||||
)
|
||||
)::text
|
||||
FROM activity AS a
|
||||
WHERE (i.message::jsonb->>'activityId')::integer = a.id;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE activity;
|
||||
@@ -0,0 +1,14 @@
|
||||
-- memo_share stores per-memo share grants (one row per share link).
|
||||
-- uid is the opaque bearer token included in the share URL.
|
||||
-- ON DELETE CASCADE ensures grants are cleaned up when the parent memo is deleted.
|
||||
CREATE TABLE memo_share (
|
||||
id SERIAL PRIMARY KEY,
|
||||
uid TEXT NOT NULL UNIQUE,
|
||||
memo_id INTEGER NOT NULL,
|
||||
creator_id INTEGER NOT NULL,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
expires_ts BIGINT DEFAULT NULL,
|
||||
FOREIGN KEY (memo_id) REFERENCES memo(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX idx_memo_share_memo_id ON memo_share(memo_id);
|
||||
@@ -0,0 +1,15 @@
|
||||
-- user_identity stores the linkage between an external identity subject and a local user.
|
||||
-- (provider, extern_uid) is unique across the table; provider stores the idp.uid.
|
||||
-- Each local user can link at most one external account per provider.
|
||||
CREATE TABLE user_identity (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
provider TEXT NOT NULL,
|
||||
extern_uid TEXT NOT NULL,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
UNIQUE (provider, extern_uid),
|
||||
UNIQUE (user_id, provider)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_user_identity_user_id ON user_identity(user_id);
|
||||
@@ -0,0 +1,11 @@
|
||||
INSERT INTO user_setting (user_id, key, value)
|
||||
SELECT
|
||||
"user".id,
|
||||
'TAGS',
|
||||
system_setting.value
|
||||
FROM "user"
|
||||
JOIN system_setting ON system_setting.name = 'TAGS'
|
||||
WHERE system_setting.value IS NOT NULL
|
||||
AND system_setting.value != ''
|
||||
AND system_setting.value != '{}'
|
||||
ON CONFLICT (user_id, key) DO NOTHING;
|
||||
@@ -0,0 +1,125 @@
|
||||
-- system_setting
|
||||
CREATE TABLE system_setting (
|
||||
name TEXT NOT NULL PRIMARY KEY,
|
||||
value TEXT NOT NULL,
|
||||
description TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- user
|
||||
CREATE TABLE "user" (
|
||||
id SERIAL PRIMARY KEY,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
row_status TEXT NOT NULL DEFAULT 'NORMAL',
|
||||
username TEXT NOT NULL UNIQUE,
|
||||
role TEXT NOT NULL DEFAULT 'USER',
|
||||
email TEXT NOT NULL DEFAULT '',
|
||||
nickname TEXT NOT NULL DEFAULT '',
|
||||
password_hash TEXT NOT NULL,
|
||||
avatar_url TEXT NOT NULL,
|
||||
description TEXT NOT NULL DEFAULT ''
|
||||
);
|
||||
|
||||
-- user_setting
|
||||
CREATE TABLE user_setting (
|
||||
user_id INTEGER NOT NULL,
|
||||
key TEXT NOT NULL,
|
||||
value TEXT NOT NULL,
|
||||
UNIQUE(user_id, key)
|
||||
);
|
||||
|
||||
-- memo
|
||||
CREATE TABLE memo (
|
||||
id SERIAL PRIMARY KEY,
|
||||
uid TEXT NOT NULL UNIQUE,
|
||||
creator_id INTEGER NOT NULL,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
row_status TEXT NOT NULL DEFAULT 'NORMAL',
|
||||
content TEXT NOT NULL,
|
||||
visibility TEXT NOT NULL DEFAULT 'PRIVATE',
|
||||
pinned BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
payload JSONB NOT NULL DEFAULT '{}'
|
||||
);
|
||||
|
||||
-- memo_relation
|
||||
CREATE TABLE memo_relation (
|
||||
memo_id INTEGER NOT NULL,
|
||||
related_memo_id INTEGER NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
UNIQUE(memo_id, related_memo_id, type)
|
||||
);
|
||||
|
||||
-- attachment
|
||||
CREATE TABLE attachment (
|
||||
id SERIAL PRIMARY KEY,
|
||||
uid TEXT NOT NULL UNIQUE,
|
||||
creator_id INTEGER NOT NULL,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
filename TEXT NOT NULL,
|
||||
blob BYTEA,
|
||||
type TEXT NOT NULL DEFAULT '',
|
||||
size INTEGER NOT NULL DEFAULT 0,
|
||||
memo_id INTEGER DEFAULT NULL,
|
||||
storage_type TEXT NOT NULL DEFAULT '',
|
||||
reference TEXT NOT NULL DEFAULT '',
|
||||
payload TEXT NOT NULL DEFAULT '{}'
|
||||
);
|
||||
|
||||
-- idp
|
||||
CREATE TABLE idp (
|
||||
id SERIAL PRIMARY KEY,
|
||||
uid TEXT NOT NULL UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
type TEXT NOT NULL,
|
||||
identifier_filter TEXT NOT NULL DEFAULT '',
|
||||
config JSONB NOT NULL DEFAULT '{}'
|
||||
);
|
||||
|
||||
-- inbox
|
||||
CREATE TABLE inbox (
|
||||
id SERIAL PRIMARY KEY,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
sender_id INTEGER NOT NULL,
|
||||
receiver_id INTEGER NOT NULL,
|
||||
status TEXT NOT NULL,
|
||||
message TEXT NOT NULL
|
||||
);
|
||||
|
||||
-- reaction
|
||||
CREATE TABLE reaction (
|
||||
id SERIAL PRIMARY KEY,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
creator_id INTEGER NOT NULL,
|
||||
content_id TEXT NOT NULL,
|
||||
reaction_type TEXT NOT NULL,
|
||||
UNIQUE(creator_id, content_id, reaction_type)
|
||||
);
|
||||
|
||||
-- memo_share
|
||||
CREATE TABLE memo_share (
|
||||
id SERIAL PRIMARY KEY,
|
||||
uid TEXT NOT NULL UNIQUE,
|
||||
memo_id INTEGER NOT NULL,
|
||||
creator_id INTEGER NOT NULL,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
expires_ts BIGINT DEFAULT NULL,
|
||||
FOREIGN KEY (memo_id) REFERENCES memo(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX idx_memo_share_memo_id ON memo_share(memo_id);
|
||||
|
||||
-- user_identity
|
||||
CREATE TABLE user_identity (
|
||||
id SERIAL PRIMARY KEY,
|
||||
user_id INTEGER NOT NULL,
|
||||
provider TEXT NOT NULL,
|
||||
extern_uid TEXT NOT NULL,
|
||||
created_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
updated_ts BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()),
|
||||
UNIQUE (provider, extern_uid),
|
||||
UNIQUE (user_id, provider)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_user_identity_user_id ON user_identity(user_id);
|
||||
Reference in New Issue
Block a user