Add mentorship tables and constraints
cgen-f533dcc61f814b049442dd716407ac7d
This commit is contained in:
parent
a9d1e3ecf8
commit
64ebedd07f
1 changed files with 50 additions and 0 deletions
50
supabase/migrations/20251018_mentorship.sql
Normal file
50
supabase/migrations/20251018_mentorship.sql
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
create extension if not exists "pgcrypto";
|
||||
|
||||
-- Mentors registry
|
||||
create table if not exists public.mentors (
|
||||
user_id uuid primary key references public.user_profiles(id) on delete cascade,
|
||||
bio text,
|
||||
expertise text[] not null default '{}',
|
||||
available boolean not null default true,
|
||||
hourly_rate numeric(10,2),
|
||||
created_at timestamptz not null default now(),
|
||||
updated_at timestamptz not null default now()
|
||||
);
|
||||
|
||||
create index if not exists mentors_available_idx on public.mentors (available);
|
||||
create index if not exists mentors_expertise_gin on public.mentors using gin (expertise);
|
||||
|
||||
-- Mentorship requests
|
||||
create table if not exists public.mentorship_requests (
|
||||
id uuid primary key default gen_random_uuid(),
|
||||
mentor_id uuid not null references public.user_profiles(id) on delete cascade,
|
||||
mentee_id uuid not null references public.user_profiles(id) on delete cascade,
|
||||
message text,
|
||||
status text not null default 'pending' check (status in ('pending','accepted','rejected','cancelled')),
|
||||
created_at timestamptz not null default now(),
|
||||
updated_at timestamptz not null default now()
|
||||
);
|
||||
|
||||
create index if not exists mentorship_requests_mentor_idx on public.mentorship_requests (mentor_id);
|
||||
create index if not exists mentorship_requests_mentee_idx on public.mentorship_requests (mentee_id);
|
||||
create index if not exists mentorship_requests_status_idx on public.mentorship_requests (status);
|
||||
|
||||
-- Prevent duplicate pending requests between same pair
|
||||
create unique index if not exists mentorship_requests_unique_pending on public.mentorship_requests (mentor_id, mentee_id) where status = 'pending';
|
||||
|
||||
-- Simple trigger to maintain updated_at
|
||||
create or replace function public.set_updated_at()
|
||||
returns trigger as $$
|
||||
begin
|
||||
new.updated_at = now();
|
||||
return new;
|
||||
end;
|
||||
$$ language plpgsql;
|
||||
|
||||
create trigger mentors_set_updated_at
|
||||
before update on public.mentors
|
||||
for each row execute function public.set_updated_at();
|
||||
|
||||
create trigger mentorship_requests_set_updated_at
|
||||
before update on public.mentorship_requests
|
||||
for each row execute function public.set_updated_at();
|
||||
Loading…
Reference in a new issue