-- +goose Up -- Фаза 4 (по запросу): друзья, личные беседы, присутствие и часовой пояс. CREATE TABLE relationships ( user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, target_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, -- friend | outgoing (заявка отправлена) | incoming (заявка получена) | blocked type TEXT NOT NULL, created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), PRIMARY KEY (user_id, target_id) ); CREATE INDEX relationships_type_idx ON relationships (user_id, type); CREATE INDEX relationships_target_idx ON relationships (target_id, type); -- Участники личной беседы: канал типа dm без сервера (AGENT.md 7.8). CREATE TABLE dm_participants ( channel_id INTEGER NOT NULL REFERENCES channels (id) ON DELETE CASCADE, user_id INTEGER NOT NULL REFERENCES users (id) ON DELETE CASCADE, joined_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')), PRIMARY KEY (channel_id, user_id) ); CREATE INDEX dm_participants_user_idx ON dm_participants (user_id); -- Присутствие: когда пользователя видели в последний раз и его часовой пояс -- для показа времени друзьям. ALTER TABLE users ADD COLUMN last_seen_at TEXT; ALTER TABLE users ADD COLUMN timezone TEXT NOT NULL DEFAULT 'Europe/Moscow'; -- +goose Down ALTER TABLE users DROP COLUMN timezone; ALTER TABLE users DROP COLUMN last_seen_at; DROP TABLE dm_participants; DROP TABLE relationships;