Added all SQL scripts by using a python script to fetch them. Also added a "About" page and a skeleton to the chat page. Fixed the register function that was not setting the public_key on the database
1 line
No EOL
1.5 KiB
PL/PgSQL
1 line
No EOL
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; |