diff --git a/src/Simplex/Chat/Store/Postgres/Migrations/M20251018_chat_relays.hs b/src/Simplex/Chat/Store/Postgres/Migrations/M20251018_chat_relays.hs index 542dde5707..647011f640 100644 --- a/src/Simplex/Chat/Store/Postgres/Migrations/M20251018_chat_relays.hs +++ b/src/Simplex/Chat/Store/Postgres/Migrations/M20251018_chat_relays.hs @@ -12,23 +12,43 @@ m20251018_chat_relays = [r| CREATE TABLE chat_relays( chat_relay_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, - address TEXT NOT NULL, + address BYTEA NOT NULL, name TEXT NOT NULL, domains TEXT NOT NULL, preset SMALLINT NOT NULL DEFAULT 0, tested SMALLINT, enabled SMALLINT NOT NULL DEFAULT 1, user_id BIGINT NOT NULL REFERENCES users ON DELETE CASCADE, + deleted SMALLINT NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT (now()), - updated_at TEXT NOT NULL DEFAULT (now()), - UNIQUE(user_id, address), - UNIQUE(user_id, name) + updated_at TEXT NOT NULL DEFAULT (now()) ); - CREATE INDEX idx_chat_relays_user_id ON chat_relays(user_id); +CREATE UNIQUE INDEX idx_chat_relays_user_id_address ON chat_relays(user_id, address); +CREATE UNIQUE INDEX idx_chat_relays_user_id_name ON chat_relays(user_id, name); ALTER TABLE users ADD COLUMN is_user_chat_relay SMALLINT NOT NULL DEFAULT 0; +ALTER TABLE groups ADD COLUMN use_relays SMALLINT NOT NULL DEFAULT 0; + +ALTER TABLE groups ADD COLUMN relay_own_status TEXT; + +ALTER TABLE group_profiles ADD COLUMN group_link BYTEA; + +CREATE TABLE group_relays( + group_relay_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY, + group_id BIGINT NOT NULL REFERENCES groups ON DELETE CASCADE, + group_member_id BIGINT NOT NULL REFERENCES group_members ON DELETE CASCADE, + chat_relay_id BIGINT NOT NULL REFERENCES chat_relays ON DELETE CASCADE, + relay_status TEXT NOT NULL, + relay_link BYTEA, + created_at TEXT NOT NULL DEFAULT (now()), + updated_at TEXT NOT NULL DEFAULT (now()) +); +CREATE INDEX idx_group_relays_group_id ON group_relays(group_id); +CREATE UNIQUE INDEX idx_group_relays_group_member_id ON group_relays(group_member_id); +CREATE INDEX idx_group_relays_chat_relay_id ON group_relays(chat_relay_id); + ALTER TABLE group_members ADD COLUMN is_relay SMALLINT NOT NULL DEFAULT 0; |] @@ -36,11 +56,23 @@ down_m20251018_chat_relays :: Text down_m20251018_chat_relays = T.pack [r| -ALTER TABLE group_members DROP COLUMN is_relay; +DROP INDEX idx_chat_relays_user_id; +DROP INDEX idx_chat_relays_user_id_address; +DROP INDEX idx_chat_relays_user_id_name; +DROP TABLE chat_relays; ALTER TABLE users DROP COLUMN is_user_chat_relay; -DROP INDEX idx_chat_relays_user_id; +ALTER TABLE groups DROP COLUMN use_relays; -DROP TABLE chat_relays; +ALTER TABLE groups DROP COLUMN relay_own_status; + +ALTER TABLE group_profiles DROP COLUMN group_link; + +DROP INDEX idx_group_relays_group_id; +DROP INDEX idx_group_relays_group_member_id; +DROP INDEX idx_group_relays_chat_relay_id; +DROP TABLE group_relays; + +ALTER TABLE group_members DROP COLUMN is_relay; |] diff --git a/src/Simplex/Chat/Store/Postgres/Migrations/chat_schema.sql b/src/Simplex/Chat/Store/Postgres/Migrations/chat_schema.sql index 601dd97a6e..69f716bc9c 100644 --- a/src/Simplex/Chat/Store/Postgres/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Store/Postgres/Migrations/chat_schema.sql @@ -284,6 +284,33 @@ ALTER TABLE test_chat_schema.chat_items ALTER COLUMN chat_item_id ADD GENERATED +CREATE TABLE test_chat_schema.chat_relays ( + chat_relay_id bigint NOT NULL, + address bytea NOT NULL, + name text NOT NULL, + domains text NOT NULL, + preset smallint DEFAULT 0 NOT NULL, + tested smallint, + enabled smallint DEFAULT 1 NOT NULL, + user_id bigint NOT NULL, + deleted smallint DEFAULT 0 NOT NULL, + created_at text DEFAULT now() NOT NULL, + updated_at text DEFAULT now() NOT NULL +); + + + +ALTER TABLE test_chat_schema.chat_relays ALTER COLUMN chat_relay_id ADD GENERATED ALWAYS AS IDENTITY ( + SEQUENCE NAME test_chat_schema.chat_relays_chat_relay_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + + CREATE TABLE test_chat_schema.chat_tags ( chat_tag_id bigint NOT NULL, user_id bigint, @@ -706,7 +733,8 @@ CREATE TABLE test_chat_schema.group_members ( support_chat_items_mentions bigint DEFAULT 0 NOT NULL, support_chat_last_msg_from_member_ts timestamp with time zone, member_xcontact_id bytea, - member_welcome_shared_msg_id bytea + member_welcome_shared_msg_id bytea, + is_relay smallint DEFAULT 0 NOT NULL ); @@ -734,7 +762,8 @@ CREATE TABLE test_chat_schema.group_profiles ( preferences text, description text, member_admission text, - short_descr text + short_descr text, + group_link bytea ); @@ -750,6 +779,30 @@ ALTER TABLE test_chat_schema.group_profiles ALTER COLUMN group_profile_id ADD GE +CREATE TABLE test_chat_schema.group_relays ( + group_relay_id bigint NOT NULL, + group_id bigint NOT NULL, + group_member_id bigint NOT NULL, + chat_relay_id bigint NOT NULL, + relay_status text NOT NULL, + relay_link bytea, + created_at text DEFAULT now() NOT NULL, + updated_at text DEFAULT now() NOT NULL +); + + + +ALTER TABLE test_chat_schema.group_relays ALTER COLUMN group_relay_id ADD GENERATED ALWAYS AS IDENTITY ( + SEQUENCE NAME test_chat_schema.group_relays_group_relay_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1 +); + + + CREATE TABLE test_chat_schema.group_snd_item_statuses ( group_snd_item_status_id bigint NOT NULL, chat_item_id bigint NOT NULL, @@ -805,7 +858,9 @@ CREATE TABLE test_chat_schema.groups ( request_shared_msg_id bytea, conn_link_prepared_connection smallint DEFAULT 0 NOT NULL, via_group_link_uri bytea, - summary_current_members_count bigint DEFAULT 0 NOT NULL + summary_current_members_count bigint DEFAULT 0 NOT NULL, + use_relays smallint DEFAULT 0 NOT NULL, + relay_own_status text ); @@ -1273,7 +1328,8 @@ CREATE TABLE test_chat_schema.users ( user_member_profile_updated_at timestamp with time zone, ui_themes text, active_order bigint DEFAULT 0 NOT NULL, - auto_accept_member_contacts smallint DEFAULT 0 NOT NULL + auto_accept_member_contacts smallint DEFAULT 0 NOT NULL, + is_user_chat_relay smallint DEFAULT 0 NOT NULL ); @@ -1357,6 +1413,11 @@ ALTER TABLE ONLY test_chat_schema.chat_items +ALTER TABLE ONLY test_chat_schema.chat_relays + ADD CONSTRAINT chat_relays_pkey PRIMARY KEY (chat_relay_id); + + + ALTER TABLE ONLY test_chat_schema.chat_tags ADD CONSTRAINT chat_tags_pkey PRIMARY KEY (chat_tag_id); @@ -1472,6 +1533,11 @@ ALTER TABLE ONLY test_chat_schema.group_profiles +ALTER TABLE ONLY test_chat_schema.group_relays + ADD CONSTRAINT group_relays_pkey PRIMARY KEY (group_relay_id); + + + ALTER TABLE ONLY test_chat_schema.group_snd_item_statuses ADD CONSTRAINT group_snd_item_statuses_pkey PRIMARY KEY (group_snd_item_status_id); @@ -1837,6 +1903,18 @@ CREATE INDEX idx_chat_items_user_id_item_status ON test_chat_schema.chat_items U +CREATE INDEX idx_chat_relays_user_id ON test_chat_schema.chat_relays USING btree (user_id); + + + +CREATE UNIQUE INDEX idx_chat_relays_user_id_address ON test_chat_schema.chat_relays USING btree (user_id, address); + + + +CREATE UNIQUE INDEX idx_chat_relays_user_id_name ON test_chat_schema.chat_relays USING btree (user_id, name); + + + CREATE INDEX idx_chat_tags_chats_chat_tag_id ON test_chat_schema.chat_tags_chats USING btree (chat_tag_id); @@ -2105,6 +2183,18 @@ CREATE INDEX idx_group_profiles_user_id ON test_chat_schema.group_profiles USING +CREATE INDEX idx_group_relays_chat_relay_id ON test_chat_schema.group_relays USING btree (chat_relay_id); + + + +CREATE INDEX idx_group_relays_group_id ON test_chat_schema.group_relays USING btree (group_id); + + + +CREATE UNIQUE INDEX idx_group_relays_group_member_id ON test_chat_schema.group_relays USING btree (group_member_id); + + + CREATE INDEX idx_group_snd_item_statuses_chat_item_id ON test_chat_schema.group_snd_item_statuses USING btree (chat_item_id); @@ -2463,6 +2553,11 @@ ALTER TABLE ONLY test_chat_schema.chat_items +ALTER TABLE ONLY test_chat_schema.chat_relays + ADD CONSTRAINT chat_relays_user_id_fkey FOREIGN KEY (user_id) REFERENCES test_chat_schema.users(user_id) ON DELETE CASCADE; + + + ALTER TABLE ONLY test_chat_schema.chat_tags_chats ADD CONSTRAINT chat_tags_chats_chat_tag_id_fkey FOREIGN KEY (chat_tag_id) REFERENCES test_chat_schema.chat_tags(chat_tag_id) ON DELETE CASCADE; @@ -2783,6 +2878,21 @@ ALTER TABLE ONLY test_chat_schema.group_profiles +ALTER TABLE ONLY test_chat_schema.group_relays + ADD CONSTRAINT group_relays_chat_relay_id_fkey FOREIGN KEY (chat_relay_id) REFERENCES test_chat_schema.chat_relays(chat_relay_id) ON DELETE CASCADE; + + + +ALTER TABLE ONLY test_chat_schema.group_relays + ADD CONSTRAINT group_relays_group_id_fkey FOREIGN KEY (group_id) REFERENCES test_chat_schema.groups(group_id) ON DELETE CASCADE; + + + +ALTER TABLE ONLY test_chat_schema.group_relays + ADD CONSTRAINT group_relays_group_member_id_fkey FOREIGN KEY (group_member_id) REFERENCES test_chat_schema.group_members(group_member_id) ON DELETE CASCADE; + + + ALTER TABLE ONLY test_chat_schema.group_snd_item_statuses ADD CONSTRAINT group_snd_item_statuses_chat_item_id_fkey FOREIGN KEY (chat_item_id) REFERENCES test_chat_schema.chat_items(chat_item_id) ON DELETE CASCADE; diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/M20251018_chat_relays.hs b/src/Simplex/Chat/Store/SQLite/Migrations/M20251018_chat_relays.hs index 8b81ccafe0..d3d7174be2 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/M20251018_chat_relays.hs +++ b/src/Simplex/Chat/Store/SQLite/Migrations/M20251018_chat_relays.hs @@ -21,7 +21,7 @@ m20251018_chat_relays = [sql| CREATE TABLE chat_relays( chat_relay_id INTEGER PRIMARY KEY, - address TEXT NOT NULL, + address BLOB NOT NULL, name TEXT NOT NULL, domains TEXT NOT NULL, preset INTEGER NOT NULL DEFAULT 0, @@ -30,11 +30,11 @@ CREATE TABLE chat_relays( user_id INTEGER NOT NULL REFERENCES users ON DELETE CASCADE, deleted INTEGER NOT NULL DEFAULT 0, created_at TEXT NOT NULL DEFAULT(datetime('now')), - updated_at TEXT NOT NULL DEFAULT(datetime('now')), - UNIQUE(user_id, address), - UNIQUE(user_id, name) + updated_at TEXT NOT NULL DEFAULT(datetime('now')) ); CREATE INDEX idx_chat_relays_user_id ON chat_relays(user_id); +CREATE UNIQUE INDEX idx_chat_relays_user_id_address ON chat_relays(user_id, address); +CREATE UNIQUE INDEX idx_chat_relays_user_id_name ON chat_relays(user_id, name); ALTER TABLE users ADD COLUMN is_user_chat_relay INTEGER NOT NULL DEFAULT 0; @@ -65,6 +65,8 @@ down_m20251018_chat_relays :: Query down_m20251018_chat_relays = [sql| DROP INDEX idx_chat_relays_user_id; +DROP INDEX idx_chat_relays_user_id_address; +DROP INDEX idx_chat_relays_user_id_name; DROP TABLE chat_relays; ALTER TABLE users DROP COLUMN is_user_chat_relay;