create table clients ( id uuid default gen_random_uuid() constraint client_pk primary key, client_id varchar not null constraint client_client_id_key unique, client_secret varchar not null, name varchar not null, description varchar default '', private_key text not null, encryption_key text not null, grant_types jsonb not null default '[]'::jsonb, capabilities jsonb not null default '[]'::jsonb, confidential boolean not null default true, created_at timestamp default now(), updated_at timestamp default now() ); create table client_redirect_uris ( id uuid default gen_random_uuid() constraint client_redirect_uris_pk primary key, client_id uuid not null constraint client_redirect_uris_client_id_fk references clients on delete cascade, redirect_uri varchar not null ); create table scopes ( id uuid default gen_random_uuid() constraint scopes_pk primary key, name varchar not null constraint scopes_name_key unique, description varchar ); create table client_scopes ( id uuid default gen_random_uuid() constraint client_scopes_pk primary key, client_id uuid not null constraint client_scopes_client_id_fk references clients on delete cascade, scope_id uuid not null constraint client_scopes_scope_id_fk references scopes on delete cascade, constraint client_scopes_client_id_scope_id_key unique (client_id, scope_id) ); create table users ( id uuid default gen_random_uuid() constraint users_pk primary key, first_name varchar not null, last_name varchar not null, email varchar not null constraint users_email_key unique, password varchar not null, created_at timestamp default now(), updated_at timestamp default now() ); create table client_users ( id uuid default gen_random_uuid() constraint client_users_pk primary key, client_id uuid not null constraint client_users_client_id_fk references clients on delete cascade, user_id uuid not null constraint client_users_user_id_fk references users on delete cascade, constraint client_users_client_id_user_id_key unique (client_id, user_id) );