47 lines
No EOL
1.4 KiB
PL/PgSQL
47 lines
No EOL
1.4 KiB
PL/PgSQL
-- Enable the pgcrypto extension for UUID generation
|
|
CREATE EXTENSION IF NOT EXISTS pgcrypto;
|
|
|
|
-- Create profiles table
|
|
CREATE TABLE IF NOT EXISTS profiles (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
user_id UUID REFERENCES auth.users(id) ON DELETE CASCADE,
|
|
first_name TEXT,
|
|
last_name TEXT,
|
|
email TEXT UNIQUE,
|
|
skills TEXT[],
|
|
experience_level TEXT,
|
|
job_type TEXT[],
|
|
location TEXT,
|
|
created_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL,
|
|
updated_at TIMESTAMP WITH TIME ZONE DEFAULT TIMEZONE('utc'::text, NOW()) NOT NULL
|
|
);
|
|
|
|
-- Create RLS policies
|
|
ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;
|
|
|
|
CREATE POLICY "Users can view their own profile"
|
|
ON profiles FOR SELECT
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can update their own profile"
|
|
ON profiles FOR UPDATE
|
|
USING (auth.uid() = user_id);
|
|
|
|
CREATE POLICY "Users can insert their own profile"
|
|
ON profiles FOR INSERT
|
|
WITH CHECK (auth.uid() = user_id);
|
|
|
|
-- Create function to handle new user signup
|
|
CREATE OR REPLACE FUNCTION public.handle_new_user()
|
|
RETURNS TRIGGER AS $$
|
|
BEGIN
|
|
INSERT INTO public.profiles (user_id, email)
|
|
VALUES (new.id, new.email);
|
|
RETURN new;
|
|
END;
|
|
$$ LANGUAGE plpgsql SECURITY DEFINER;
|
|
|
|
-- Create trigger for new user signup
|
|
CREATE OR REPLACE TRIGGER on_auth_user_created
|
|
AFTER INSERT ON auth.users
|
|
FOR EACH ROW EXECUTE FUNCTION public.handle_new_user(); |