mirror of
https://github.com/pezkuwichain/pezkuwi-telegram-miniapp.git
synced 2026-04-22 22:27:57 +00:00
50 lines
1.3 KiB
PL/PgSQL
50 lines
1.3 KiB
PL/PgSQL
-- Telegram Mini App Users Table
|
|
-- Run this in Supabase SQL Editor
|
|
|
|
-- Users table for Telegram authentication
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
telegram_id BIGINT UNIQUE NOT NULL,
|
|
username TEXT,
|
|
first_name TEXT NOT NULL,
|
|
last_name TEXT,
|
|
photo_url TEXT,
|
|
language_code TEXT DEFAULT 'ku',
|
|
wallet_address TEXT,
|
|
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
);
|
|
|
|
-- Index for fast telegram_id lookups
|
|
CREATE INDEX IF NOT EXISTS idx_users_telegram_id ON users(telegram_id);
|
|
|
|
-- Index for wallet_address lookups
|
|
CREATE INDEX IF NOT EXISTS idx_users_wallet_address ON users(wallet_address);
|
|
|
|
-- RLS (Row Level Security)
|
|
ALTER TABLE users ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Policy: Users can read their own data
|
|
CREATE POLICY "Users can read own data" ON users
|
|
FOR SELECT
|
|
USING (true);
|
|
|
|
-- Policy: Service role can do everything (for Edge Functions)
|
|
CREATE POLICY "Service role full access" ON users
|
|
FOR ALL
|
|
USING (auth.role() = 'service_role');
|
|
|
|
-- Updated_at trigger
|
|
CREATE OR REPLACE FUNCTION update_updated_at()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.updated_at = NOW();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
CREATE TRIGGER users_updated_at
|
|
BEFORE UPDATE ON users
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION update_updated_at();
|