Made even more changes the UI and added new Routes for searching a user, requesting consent for messaging and others. Now just need to make the SSE work.
46 lines
1.5 KiB
PL/PgSQL
46 lines
1.5 KiB
PL/PgSQL
-- Drop everything related to users
|
|
DROP TABLE IF EXISTS public.users CASCADE;
|
|
|
|
-- Create new users table
|
|
CREATE TABLE public.users (
|
|
uuid UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
|
suuid CHAR(8) UNIQUE NOT NULL,
|
|
username TEXT UNIQUE NOT NULL CHECK (length(username) >= 3 AND username ~ '^[a-zA-Z0-9_-]+$'),
|
|
indexable BOOLEAN DEFAULT false,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL
|
|
);
|
|
|
|
-- Create trigger function for SUUID generation
|
|
CREATE OR REPLACE FUNCTION public.handle_new_user()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
NEW.suuid := public.generate_short_uuid();
|
|
RETURN NEW;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
-- Create the trigger
|
|
CREATE TRIGGER on_user_created
|
|
BEFORE INSERT ON public.users
|
|
FOR EACH ROW
|
|
EXECUTE FUNCTION public.handle_new_user();
|
|
|
|
-- Add policies
|
|
CREATE POLICY "Users can view their own profile" ON public.users
|
|
FOR SELECT USING (auth.uid() = uuid);
|
|
|
|
CREATE POLICY "Users can view indexable profiles" ON public.users
|
|
FOR SELECT USING (indexable = true);
|
|
|
|
CREATE POLICY "Allow user registration" ON public.users
|
|
FOR INSERT WITH CHECK (true);
|
|
|
|
CREATE POLICY "Users can update their own profile" ON public.users
|
|
FOR UPDATE USING (auth.uid() = uuid);
|
|
|
|
-- Enable RLS
|
|
ALTER TABLE public.users ENABLE ROW LEVEL SECURITY;
|
|
|
|
-- Create index for better performance
|
|
CREATE INDEX idx_users_suuid ON public.users(suuid);
|
|
CREATE INDEX idx_users_indexable ON public.users(indexable) WHERE indexable = true;
|