Insta-style Online-Status mit Following-Filter + User-opt-out: - Profile.lastSeenAt + Profile.presenceVisible (default true) - GET /api/presence/last-seen?userIds=... batch, server-side filter durch Follow-Relation + presenceVisible - GET /api/me/following → User-IDs für client-side Channel-Filter (Supabase Realtime Presence hat keine server-side Filter) - POST /api/me/presence-visibility Toggle - POST /api/me/last-seen Heartbeat (Phase-1-Fallback bis Edge-Function) - /api/auth/me extended um presenceVisible für Settings-Initial-State DB-Layer nutzt raw SQL bis Migration auf staging gelaufen ist (Prisma-Client refresh erst nach CI generate). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
13 lines
683 B
SQL
13 lines
683 B
SQL
-- Add presence fields to profiles for Online-Status feature.
|
|
--
|
|
-- last_seen_at: Nullable, no default — NULL means "never seen" (accounts before this migration).
|
|
-- Updated via POST /api/me/last-seen (Heartbeat, Phase 1).
|
|
-- Phase 2: Supabase Edge-Function on presence-leave replaces the heartbeat.
|
|
--
|
|
-- presence_visible: opt-out toggle for online status visibility.
|
|
-- Default true — user can disable via POST /api/me/presence-visibility.
|
|
-- When false: last_seen_at is never exposed to other users.
|
|
|
|
ALTER TABLE "rebreak"."profiles" ADD COLUMN "last_seen_at" TIMESTAMP(3);
|
|
ALTER TABLE "rebreak"."profiles" ADD COLUMN "presence_visible" BOOLEAN NOT NULL DEFAULT true;
|