SHA256
Что сделано: вычистили неиспользуемый user-settings sync/DM sync хвост, сохранили сборку, обновили bundle.sh так, чтобы gradle-wrapper.jar всегда попадал в архив. Проверено: compileJava и deploy на t2 (server + UI). Не проверяли: полные интеграционные сценарии, ручные UI-флоу и продовый деплой.
113 lines
3.6 KiB
PL/PgSQL
113 lines
3.6 KiB
PL/PgSQL
BEGIN;
|
|
|
|
-- У пользователя действует только первый access_server из Solana PDA.
|
|
CREATE OR REPLACE FUNCTION shine_refresh_user_access_servers_for_user(p_user_login TEXT)
|
|
RETURNS VOID
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
BEGIN
|
|
IF p_user_login IS NULL OR btrim(p_user_login) = '' THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
DELETE FROM user_access_servers_current
|
|
WHERE LOWER(user_login) = LOWER(p_user_login);
|
|
|
|
INSERT INTO user_access_servers_current (
|
|
user_login,
|
|
server_login,
|
|
server_url,
|
|
server_client_key,
|
|
user_record_number,
|
|
user_updated_at_ms,
|
|
server_record_number,
|
|
server_updated_at_ms,
|
|
refreshed_at_ms
|
|
)
|
|
SELECT
|
|
u.login,
|
|
s.login,
|
|
s.server_address,
|
|
s.client_key,
|
|
u.record_number,
|
|
u.updated_at_ms,
|
|
s.record_number,
|
|
s.updated_at_ms,
|
|
CAST(EXTRACT(EPOCH FROM clock_timestamp()) * 1000 AS BIGINT)
|
|
FROM solana_user_pda_current u
|
|
CROSS JOIN LATERAL (
|
|
SELECT login_value
|
|
FROM jsonb_array_elements_text(
|
|
CASE
|
|
WHEN btrim(COALESCE(u.access_servers_json, '')) = '' THEN '[]'::jsonb
|
|
ELSE u.access_servers_json::jsonb
|
|
END
|
|
) WITH ORDINALITY AS access_server(login_value, ord)
|
|
WHERE ord = 1
|
|
) AS access_server
|
|
JOIN solana_user_pda_current s
|
|
ON LOWER(s.login) = LOWER(btrim(access_server.login_value))
|
|
AND s.is_server = TRUE
|
|
AND btrim(COALESCE(s.server_address, '')) <> ''
|
|
WHERE LOWER(u.login) = LOWER(p_user_login)
|
|
ON CONFLICT (user_login, server_login) DO UPDATE SET
|
|
server_url = EXCLUDED.server_url,
|
|
server_client_key = EXCLUDED.server_client_key,
|
|
user_record_number = EXCLUDED.user_record_number,
|
|
user_updated_at_ms = EXCLUDED.user_updated_at_ms,
|
|
server_record_number = EXCLUDED.server_record_number,
|
|
server_updated_at_ms = EXCLUDED.server_updated_at_ms,
|
|
refreshed_at_ms = EXCLUDED.refreshed_at_ms;
|
|
END;
|
|
$$;
|
|
|
|
CREATE OR REPLACE FUNCTION shine_refresh_user_access_servers_for_server(p_server_login TEXT)
|
|
RETURNS VOID
|
|
LANGUAGE plpgsql
|
|
AS $$
|
|
DECLARE
|
|
affected_user RECORD;
|
|
BEGIN
|
|
IF p_server_login IS NULL OR btrim(p_server_login) = '' THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
DELETE FROM user_access_servers_current
|
|
WHERE LOWER(server_login) = LOWER(p_server_login);
|
|
|
|
FOR affected_user IN
|
|
SELECT u.login
|
|
FROM solana_user_pda_current u
|
|
CROSS JOIN LATERAL (
|
|
SELECT login_value
|
|
FROM jsonb_array_elements_text(
|
|
CASE
|
|
WHEN btrim(COALESCE(u.access_servers_json, '')) = '' THEN '[]'::jsonb
|
|
ELSE u.access_servers_json::jsonb
|
|
END
|
|
) WITH ORDINALITY AS access_server(login_value, ord)
|
|
WHERE ord = 1
|
|
) AS access_server
|
|
WHERE LOWER(btrim(access_server.login_value)) = LOWER(p_server_login)
|
|
LOOP
|
|
PERFORM shine_refresh_user_access_servers_for_user(affected_user.login);
|
|
END LOOP;
|
|
END;
|
|
$$;
|
|
|
|
DROP TABLE IF EXISTS dm_sync_outbox;
|
|
DROP TABLE IF EXISTS dm_sync_peer_state;
|
|
DROP TABLE IF EXISTS user_settings_sync_peer_state;
|
|
DROP INDEX IF EXISTS idx_user_settings_synced;
|
|
ALTER TABLE user_settings DROP COLUMN IF EXISTS synced;
|
|
|
|
SELECT shine_refresh_user_access_servers_all();
|
|
|
|
INSERT INTO db_schema_version (id, schema_version, updated_at_ms)
|
|
VALUES (1, 16, CAST(EXTRACT(EPOCH FROM clock_timestamp()) * 1000 AS BIGINT))
|
|
ON CONFLICT (id) DO UPDATE SET
|
|
schema_version = EXCLUDED.schema_version,
|
|
updated_at_ms = EXCLUDED.updated_at_ms;
|
|
|
|
COMMIT;
|