talk / backend /sql /022_app_push_tokens.sql
user
Deploy StyleVoiceChat backend
aa9892b
Raw History Blame Contribute Delete
2.8 kB
-- 022: ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ (iOS/Android) FCM ํ‘ธ์‹œ ์ฑ„๋„ ์ถ”๊ฐ€
--
-- ๋ฐฐ๊ฒฝ:
-- - 2026-05-05 SQL 017 ์—์„œ Web Push ํ๊ธฐ (push_subscriptions DROP).
-- - 2026-05-10 iOS/Android ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ๋ฐฐํฌ ์™„๋ฃŒ โ†’ FCM ์œผ๋กœ ํ‘ธ์‹œ ๋ถ€ํ™œ.
-- - ํšŒ๊ท€ ๊ฐ€๋“œ (playlist_scheduling.md): "push_subscriptions ๋ถ€ํ™œ ๊ธˆ์ง€, ์ƒˆ ํ‘ธ์‹œ
-- ์ฑ„๋„์€ ๋ณ„๋„ ํ…Œ์ด๋ธ”" โ†’ ๋ณธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ device_push_tokens ๋ผ๋Š” ์ƒˆ ์ด๋ฆ„ ์‚ฌ์šฉ.
--
-- ์ ์šฉ ์ผ์ž: 2026-05-10
-- 1) device_push_tokens โ€” ์‚ฌ์šฉ์ž ๋‹จ๋ง๋ณ„ FCM registration token ๋ณด๊ด€.
-- ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๋‹จ๋ง ์‚ฌ์šฉ ๊ฐ€๋Šฅ (iPhone + iPad + Android ๋“ฑ) โ†’ composite key.
CREATE TABLE IF NOT EXISTS device_push_tokens (
user_id UUID NOT NULL REFERENCES auth.users(id) ON DELETE CASCADE,
token TEXT NOT NULL,
platform TEXT NOT NULL CHECK (platform IN ('ios', 'android')),
app_version TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (user_id, token)
);
CREATE INDEX IF NOT EXISTS idx_device_push_tokens_user
ON device_push_tokens (user_id);
-- ๊ฐ™์€ ํ† ํฐ์ด ๋‹ค๋ฅธ user ๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ์ผ€์ด์Šค (๋‹จ๋ง ์–‘๋„/์žฌ๋กœ๊ทธ์ธ) โ€” ํ† ํฐ ๊ธฐ์ค€
-- ์œผ๋กœ๋„ ๋น ๋ฅด๊ฒŒ ์ฐพ์•„ ์˜› user ํ–‰ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ.
CREATE INDEX IF NOT EXISTS idx_device_push_tokens_token
ON device_push_tokens (token);
-- RLS โ€” ๋ณธ์ธ ํ† ํฐ๋งŒ read/write. ๋ฐœ์†ก์€ ์„œ๋ฒ„(service_role)๊ฐ€ ์ง์ ‘ query.
ALTER TABLE device_push_tokens ENABLE ROW LEVEL SECURITY;
DROP POLICY IF EXISTS "device_push_tokens_self_select" ON device_push_tokens;
CREATE POLICY "device_push_tokens_self_select" ON device_push_tokens
FOR SELECT USING (auth.uid() = user_id);
DROP POLICY IF EXISTS "device_push_tokens_self_insert" ON device_push_tokens;
CREATE POLICY "device_push_tokens_self_insert" ON device_push_tokens
FOR INSERT WITH CHECK (auth.uid() = user_id);
DROP POLICY IF EXISTS "device_push_tokens_self_update" ON device_push_tokens;
CREATE POLICY "device_push_tokens_self_update" ON device_push_tokens
FOR UPDATE USING (auth.uid() = user_id);
DROP POLICY IF EXISTS "device_push_tokens_self_delete" ON device_push_tokens;
CREATE POLICY "device_push_tokens_self_delete" ON device_push_tokens
FOR DELETE USING (auth.uid() = user_id);
-- 2) playlist_schedules.notify_app_push โ€” ์Šค์ผ€์ค„ ๋ฐœ์‚ฌ ์‹œ FCM ํ‘ธ์‹œ๋„ ๋ณด๋‚ผ์ง€.
-- SQL 017 ์˜ notify_kakao ์™€ ๋…๋ฆฝ. ๋‘˜ ๋‹ค ์ผœ๋ฉด ๋‘˜ ๋‹ค ๋ฐœ์†ก.
ALTER TABLE playlist_schedules
ADD COLUMN IF NOT EXISTS notify_app_push BOOLEAN NOT NULL DEFAULT FALSE;
-- 3) care_messages ๋„ ๋™์ผ ์ฑ„๋„ ์ถ”๊ฐ€ (์•ˆ๋ถ€ ๋ฉ”์‹œ์ง€๋„ ํ‘ธ์‹œ ์˜ต์…˜ ๊ฐ€๋Šฅํ•˜๋„๋ก).
ALTER TABLE care_messages
ADD COLUMN IF NOT EXISTS notify_app_push BOOLEAN NOT NULL DEFAULT FALSE;