Spaces:
Sleeping
Sleeping
Download supabase_migration.sql from Therdpoom/entgroup-sentiment: direct link, hf CLI and curl.
- Browser
- Download file 3.67 kB
-
https://huggingface.co/spaces/Therdpoom/entgroup-sentiment/resolve/main/supabase_migration.sql
- Command line
-
hf download hf://spaces/Therdpoom/entgroup-sentiment/supabase_migration.sql
-
curl -L -o supabase_migration.sql https://huggingface.co/spaces/Therdpoom/entgroup-sentiment/resolve/main/supabase_migration.sql
3.67 kB
| -- ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| -- Supabase Migration β entgroup-sentiment patch v3.1 | |
| -- ΰΈ£ΰΈ±ΰΈΰΉΰΈ Supabase Dashboard β SQL Editor ΰΈΰΉΰΈΰΈ git push app.py | |
| -- ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| -- ββ 1. admin_activity table (PATCH 3b) ββββββββββββββββββββββββββ | |
| -- ΰΉΰΈΰΈ in-memory _last_admin_activity ΰΈΰΈ΅ΰΉΰΈ«ΰΈ²ΰΈ’ΰΉΰΈ‘ΰΈ·ΰΉΰΈ Space restart | |
| CREATE TABLE IF NOT EXISTS admin_activity ( | |
| id SERIAL PRIMARY KEY, | |
| activity_key TEXT NOT NULL UNIQUE, -- 'global' ΰΈ«ΰΈ£ΰΈ·ΰΈ customer_id | |
| last_active_at TIMESTAMPTZ NOT NULL DEFAULT NOW() | |
| ); | |
| CREATE INDEX IF NOT EXISTS idx_admin_activity_key ON admin_activity(activity_key); | |
| -- ββ 2. RPC: increment_daily_stats (PATCH 3) ββββββββββββββββββββββ | |
| -- atomic server-side increment ΰΈΰΉΰΈΰΈΰΈΰΈ±ΰΈ race condition | |
| -- ΰΉΰΈ£ΰΈ΅ΰΈ’ΰΈΰΈΰΈ²ΰΈ Python: sb_post("/rest/v1/rpc/increment_daily_stats", {...}) | |
| CREATE OR REPLACE FUNCTION increment_daily_stats( | |
| p_date DATE, | |
| p_is_new BOOLEAN, | |
| p_customer_type TEXT | |
| ) | |
| RETURNS VOID | |
| LANGUAGE plpgsql | |
| AS $$ | |
| BEGIN | |
| INSERT INTO daily_stats ( | |
| date, total_customers, new_customers, returning_customers, | |
| si_count, end_user_count, unknown_count, total_messages | |
| ) VALUES ( | |
| p_date, 1, | |
| CASE WHEN p_is_new THEN 1 ELSE 0 END, | |
| CASE WHEN NOT p_is_new THEN 1 ELSE 0 END, | |
| CASE WHEN p_customer_type = 'si' THEN 1 ELSE 0 END, | |
| CASE WHEN p_customer_type = 'end_user' THEN 1 ELSE 0 END, | |
| CASE WHEN p_customer_type = 'unknown' THEN 1 ELSE 0 END, | |
| 1 | |
| ) | |
| ON CONFLICT (date) DO UPDATE SET | |
| total_customers = daily_stats.total_customers + 1, | |
| new_customers = daily_stats.new_customers + CASE WHEN p_is_new THEN 1 ELSE 0 END, | |
| returning_customers = daily_stats.returning_customers + CASE WHEN NOT p_is_new THEN 1 ELSE 0 END, | |
| si_count = daily_stats.si_count + CASE WHEN p_customer_type = 'si' THEN 1 ELSE 0 END, | |
| end_user_count = daily_stats.end_user_count + CASE WHEN p_customer_type = 'end_user' THEN 1 ELSE 0 END, | |
| unknown_count = daily_stats.unknown_count + CASE WHEN p_customer_type = 'unknown' THEN 1 ELSE 0 END, | |
| total_messages = daily_stats.total_messages + 1; | |
| END; | |
| $$; | |
| -- Grant execute ΰΉΰΈ«ΰΉ anon role (ΰΉΰΈΰΉ Supabase key ΰΈΰΈΰΈΰΈ΄) | |
| GRANT EXECUTE ON FUNCTION increment_daily_stats TO anon, authenticated, service_role; | |
| -- ββ 3. ΰΈΰΈ£ΰΈ§ΰΈΰΈͺΰΈΰΈ daily_stats ΰΈ‘ΰΈ΅ unique constraint ΰΈΰΈ date ββββββββββ | |
| -- RPC ΰΉΰΈΰΉ ON CONFLICT (date) β ΰΈΰΉΰΈΰΈΰΈ‘ΰΈ΅ unique index | |
| DO $$ | |
| BEGIN | |
| IF NOT EXISTS ( | |
| SELECT 1 FROM pg_constraint | |
| WHERE conname = 'daily_stats_date_key' | |
| ) THEN | |
| ALTER TABLE daily_stats ADD CONSTRAINT daily_stats_date_key UNIQUE (date); | |
| END IF; | |
| END $$; | |
| -- ββ Done ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| SELECT 'Migration complete: admin_activity table + increment_daily_stats RPC' AS result; | |