AeThex-OS/attached_assets/Pasted--WARNING-This-schema-is-for-context-only-and-is-not-mea_1765838402288.txt
sirpiglr f8ba1cbb0f Add detailed schema information for the entire database
Add the complete SQL schema definition, including 316 tables, to the repository for comprehensive database structure reference.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 279f1558-c0e3-40e4-8217-be7e9f4c6eca
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 4581eb35-bd44-463a-b452-7a68159bc958
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/b984cb14-1d19-4944-922b-bc79e821ed35/279f1558-c0e3-40e4-8217-be7e9f4c6eca/HbU8yEz
Replit-Helium-Checkpoint-Created: true
2025-12-15 22:49:21 +00:00

4291 lines
No EOL
181 KiB
Text

-- WARNING: This schema is for context only and is not meant to be run.
-- Table order and constraints may not be valid for execution.
CREATE TABLE public.achievements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
icon text,
points_reward integer DEFAULT 0,
badge_color text,
rarity text,
xp_reward integer DEFAULT 0,
category character varying NOT NULL DEFAULT 'milestone'::character varying,
CONSTRAINT achievements_pkey PRIMARY KEY (id)
);
CREATE TABLE public.activity_events (
id uuid NOT NULL DEFAULT gen_random_uuid(),
actor_id uuid NOT NULL,
verb text NOT NULL,
object_type text NOT NULL,
object_id uuid,
target_id uuid,
metadata jsonb,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT activity_events_pkey PRIMARY KEY (id),
CONSTRAINT activity_events_actor_id_fkey FOREIGN KEY (actor_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.activity_logs (
id character varying NOT NULL DEFAULT (gen_random_uuid())::character varying,
user_id character varying,
action text NOT NULL,
details text,
ip_address text,
user_agent text,
status text NOT NULL,
timestamp timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT activity_logs_pkey PRIMARY KEY (id),
CONSTRAINT activity_logs_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id)
);
CREATE TABLE public.aethex_alerts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
type text NOT NULL,
severity text NOT NULL CHECK (severity = ANY (ARRAY['critical'::text, 'warning'::text, 'info'::text])),
message text NOT NULL,
is_resolved boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
resolved_at timestamp with time zone,
CONSTRAINT aethex_alerts_pkey PRIMARY KEY (id),
CONSTRAINT aethex_alerts_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.aethex_applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
creator_id uuid NOT NULL,
opportunity_id uuid NOT NULL,
status text DEFAULT 'submitted'::text,
cover_letter text,
response_message text,
applied_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT aethex_applications_pkey PRIMARY KEY (id),
CONSTRAINT aethex_applications_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.aethex_creators(id),
CONSTRAINT aethex_applications_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.aethex_opportunities(id)
);
CREATE TABLE public.aethex_badges (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
icon text,
color text DEFAULT '#ffffff'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT aethex_badges_pkey PRIMARY KEY (id)
);
CREATE TABLE public.aethex_creators (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
username text NOT NULL UNIQUE,
bio text,
skills ARRAY DEFAULT '{}'::text[],
avatar_url text,
experience_level text,
arm_affiliations ARRAY DEFAULT '{}'::text[],
primary_arm text,
is_discoverable boolean DEFAULT true,
allow_recommendations boolean DEFAULT true,
devconnect_linked boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT aethex_creators_pkey PRIMARY KEY (id),
CONSTRAINT aethex_creators_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.aethex_devconnect_links (
id uuid NOT NULL DEFAULT gen_random_uuid(),
aethex_creator_id uuid NOT NULL,
devconnect_username text NOT NULL,
devconnect_profile_url text,
verified boolean DEFAULT false,
linked_at timestamp with time zone DEFAULT now(),
CONSTRAINT aethex_devconnect_links_pkey PRIMARY KEY (id),
CONSTRAINT aethex_devconnect_links_aethex_creator_id_fkey FOREIGN KEY (aethex_creator_id) REFERENCES public.aethex_creators(id)
);
CREATE TABLE public.aethex_event_registrations (
id uuid NOT NULL DEFAULT gen_random_uuid(),
event_id uuid NOT NULL,
user_id uuid NOT NULL,
registered_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT aethex_event_registrations_pkey PRIMARY KEY (id),
CONSTRAINT aethex_event_registrations_event_id_fkey FOREIGN KEY (event_id) REFERENCES public.aethex_events(id),
CONSTRAINT aethex_event_registrations_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.aethex_events (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
title text NOT NULL,
description text,
date date NOT NULL,
time time without time zone NOT NULL,
location text,
capacity integer,
image_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone,
category text,
price numeric,
featured boolean,
speakers ARRAY,
agenda jsonb,
full_description text,
map_url text,
ticket_types jsonb,
CONSTRAINT aethex_events_pkey PRIMARY KEY (id),
CONSTRAINT aethex_events_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.aethex_opportunities (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title text NOT NULL,
description text NOT NULL,
job_type text NOT NULL,
salary_min integer,
salary_max integer,
experience_level text,
arm_affiliation text NOT NULL,
posted_by_id uuid NOT NULL,
status text DEFAULT 'open'::text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT aethex_opportunities_pkey PRIMARY KEY (id),
CONSTRAINT aethex_opportunities_posted_by_id_fkey FOREIGN KEY (posted_by_id) REFERENCES public.aethex_creators(id)
);
CREATE TABLE public.aethex_passports (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL UNIQUE,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT aethex_passports_pkey PRIMARY KEY (id),
CONSTRAINT aethex_passports_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.aethex_projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
creator_id uuid NOT NULL,
title text NOT NULL,
description text,
url text,
image_url text,
tags ARRAY DEFAULT '{}'::text[],
is_featured boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT aethex_projects_pkey PRIMARY KEY (id),
CONSTRAINT aethex_projects_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.aethex_creators(id)
);
CREATE TABLE public.aethex_sites (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
url text,
status text,
uptime numeric,
response_time integer,
users integer,
requests integer,
last_check timestamp with time zone,
services ARRAY,
metrics jsonb,
created_at timestamp with time zone NOT NULL DEFAULT now(),
metrics_history ARRAY,
owner_id uuid,
api_key_hash text,
handshake_token text,
handshake_token_expires_at timestamp with time zone,
CONSTRAINT aethex_sites_pkey PRIMARY KEY (id),
CONSTRAINT aethex_sites_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.aethex_skill_endorsements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
creator_id uuid NOT NULL,
endorsed_by_id uuid NOT NULL,
skill text NOT NULL,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT aethex_skill_endorsements_pkey PRIMARY KEY (id),
CONSTRAINT aethex_skill_endorsements_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.aethex_creators(id),
CONSTRAINT aethex_skill_endorsements_endorsed_by_id_fkey FOREIGN KEY (endorsed_by_id) REFERENCES public.aethex_creators(id)
);
CREATE TABLE public.announcements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
author_id uuid,
title text NOT NULL,
content text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT announcements_pkey PRIMARY KEY (id),
CONSTRAINT announcements_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id),
CONSTRAINT announcements_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.api_keys (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
api_key text NOT NULL UNIQUE,
name text NOT NULL,
last_used_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
expires_at timestamp with time zone,
CONSTRAINT api_keys_pkey PRIMARY KEY (id),
CONSTRAINT api_keys_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.app_2db261233c_achievements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name character varying NOT NULL,
description text,
category character varying NOT NULL,
type character varying NOT NULL,
criteria jsonb NOT NULL,
rewards jsonb DEFAULT '{}'::jsonb,
icon_url text,
rarity character varying DEFAULT 'common'::character varying,
points integer DEFAULT 0,
active boolean DEFAULT true,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_achievements_pkey PRIMARY KEY (id)
);
CREATE TABLE public.app_2db261233c_admin_logs (
id uuid NOT NULL DEFAULT gen_random_uuid(),
admin_id uuid NOT NULL,
action character varying NOT NULL,
target_type character varying,
target_id uuid,
details jsonb DEFAULT '{}'::jsonb,
ip_address inet,
user_agent text,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_admin_logs_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_admin_logs_admin_id_fkey FOREIGN KEY (admin_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_comments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
post_id uuid,
content_id uuid,
parent_id uuid,
content text NOT NULL,
likes_count integer DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_comments_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id),
CONSTRAINT app_2db261233c_comments_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.app_2db261233c_posts(id),
CONSTRAINT app_2db261233c_comments_content_id_fkey FOREIGN KEY (content_id) REFERENCES public.app_2db261233c_content(id),
CONSTRAINT app_2db261233c_comments_parent_id_fkey FOREIGN KEY (parent_id) REFERENCES public.app_2db261233c_comments(id)
);
CREATE TABLE public.app_2db261233c_content (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
type character varying NOT NULL,
title text NOT NULL,
description text,
content_url text,
thumbnail_url text,
metadata jsonb DEFAULT '{}'::jsonb,
category character varying,
tags ARRAY,
status character varying DEFAULT 'published'::character varying,
visibility character varying DEFAULT 'public'::character varying,
views_count integer DEFAULT 0,
likes_count integer DEFAULT 0,
comments_count integer DEFAULT 0,
shares_count integer DEFAULT 0,
featured boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_content_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_content_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_follows (
id uuid NOT NULL DEFAULT gen_random_uuid(),
follower_id uuid NOT NULL,
following_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_follows_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_follows_follower_id_fkey FOREIGN KEY (follower_id) REFERENCES public.app_2db261233c_users(id),
CONSTRAINT app_2db261233c_follows_following_id_fkey FOREIGN KEY (following_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_gaming_stats (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL UNIQUE,
games_played integer DEFAULT 0,
total_playtime integer DEFAULT 0,
worlds_created integer DEFAULT 0,
tournaments_won integer DEFAULT 0,
current_streak integer DEFAULT 0,
best_streak integer DEFAULT 0,
favorite_games ARRAY,
stats jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_gaming_stats_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_gaming_stats_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_likes (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
post_id uuid,
content_id uuid,
comment_id uuid,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_likes_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_likes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id),
CONSTRAINT app_2db261233c_likes_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.app_2db261233c_posts(id),
CONSTRAINT app_2db261233c_likes_content_id_fkey FOREIGN KEY (content_id) REFERENCES public.app_2db261233c_content(id),
CONSTRAINT app_2db261233c_likes_comment_id_fkey FOREIGN KEY (comment_id) REFERENCES public.app_2db261233c_comments(id)
);
CREATE TABLE public.app_2db261233c_notifications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
type character varying NOT NULL,
title text NOT NULL,
message text,
data jsonb DEFAULT '{}'::jsonb,
read boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_notifications_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_notifications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_posts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
content text NOT NULL,
media_urls ARRAY,
type character varying DEFAULT 'social'::character varying,
visibility character varying DEFAULT 'public'::character varying,
likes_count integer DEFAULT 0,
comments_count integer DEFAULT 0,
shares_count integer DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_posts_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_posts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_professional_profiles (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL UNIQUE,
job_title text,
company text,
industry text,
skills ARRAY,
experience_years integer,
education jsonb DEFAULT '[]'::jsonb,
certifications jsonb DEFAULT '[]'::jsonb,
portfolio_url text,
linkedin_url text,
github_url text,
resume_url text,
availability character varying DEFAULT 'not_looking'::character varying,
salary_range text,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_professional_profiles_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_professional_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id)
);
CREATE TABLE public.app_2db261233c_user_achievements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
achievement_id uuid NOT NULL,
progress integer DEFAULT 0,
completed boolean DEFAULT false,
completed_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_user_achievements_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_user_achievements_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.app_2db261233c_users(id),
CONSTRAINT app_2db261233c_user_achievements_achievement_id_fkey FOREIGN KEY (achievement_id) REFERENCES public.app_2db261233c_achievements(id)
);
CREATE TABLE public.app_2db261233c_users (
id uuid NOT NULL,
username character varying NOT NULL UNIQUE,
full_name text,
avatar_url text,
bio text,
location text,
website text,
gaming_level integer DEFAULT 1,
gaming_xp integer DEFAULT 0,
social_score integer DEFAULT 0,
professional_tier character varying DEFAULT 'free'::character varying,
total_uploads integer DEFAULT 0,
total_achievements integer DEFAULT 0,
status character varying DEFAULT 'active'::character varying,
privacy_settings jsonb DEFAULT '{"gaming": "public", "profile": "public", "professional": "public"}'::jsonb,
notification_settings jsonb DEFAULT '{"push": true, "email": true, "in_app": true}'::jsonb,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT app_2db261233c_users_pkey PRIMARY KEY (id),
CONSTRAINT app_2db261233c_users_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id)
);
CREATE TABLE public.applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
type text NOT NULL CHECK (type = ANY (ARRAY['contributor'::text, 'career'::text])),
full_name text NOT NULL,
email text NOT NULL,
location text,
role_interest text,
primary_skill text,
experience_level text,
availability text,
portfolio_url text,
resume_url text,
interests ARRAY,
message text,
status text NOT NULL DEFAULT 'new'::text,
submitted_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT applications_pkey PRIMARY KEY (id)
);
CREATE TABLE public.architect_waitlist (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid UNIQUE,
email text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT architect_waitlist_pkey PRIMARY KEY (id),
CONSTRAINT architect_waitlist_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.arm_follows (
id bigint NOT NULL DEFAULT nextval('arm_follows_id_seq'::regclass),
user_id uuid NOT NULL,
arm_affiliation text NOT NULL,
followed_at timestamp with time zone DEFAULT now(),
CONSTRAINT arm_follows_pkey PRIMARY KEY (id),
CONSTRAINT arm_follows_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.assets (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid,
user_id uuid,
name text NOT NULL,
file_type text,
size bigint,
url text NOT NULL,
tags ARRAY,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
site_id uuid,
CONSTRAINT assets_pkey PRIMARY KEY (id),
CONSTRAINT assets_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id),
CONSTRAINT assets_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT assets_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.audit_logs (
id integer NOT NULL DEFAULT nextval('audit_logs_id_seq'::regclass),
guild_id text NOT NULL,
action text NOT NULL,
user_id text NOT NULL,
user_tag text,
details jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT audit_logs_pkey PRIMARY KEY (id)
);
CREATE TABLE public.auth_logs (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
event_type text NOT NULL,
ip_address inet,
user_agent text,
metadata jsonb,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT auth_logs_pkey PRIMARY KEY (id)
);
CREATE TABLE public.auth_nonces (
id bigint NOT NULL DEFAULT nextval('auth_nonces_id_seq'::regclass),
wallet_address text NOT NULL,
nonce text NOT NULL UNIQUE,
created_at timestamp with time zone DEFAULT now(),
expires_at timestamp with time zone NOT NULL,
used boolean DEFAULT false,
ip_address inet,
CONSTRAINT auth_nonces_pkey PRIMARY KEY (id)
);
CREATE TABLE public.automod_config (
guild_id text NOT NULL,
links_enabled boolean DEFAULT false,
links_action text DEFAULT 'delete'::text,
spam_enabled boolean DEFAULT false,
spam_threshold integer DEFAULT 5,
badwords jsonb DEFAULT '[]'::jsonb,
invites_enabled boolean DEFAULT false,
mentions_enabled boolean DEFAULT false,
mentions_limit integer DEFAULT 5,
exempt_roles jsonb DEFAULT '[]'::jsonb,
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT automod_config_pkey PRIMARY KEY (guild_id)
);
CREATE TABLE public.blockchain_transactions (
id bigint NOT NULL DEFAULT nextval('blockchain_transactions_id_seq'::regclass),
transaction_hash text NOT NULL UNIQUE,
block_number bigint NOT NULL,
chain_id integer NOT NULL,
from_address text NOT NULL,
to_address text,
value numeric DEFAULT 0,
value_currency text DEFAULT 'ETH'::text,
gas_used numeric,
gas_price numeric,
transaction_type text,
status text DEFAULT 'confirmed'::text,
timestamp timestamp with time zone NOT NULL,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT blockchain_transactions_pkey PRIMARY KEY (id)
);
CREATE TABLE public.blog_categories (
id text NOT NULL,
name text NOT NULL,
slug text NOT NULL UNIQUE,
description text,
theme text NOT NULL,
border_color text NOT NULL,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT blog_categories_pkey PRIMARY KEY (id)
);
CREATE TABLE public.blog_comments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
post_id uuid NOT NULL,
user_id uuid NOT NULL,
parent_comment_id uuid,
content text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT blog_comments_pkey PRIMARY KEY (id),
CONSTRAINT blog_comments_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.blog_posts(id),
CONSTRAINT blog_comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT blog_comments_parent_comment_id_fkey FOREIGN KEY (parent_comment_id) REFERENCES public.blog_comments(id)
);
CREATE TABLE public.blog_post_likes (
post_id uuid NOT NULL,
user_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT blog_post_likes_pkey PRIMARY KEY (post_id, user_id),
CONSTRAINT blog_post_likes_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.blog_posts(id),
CONSTRAINT blog_post_likes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.blog_posts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
slug text NOT NULL UNIQUE,
title text NOT NULL,
content text,
author_id uuid,
image_url text,
tags ARRAY,
status text DEFAULT 'draft'::text,
published_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
image_prompt text,
excerpt text,
author text,
date text,
read_time text,
category text,
image text,
likes integer DEFAULT 0,
comments integer DEFAULT 0,
body_html text,
CONSTRAINT blog_posts_pkey PRIMARY KEY (id),
CONSTRAINT blog_posts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.books (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
category text,
release_date text,
rating numeric,
is_free boolean DEFAULT false,
long_description text,
tags ARRAY,
image_prompt text,
image_url text,
purchase_links jsonb,
content text,
display_order smallint,
created_at timestamp with time zone NOT NULL DEFAULT now(),
description text,
CONSTRAINT books_pkey PRIMARY KEY (id)
);
CREATE TABLE public.bounties (
id uuid NOT NULL DEFAULT gen_random_uuid(),
bounty_id text NOT NULL UNIQUE,
title text NOT NULL,
description text NOT NULL,
reward_usd numeric NOT NULL CHECK (reward_usd IS NULL OR reward_usd >= 0::numeric),
xp_reward integer DEFAULT 0 CHECK (xp_reward >= 0),
difficulty text DEFAULT 'intermediate'::text CHECK (difficulty = ANY (ARRAY['beginner'::text, 'intermediate'::text, 'advanced'::text, 'expert'::text])),
skills ARRAY DEFAULT '{}'::text[],
applicant_count integer DEFAULT 0 CHECK (applicant_count >= 0),
time_estimate text,
posted_by uuid,
project text,
status text DEFAULT 'open'::text CHECK (status = ANY (ARRAY['open'::text, 'in_progress'::text, 'completed'::text, 'cancelled'::text])),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
claimed_by uuid,
claimed_at timestamp with time zone,
submission_url text,
submission_notes text,
submitted_at timestamp with time zone,
CONSTRAINT bounties_pkey PRIMARY KEY (id),
CONSTRAINT bounties_posted_by_fkey FOREIGN KEY (posted_by) REFERENCES public.user_profiles(id),
CONSTRAINT bounties_claimed_by_fkey FOREIGN KEY (claimed_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.bounty_applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
bounty_id uuid,
user_id uuid,
message text NOT NULL,
status text DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'accepted'::text, 'rejected'::text])),
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT bounty_applications_pkey PRIMARY KEY (id),
CONSTRAINT bounty_applications_bounty_id_fkey FOREIGN KEY (bounty_id) REFERENCES public.bounties(id),
CONSTRAINT bounty_applications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.bounty_claims (
id uuid NOT NULL DEFAULT gen_random_uuid(),
grid_member_id uuid NOT NULL,
bounty_id uuid NOT NULL,
status character varying NOT NULL DEFAULT 'claimed'::character varying CHECK (status::text = ANY (ARRAY['claimed'::character varying, 'submitted'::character varying, 'approved'::character varying, 'rejected'::character varying]::text[])),
claimed_at timestamp with time zone NOT NULL DEFAULT now(),
submitted_at timestamp with time zone,
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT bounty_claims_pkey PRIMARY KEY (id),
CONSTRAINT bounty_claims_grid_member_id_fkey FOREIGN KEY (grid_member_id) REFERENCES public.grid_members(id),
CONSTRAINT bounty_claims_bounty_id_fkey FOREIGN KEY (bounty_id) REFERENCES public.bounties(id)
);
CREATE TABLE public.changelogs (
id uuid NOT NULL DEFAULT gen_random_uuid(),
version_date date NOT NULL,
title text NOT NULL,
changes jsonb NOT NULL,
created_at timestamp with time zone DEFAULT now(),
site_name text,
site_id uuid,
tags jsonb,
CONSTRAINT changelogs_pkey PRIMARY KEY (id),
CONSTRAINT changelogs_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.collaboration_comments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
post_id uuid NOT NULL,
user_id uuid NOT NULL,
content text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT collaboration_comments_pkey PRIMARY KEY (id),
CONSTRAINT collaboration_comments_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.collaboration_posts(id),
CONSTRAINT collaboration_comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.collaboration_post_likes (
post_id uuid NOT NULL,
user_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT collaboration_post_likes_pkey PRIMARY KEY (post_id, user_id),
CONSTRAINT collaboration_post_likes_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.collaboration_posts(id),
CONSTRAINT collaboration_post_likes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.collaboration_posts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title text NOT NULL,
content text NOT NULL,
arm_affiliation text NOT NULL DEFAULT 'labs'::text,
created_by uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
is_published boolean DEFAULT true,
likes_count integer DEFAULT 0,
comments_count integer DEFAULT 0,
tags ARRAY DEFAULT ARRAY[]::text[],
category text,
CONSTRAINT collaboration_posts_pkey PRIMARY KEY (id),
CONSTRAINT collaboration_posts_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.collaboration_posts_authors (
id uuid NOT NULL DEFAULT gen_random_uuid(),
collaboration_post_id uuid NOT NULL,
user_id uuid NOT NULL,
role text NOT NULL DEFAULT 'contributor'::text,
joined_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT collaboration_posts_authors_pkey PRIMARY KEY (id),
CONSTRAINT collaboration_posts_authors_collaboration_post_id_fkey FOREIGN KEY (collaboration_post_id) REFERENCES public.collaboration_posts(id),
CONSTRAINT collaboration_posts_authors_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.command_cooldowns (
id integer NOT NULL DEFAULT nextval('command_cooldowns_id_seq'::regclass),
guild_id character varying NOT NULL,
user_id character varying NOT NULL,
command character varying NOT NULL,
expires_at timestamp with time zone NOT NULL,
CONSTRAINT command_cooldowns_pkey PRIMARY KEY (id)
);
CREATE TABLE public.command_logs (
id integer NOT NULL DEFAULT nextval('command_logs_id_seq'::regclass),
guild_id character varying NOT NULL,
user_id character varying NOT NULL,
command character varying NOT NULL,
options jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT command_logs_pkey PRIMARY KEY (id)
);
CREATE TABLE public.comments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
post_id uuid NOT NULL,
user_id uuid NOT NULL,
parent_comment_id uuid,
content text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT comments_pkey PRIMARY KEY (id),
CONSTRAINT comments_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id),
CONSTRAINT comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT comments_parent_comment_id_fkey FOREIGN KEY (parent_comment_id) REFERENCES public.comments(id)
);
CREATE TABLE public.community_comments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
post_id uuid NOT NULL,
user_id uuid NOT NULL,
content text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT community_comments_pkey PRIMARY KEY (id),
CONSTRAINT community_comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id),
CONSTRAINT community_comments_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.community_posts(id)
);
CREATE TABLE public.community_likes (
id integer NOT NULL DEFAULT nextval('community_likes_id_seq'::regclass),
post_id uuid NOT NULL,
liker_id uuid NOT NULL,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT community_likes_pkey PRIMARY KEY (id)
);
CREATE TABLE public.community_notifications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
actor_id uuid NOT NULL,
post_id uuid,
collaboration_post_id uuid,
notification_type text NOT NULL,
title text NOT NULL,
description text,
read boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT community_notifications_pkey PRIMARY KEY (id),
CONSTRAINT community_notifications_actor_id_fkey FOREIGN KEY (actor_id) REFERENCES public.user_profiles(id),
CONSTRAINT community_notifications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id),
CONSTRAINT community_notifications_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.community_posts(id),
CONSTRAINT community_notifications_collaboration_post_id_fkey FOREIGN KEY (collaboration_post_id) REFERENCES public.collaboration_posts(id)
);
CREATE TABLE public.community_post_likes (
post_id uuid NOT NULL,
user_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT community_post_likes_pkey PRIMARY KEY (post_id, user_id),
CONSTRAINT community_post_likes_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.community_posts(id),
CONSTRAINT community_post_likes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.community_posts (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
author_id uuid,
title text NOT NULL,
content text NOT NULL,
category text,
tags ARRAY,
likes_count integer DEFAULT 0,
comments_count integer DEFAULT 0,
is_published boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
arm_affiliation text DEFAULT 'labs'::text CHECK (arm_affiliation = ANY (ARRAY['labs'::text, 'gameforge'::text, 'corp'::text, 'foundation'::text, 'devlink'::text, 'nexus'::text, 'staff'::text])),
CONSTRAINT community_posts_pkey PRIMARY KEY (id),
CONSTRAINT community_posts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.company_documents (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
description text,
file_url text,
category text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT company_documents_pkey PRIMARY KEY (id),
CONSTRAINT company_documents_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.connections (
id text NOT NULL DEFAULT (gen_random_uuid())::text,
from text NOT NULL,
to text NOT NULL,
directed boolean DEFAULT true,
status text CHECK (status = ANY (ARRAY['healthy'::text, 'warning'::text, 'error'::text])),
bandwidth numeric,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT connections_pkey PRIMARY KEY (id),
CONSTRAINT connections_from_fkey FOREIGN KEY (from) REFERENCES public.nodes(id),
CONSTRAINT connections_to_fkey FOREIGN KEY (to) REFERENCES public.nodes(id)
);
CREATE TABLE public.consultancy_services (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title text NOT NULL UNIQUE,
price numeric NOT NULL,
price_description text,
description text,
features ARRAY NOT NULL,
is_featured boolean NOT NULL DEFAULT false,
display_order integer,
created_at timestamp with time zone NOT NULL DEFAULT now(),
category text,
long_description text,
CONSTRAINT consultancy_services_pkey PRIMARY KEY (id)
);
CREATE TABLE public.contact_submissions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL,
email text NOT NULL,
subject text,
message text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT contact_submissions_pkey PRIMARY KEY (id)
);
CREATE TABLE public.contracts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
site_id uuid NOT NULL,
title text NOT NULL,
status text,
document_url text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT contracts_pkey PRIMARY KEY (id),
CONSTRAINT contracts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT contracts_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.conversations (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
participant_ids ARRAY NOT NULL,
last_message_at timestamp with time zone NOT NULL DEFAULT now(),
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT conversations_pkey PRIMARY KEY (id)
);
CREATE TABLE public.corp_activity_log (
id uuid NOT NULL DEFAULT gen_random_uuid(),
company_id uuid NOT NULL,
actor_id uuid NOT NULL,
action text NOT NULL,
resource_type text,
resource_id uuid,
metadata jsonb,
ip_address text,
user_agent text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_activity_log_pkey PRIMARY KEY (id),
CONSTRAINT corp_activity_log_company_id_fkey FOREIGN KEY (company_id) REFERENCES public.user_profiles(id),
CONSTRAINT corp_activity_log_actor_id_fkey FOREIGN KEY (actor_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.corp_contract_milestones (
id uuid NOT NULL DEFAULT gen_random_uuid(),
contract_id uuid NOT NULL,
milestone_name text NOT NULL,
description text,
due_date date,
deliverables text,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'in_progress'::text, 'completed'::text, 'blocked'::text])),
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_contract_milestones_pkey PRIMARY KEY (id),
CONSTRAINT corp_contract_milestones_contract_id_fkey FOREIGN KEY (contract_id) REFERENCES public.corp_contracts(id)
);
CREATE TABLE public.corp_contracts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
client_company_id uuid NOT NULL,
vendor_id uuid NOT NULL,
contract_name text NOT NULL,
contract_type text NOT NULL CHECK (contract_type = ANY (ARRAY['service'::text, 'retainer'::text, 'license'::text, 'nda'::text, 'other'::text])),
description text,
start_date date,
end_date date,
contract_value numeric,
status text NOT NULL DEFAULT 'draft'::text CHECK (status = ANY (ARRAY['draft'::text, 'pending_approval'::text, 'signed'::text, 'active'::text, 'completed'::text, 'terminated'::text, 'archived'::text])),
document_url text,
signed_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_contracts_pkey PRIMARY KEY (id),
CONSTRAINT corp_contracts_client_company_id_fkey FOREIGN KEY (client_company_id) REFERENCES public.user_profiles(id),
CONSTRAINT corp_contracts_vendor_id_fkey FOREIGN KEY (vendor_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.corp_financial_summary (
id uuid NOT NULL DEFAULT gen_random_uuid(),
company_id uuid NOT NULL UNIQUE,
period_start date NOT NULL,
period_end date NOT NULL,
total_invoiced numeric DEFAULT 0,
total_paid numeric DEFAULT 0,
total_overdue numeric DEFAULT 0,
active_contracts integer DEFAULT 0,
completed_contracts integer DEFAULT 0,
total_contract_value numeric DEFAULT 0,
average_payment_days integer,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_financial_summary_pkey PRIMARY KEY (id),
CONSTRAINT corp_financial_summary_company_id_fkey FOREIGN KEY (company_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.corp_invoice_items (
id uuid NOT NULL DEFAULT gen_random_uuid(),
invoice_id uuid NOT NULL,
description text NOT NULL,
quantity numeric NOT NULL DEFAULT 1,
unit_price numeric NOT NULL,
amount numeric NOT NULL,
category text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_invoice_items_pkey PRIMARY KEY (id),
CONSTRAINT corp_invoice_items_invoice_id_fkey FOREIGN KEY (invoice_id) REFERENCES public.corp_invoices(id)
);
CREATE TABLE public.corp_invoice_payments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
invoice_id uuid NOT NULL,
amount_paid numeric NOT NULL,
payment_date date NOT NULL DEFAULT now(),
payment_method text NOT NULL DEFAULT 'bank_transfer'::text,
reference_number text,
notes text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_invoice_payments_pkey PRIMARY KEY (id),
CONSTRAINT corp_invoice_payments_invoice_id_fkey FOREIGN KEY (invoice_id) REFERENCES public.corp_invoices(id)
);
CREATE TABLE public.corp_invoices (
id uuid NOT NULL DEFAULT gen_random_uuid(),
client_company_id uuid NOT NULL,
invoice_number text NOT NULL UNIQUE,
project_id uuid,
description text,
issue_date date NOT NULL DEFAULT now(),
due_date date NOT NULL,
amount_due numeric NOT NULL,
amount_paid numeric NOT NULL DEFAULT 0,
status text NOT NULL DEFAULT 'draft'::text CHECK (status = ANY (ARRAY['draft'::text, 'sent'::text, 'viewed'::text, 'paid'::text, 'overdue'::text, 'cancelled'::text])),
currency text NOT NULL DEFAULT 'USD'::text,
notes text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_invoices_pkey PRIMARY KEY (id),
CONSTRAINT corp_invoices_client_company_id_fkey FOREIGN KEY (client_company_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.corp_projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
client_company_id uuid NOT NULL,
project_name text NOT NULL,
description text,
status text NOT NULL DEFAULT 'active'::text CHECK (status = ANY (ARRAY['planning'::text, 'active'::text, 'paused'::text, 'completed'::text, 'archived'::text])),
budget numeric,
spent numeric DEFAULT 0,
start_date date,
end_date date,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_projects_pkey PRIMARY KEY (id),
CONSTRAINT corp_projects_client_company_id_fkey FOREIGN KEY (client_company_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.corp_team_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
company_id uuid NOT NULL,
user_id uuid NOT NULL,
role text NOT NULL CHECK (role = ANY (ARRAY['owner'::text, 'admin'::text, 'member'::text, 'viewer'::text])),
email text NOT NULL,
full_name text,
job_title text,
status text NOT NULL DEFAULT 'active'::text CHECK (status = ANY (ARRAY['active'::text, 'inactive'::text, 'pending_invite'::text])),
invited_at timestamp with time zone,
joined_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corp_team_members_pkey PRIMARY KEY (id),
CONSTRAINT corp_team_members_company_id_fkey FOREIGN KEY (company_id) REFERENCES public.user_profiles(id),
CONSTRAINT corp_team_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.corporate_career_applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
job_title text NOT NULL,
full_name text NOT NULL,
email text NOT NULL,
portfolio_url text,
cover_letter text,
submitted_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corporate_career_applications_pkey PRIMARY KEY (id)
);
CREATE TABLE public.corporate_career_interest (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
full_name text NOT NULL,
email text NOT NULL,
area_of_interest text,
linkedin_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corporate_career_interest_pkey PRIMARY KEY (id),
CONSTRAINT corporate_career_interest_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.corporate_investor_docs (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
description text,
file_url text NOT NULL,
document_type text,
published_date date,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT corporate_investor_docs_pkey PRIMARY KEY (id),
CONSTRAINT corporate_investor_docs_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.corporate_job_postings (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
department text,
location text,
job_type text,
description text NOT NULL,
is_active boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT corporate_job_postings_pkey PRIMARY KEY (id),
CONSTRAINT corporate_job_postings_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.corporate_leadership (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
profile_id uuid UNIQUE,
name text NOT NULL,
title text NOT NULL,
bio text,
image_url text,
social_links jsonb,
display_order integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT corporate_leadership_pkey PRIMARY KEY (id),
CONSTRAINT corporate_leadership_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id),
CONSTRAINT corporate_leadership_profile_id_fkey FOREIGN KEY (profile_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.corporate_news (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
slug text NOT NULL UNIQUE,
title text NOT NULL,
excerpt text,
content text NOT NULL,
image_url text,
author_id uuid,
published_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
tags ARRAY,
CONSTRAINT corporate_news_pkey PRIMARY KEY (id),
CONSTRAINT corporate_news_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id),
CONSTRAINT corporate_news_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.corporate_whitepapers (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
description text,
file_url text NOT NULL,
image_url text,
published_date date,
tags ARRAY,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT corporate_whitepapers_pkey PRIMARY KEY (id),
CONSTRAINT corporate_whitepapers_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.creations (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
category text,
description text,
tags ARRAY,
image_prompt text,
image_url text,
links jsonb,
display_order smallint,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT creations_pkey PRIMARY KEY (id)
);
CREATE TABLE public.creator_assets (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
experience_id uuid,
name text NOT NULL,
description text,
type text NOT NULL,
file_url text NOT NULL,
thumbnail_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT creator_assets_pkey PRIMARY KEY (id),
CONSTRAINT creator_assets_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT creator_assets_experience_id_fkey FOREIGN KEY (experience_id) REFERENCES public.experiences(id)
);
CREATE TABLE public.creator_dashboard (
user_id uuid NOT NULL,
total_projects integer DEFAULT 0,
total_assets integer DEFAULT 0,
total_experiences integer DEFAULT 0,
last_synced_at timestamp with time zone,
CONSTRAINT creator_dashboard_pkey PRIMARY KEY (user_id),
CONSTRAINT creator_dashboard_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.customers (
id uuid NOT NULL,
stripe_customer_id text,
CONSTRAINT customers_pkey PRIMARY KEY (id),
CONSTRAINT customers_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id)
);
CREATE TABLE public.defi_positions (
id bigint NOT NULL DEFAULT nextval('defi_positions_id_seq'::regclass),
user_id uuid NOT NULL,
wallet_address text NOT NULL,
chain_id integer NOT NULL,
protocol_name text NOT NULL,
position_type text NOT NULL,
token_address text,
token_symbol text,
amount numeric NOT NULL DEFAULT 0,
amount_usd numeric DEFAULT 0,
apy numeric DEFAULT 0,
rewards_earned numeric DEFAULT 0,
rewards_usd numeric DEFAULT 0,
metadata jsonb DEFAULT '{}'::jsonb,
last_synced_at timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT defi_positions_pkey PRIMARY KEY (id),
CONSTRAINT defi_positions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.designer_waitlist (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid UNIQUE,
email text NOT NULL UNIQUE,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT designer_waitlist_pkey PRIMARY KEY (id),
CONSTRAINT designer_waitlist_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.developer_waitlist (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid UNIQUE,
email text NOT NULL UNIQUE,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT developer_waitlist_pkey PRIMARY KEY (id),
CONSTRAINT developer_waitlist_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.devhub_collaboration_sessions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid,
user_id uuid,
status text DEFAULT 'active'::text,
created_at timestamp with time zone DEFAULT now(),
ended_at timestamp with time zone,
site_id uuid,
CONSTRAINT devhub_collaboration_sessions_pkey PRIMARY KEY (id),
CONSTRAINT devhub_collaboration_sessions_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id),
CONSTRAINT devhub_collaboration_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT devhub_collaboration_sessions_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.devlink_achievements (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
achievement_type text NOT NULL,
title text,
description text,
xp_earned integer DEFAULT 0,
badge_url text,
unlocked_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_achievements_pkey PRIMARY KEY (id),
CONSTRAINT devlink_achievements_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_applications (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
job_id uuid,
applicant_id uuid,
cover_letter text,
proposed_rate text,
estimated_timeline text,
availability_start_date timestamp with time zone,
portfolio_links ARRAY DEFAULT '{}'::text[],
status text DEFAULT 'pending'::text,
reviewed boolean DEFAULT false,
review_text text,
rating integer,
categories jsonb DEFAULT '{}'::jsonb,
would_work_again boolean,
company_response text,
company_response_date timestamp with time zone,
created_date timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_applications_pkey PRIMARY KEY (id),
CONSTRAINT devlink_applications_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.devlink_jobs(id),
CONSTRAINT devlink_applications_applicant_id_fkey FOREIGN KEY (applicant_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_certifications (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
skill_name text NOT NULL,
certification_level text,
score integer,
percentile integer,
certificate_url text,
verification_code text UNIQUE,
issued_date timestamp with time zone DEFAULT now(),
expiry_date timestamp with time zone,
status text DEFAULT 'active'::text,
verified boolean DEFAULT false,
CONSTRAINT devlink_certifications_pkey PRIMARY KEY (id),
CONSTRAINT devlink_certifications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_collab_messages (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
room_id uuid,
sender_id uuid,
message_type text DEFAULT 'text'::text,
content text,
file_url text,
attachments jsonb DEFAULT '[]'::jsonb,
read boolean DEFAULT false,
read_at timestamp with time zone,
created_date timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_collab_messages_pkey PRIMARY KEY (id),
CONSTRAINT devlink_collab_messages_room_id_fkey FOREIGN KEY (room_id) REFERENCES public.devlink_collab_rooms(id),
CONSTRAINT devlink_collab_messages_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_collab_rooms (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
room_name text NOT NULL,
room_type text DEFAULT 'general'::text,
creator_id uuid,
participant_ids ARRAY DEFAULT '{}'::uuid[],
related_job_id uuid,
status text DEFAULT 'active'::text,
started_at timestamp with time zone DEFAULT now(),
code_snippets jsonb DEFAULT '[]'::jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_collab_rooms_pkey PRIMARY KEY (id),
CONSTRAINT devlink_collab_rooms_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_collab_rooms_related_job_id_fkey FOREIGN KEY (related_job_id) REFERENCES public.devlink_jobs(id)
);
CREATE TABLE public.devlink_collab_tasks (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
room_id uuid,
title text NOT NULL,
description text,
priority text DEFAULT 'medium'::text,
due_date timestamp with time zone,
estimated_hours integer,
created_by uuid,
assigned_to uuid,
status text DEFAULT 'pending'::text,
blocked_by ARRAY,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_collab_tasks_pkey PRIMARY KEY (id),
CONSTRAINT devlink_collab_tasks_room_id_fkey FOREIGN KEY (room_id) REFERENCES public.devlink_collab_rooms(id),
CONSTRAINT devlink_collab_tasks_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_collab_tasks_assigned_to_fkey FOREIGN KEY (assigned_to) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_company_profiles (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
company_name text NOT NULL,
tagline text,
description text,
industry text,
company_size text,
founded_year integer,
location text,
website_url text,
logo_url text,
banner_url text,
brand_colors jsonb DEFAULT '{}'::jsonb,
social_links jsonb DEFAULT '{}'::jsonb,
culture_values ARRAY DEFAULT '{}'::text[],
perks_benefits ARRAY DEFAULT '{}'::text[],
tech_stack ARRAY DEFAULT '{}'::text[],
current_projects jsonb DEFAULT '[]'::jsonb,
verified boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_company_profiles_pkey PRIMARY KEY (id),
CONSTRAINT devlink_company_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_daily_challenges (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
date date DEFAULT CURRENT_DATE,
challenge_type text,
title text,
description text,
xp_reward integer DEFAULT 0,
target_count integer DEFAULT 1,
current_progress integer DEFAULT 0,
completed boolean DEFAULT false,
completed_at timestamp with time zone,
streak_bonus integer DEFAULT 0,
bonus_xp integer DEFAULT 0,
CONSTRAINT devlink_daily_challenges_pkey PRIMARY KEY (id),
CONSTRAINT devlink_daily_challenges_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_endorsements (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
endorsee_id uuid,
endorser_id uuid,
skill_name text NOT NULL,
relationship text,
endorsement_strength integer DEFAULT 1,
created_date timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_endorsements_pkey PRIMARY KEY (id),
CONSTRAINT devlink_endorsements_endorsee_id_fkey FOREIGN KEY (endorsee_id) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_endorsements_endorser_id_fkey FOREIGN KEY (endorser_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_escrow_transactions (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
job_id uuid,
developer_id uuid,
employer_id uuid,
total_amount numeric,
funded_amount numeric DEFAULT 0,
released_amount numeric DEFAULT 0,
currency text DEFAULT 'USD'::text,
status text DEFAULT 'pending'::text,
funded_date timestamp with time zone,
created_date timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_escrow_transactions_pkey PRIMARY KEY (id),
CONSTRAINT devlink_escrow_transactions_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.devlink_jobs(id),
CONSTRAINT devlink_escrow_transactions_developer_id_fkey FOREIGN KEY (developer_id) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_escrow_transactions_employer_id_fkey FOREIGN KEY (employer_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_forum_posts (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
author_id uuid,
title text NOT NULL,
content text,
category text,
tags ARRAY DEFAULT '{}'::text[],
upvotes integer DEFAULT 0,
downvotes integer DEFAULT 0,
view_count integer DEFAULT 0,
reply_count integer DEFAULT 0,
pinned boolean DEFAULT false,
locked boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_forum_posts_pkey PRIMARY KEY (id),
CONSTRAINT devlink_forum_posts_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_forum_replies (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
post_id uuid,
author_id uuid,
content text NOT NULL,
upvotes integer DEFAULT 0,
downvotes integer DEFAULT 0,
is_solution boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_forum_replies_pkey PRIMARY KEY (id),
CONSTRAINT devlink_forum_replies_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.devlink_forum_posts(id),
CONSTRAINT devlink_forum_replies_author_id_fkey FOREIGN KEY (author_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_jobs (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
title text NOT NULL,
description text,
required_roles ARRAY DEFAULT '{}'::text[],
required_skills ARRAY DEFAULT '{}'::text[],
experience_level text,
programming_languages ARRAY DEFAULT '{}'::text[],
frameworks ARRAY DEFAULT '{}'::text[],
payment_type text DEFAULT 'fixed'::text,
budget_range jsonb DEFAULT '{}'::jsonb,
salary_min numeric,
salary_max numeric,
timeline text,
remote_type text DEFAULT 'remote'::text,
preferred_locations ARRAY DEFAULT '{}'::text[],
preferred_timezones ARRAY DEFAULT '{}'::text[],
company_size text,
status text DEFAULT 'open'::text,
application_deadline timestamp with time zone,
application_count integer DEFAULT 0,
view_count integer DEFAULT 0,
employer_id uuid,
company_name text,
company_logo text,
metadata jsonb DEFAULT '{}'::jsonb,
created_date timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_jobs_pkey PRIMARY KEY (id),
CONSTRAINT devlink_jobs_employer_id_fkey FOREIGN KEY (employer_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_learning_paths (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
path_name text NOT NULL,
target_role text,
current_level text,
target_level text,
skill_gaps jsonb DEFAULT '[]'::jsonb,
recommended_resources jsonb DEFAULT '[]'::jsonb,
suggested_projects jsonb DEFAULT '[]'::jsonb,
milestones jsonb DEFAULT '[]'::jsonb,
estimated_duration_weeks integer,
progress_percentage integer DEFAULT 0,
ai_recommendations jsonb DEFAULT '{}'::jsonb,
last_updated timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_learning_paths_pkey PRIMARY KEY (id),
CONSTRAINT devlink_learning_paths_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_messages (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
sender_id uuid,
receiver_id uuid,
content text NOT NULL,
read boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_messages_pkey PRIMARY KEY (id),
CONSTRAINT devlink_messages_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_messages_receiver_id_fkey FOREIGN KEY (receiver_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_milestones (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
job_id uuid,
escrow_id uuid,
title text NOT NULL,
description text,
amount numeric,
status text DEFAULT 'pending'::text,
submission_notes text,
submitted_date timestamp with time zone,
approved_date timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_milestones_pkey PRIMARY KEY (id),
CONSTRAINT devlink_milestones_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.devlink_jobs(id),
CONSTRAINT devlink_milestones_escrow_id_fkey FOREIGN KEY (escrow_id) REFERENCES public.devlink_escrow_transactions(id)
);
CREATE TABLE public.devlink_notifications (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
type text DEFAULT 'info'::text,
title text NOT NULL,
message text,
link text,
metadata jsonb DEFAULT '{}'::jsonb,
read boolean DEFAULT false,
created_date timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_notifications_pkey PRIMARY KEY (id),
CONSTRAINT devlink_notifications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_portfolios (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
title text NOT NULL,
description text,
project_type text,
technologies ARRAY DEFAULT '{}'::text[],
images ARRAY DEFAULT '{}'::text[],
video_url text,
live_url text,
github_url text,
roblox_game_id text,
featured boolean DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_portfolios_pkey PRIMARY KEY (id),
CONSTRAINT devlink_portfolios_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_profiles (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
email text UNIQUE,
full_name text,
avatar_url text,
roblox_avatar_url text,
banner_url text,
bio text,
developer_roles ARRAY DEFAULT '{}'::text[],
skills ARRAY DEFAULT '{}'::text[],
experience_level text,
years_of_experience integer DEFAULT 0,
portfolio_links ARRAY DEFAULT '{}'::text[],
work_status text DEFAULT 'available'::text,
payment_preferences jsonb DEFAULT '{}'::jsonb,
hourly_rate numeric,
roblox_username text,
roblox_user_id text,
roblox_verified boolean DEFAULT false,
roblox_data jsonb DEFAULT '{}'::jsonb,
roblox_reputation_score integer DEFAULT 0,
roblox_reputation_tier text,
use_roblox_display_name boolean DEFAULT false,
use_roblox_avatar boolean DEFAULT false,
github_username text,
github_verified boolean DEFAULT false,
devforum_username text,
devforum_verified boolean DEFAULT false,
forum_reputation integer DEFAULT 0,
xp_points integer DEFAULT 0,
level integer DEFAULT 1,
community_points integer DEFAULT 0,
streak_days integer DEFAULT 0,
user_type text DEFAULT 'developer'::text,
company_name text,
company_id uuid,
platform_roles ARRAY DEFAULT '{}'::text[],
avatar_customization jsonb DEFAULT '{}'::jsonb,
admin boolean DEFAULT false,
is_premium boolean DEFAULT false,
stripe_account_id text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_profiles_pkey PRIMARY KEY (id)
);
CREATE TABLE public.devlink_reviews (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
job_id uuid,
reviewer_id uuid,
reviewee_id uuid,
rating integer CHECK (rating >= 1 AND rating <= 5),
review_text text,
review_type text,
categories jsonb DEFAULT '{}'::jsonb,
would_work_again boolean,
created_date timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_reviews_pkey PRIMARY KEY (id),
CONSTRAINT devlink_reviews_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.devlink_jobs(id),
CONSTRAINT devlink_reviews_reviewer_id_fkey FOREIGN KEY (reviewer_id) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_reviews_reviewee_id_fkey FOREIGN KEY (reviewee_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_saved_jobs (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
job_id uuid,
priority text DEFAULT 'medium'::text,
notes text,
created_date timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_saved_jobs_pkey PRIMARY KEY (id),
CONSTRAINT devlink_saved_jobs_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id),
CONSTRAINT devlink_saved_jobs_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.devlink_jobs(id)
);
CREATE TABLE public.devlink_skill_assessments (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
skill_name text NOT NULL,
assessment_type text,
score integer,
questions_answered integer DEFAULT 0,
questions_correct integer DEFAULT 0,
time_taken_minutes integer,
time_limit_minutes integer,
passed boolean DEFAULT false,
passing_score integer,
anti_cheat_flags jsonb DEFAULT '[]'::jsonb,
proctoring_enabled boolean DEFAULT false,
questions jsonb DEFAULT '[]'::jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_skill_assessments_pkey PRIMARY KEY (id),
CONSTRAINT devlink_skill_assessments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_studios (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
company_profile_id uuid,
studio_name text,
description text,
roblox_group_id text,
roblox_group_data jsonb DEFAULT '{}'::jsonb,
user_role_in_group text,
user_rank_in_group integer,
verified boolean DEFAULT false,
status text DEFAULT 'active'::text,
member_count integer DEFAULT 0,
banner_url text,
total_games integer DEFAULT 0,
total_visits bigint DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_studios_pkey PRIMARY KEY (id),
CONSTRAINT devlink_studios_company_profile_id_fkey FOREIGN KEY (company_profile_id) REFERENCES public.devlink_company_profiles(id)
);
CREATE TABLE public.devlink_teams (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
name text NOT NULL,
description text,
owner_id uuid,
member_ids ARRAY DEFAULT '{}'::uuid[],
logo_url text,
status text DEFAULT 'active'::text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_teams_pkey PRIMARY KEY (id),
CONSTRAINT devlink_teams_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public.devlink_profiles(id)
);
CREATE TABLE public.devlink_waitlist_signups (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
email text NOT NULL UNIQUE,
name text,
user_type text DEFAULT 'developer'::text,
referral_source text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT devlink_waitlist_signups_pkey PRIMARY KEY (id)
);
CREATE TABLE public.discord_checkins (
id uuid NOT NULL DEFAULT gen_random_uuid(),
discord_user_id character varying NOT NULL,
user_id uuid,
checkin_type character varying NOT NULL,
message text,
channel_id character varying,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT discord_checkins_pkey PRIMARY KEY (id),
CONSTRAINT discord_checkins_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.discord_config (
key text NOT NULL,
value jsonb NOT NULL,
updated_at timestamp without time zone DEFAULT now(),
CONSTRAINT discord_config_pkey PRIMARY KEY (key)
);
CREATE TABLE public.discord_linking_sessions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
session_token text NOT NULL UNIQUE,
expires_at timestamp without time zone NOT NULL,
created_at timestamp without time zone DEFAULT now(),
CONSTRAINT discord_linking_sessions_pkey PRIMARY KEY (id),
CONSTRAINT discord_linking_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.discord_links (
id uuid NOT NULL DEFAULT gen_random_uuid(),
discord_id text NOT NULL UNIQUE,
user_id uuid NOT NULL,
primary_arm text DEFAULT 'labs'::text CHECK (primary_arm = ANY (ARRAY['labs'::text, 'gameforge'::text, 'corp'::text, 'foundation'::text, 'devlink'::text])),
linked_at timestamp without time zone DEFAULT now(),
updated_at timestamp without time zone DEFAULT now(),
CONSTRAINT discord_links_pkey PRIMARY KEY (id),
CONSTRAINT discord_links_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.discord_post_webhooks (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
guild_id text NOT NULL,
channel_id text NOT NULL,
webhook_url text NOT NULL,
webhook_id text NOT NULL,
arm_affiliation text NOT NULL,
auto_post boolean DEFAULT true,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT discord_post_webhooks_pkey PRIMARY KEY (id),
CONSTRAINT discord_post_webhooks_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.discord_role_mappings (
id uuid NOT NULL DEFAULT gen_random_uuid(),
arm text NOT NULL CHECK (arm = ANY (ARRAY['labs'::text, 'gameforge'::text, 'corp'::text, 'foundation'::text, 'devlink'::text])),
user_type text NOT NULL CHECK (user_type = ANY (ARRAY['game_developer'::text, 'community_member'::text, 'pro_supporter'::text, 'staff'::text, 'creator'::text])),
discord_role_name text NOT NULL,
discord_role_id text,
server_id text,
created_at timestamp without time zone DEFAULT now(),
updated_at timestamp without time zone DEFAULT now(),
CONSTRAINT discord_role_mappings_pkey PRIMARY KEY (id)
);
CREATE TABLE public.discord_user_roles (
id uuid NOT NULL DEFAULT gen_random_uuid(),
discord_id text NOT NULL,
server_id text NOT NULL,
role_id text NOT NULL,
role_name text NOT NULL,
assigned_at timestamp without time zone DEFAULT now(),
last_verified timestamp without time zone,
CONSTRAINT discord_user_roles_pkey PRIMARY KEY (id)
);
CREATE TABLE public.discord_verifications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
discord_id text NOT NULL,
verification_code text NOT NULL UNIQUE,
expires_at timestamp without time zone NOT NULL,
created_at timestamp without time zone DEFAULT now(),
CONSTRAINT discord_verifications_pkey PRIMARY KEY (id)
);
CREATE TABLE public.doc_edits (
id integer NOT NULL DEFAULT nextval('doc_edits_id_seq'::regclass),
space_id text NOT NULL,
page_id text NOT NULL,
title text NOT NULL,
content text NOT NULL,
updated_at timestamp with time zone DEFAULT now(),
updated_by text,
CONSTRAINT doc_edits_pkey PRIMARY KEY (id)
);
CREATE TABLE public.employee_data (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
site_id uuid NOT NULL,
personal_details jsonb,
job_history jsonb,
benefits_info jsonb,
compliance_docs jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT employee_data_pkey PRIMARY KEY (id),
CONSTRAINT employee_data_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT employee_data_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.employee_edits (
id integer NOT NULL DEFAULT nextval('employee_edits_id_seq'::regclass),
employee_id text NOT NULL UNIQUE,
data jsonb NOT NULL,
updated_at timestamp with time zone DEFAULT now(),
updated_by text,
CONSTRAINT employee_edits_pkey PRIMARY KEY (id)
);
CREATE TABLE public.endorsements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
endorser_id uuid NOT NULL,
endorsed_id uuid NOT NULL,
skill text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT endorsements_pkey PRIMARY KEY (id),
CONSTRAINT endorsements_endorser_id_fkey FOREIGN KEY (endorser_id) REFERENCES auth.users(id),
CONSTRAINT endorsements_endorsed_id_fkey FOREIGN KEY (endorsed_id) REFERENCES auth.users(id)
);
CREATE TABLE public.ethos_artist_profiles (
user_id uuid NOT NULL,
skills ARRAY NOT NULL DEFAULT '{}'::text[],
for_hire boolean NOT NULL DEFAULT true,
bio text,
portfolio_url text,
sample_price_track numeric,
sample_price_sfx numeric,
sample_price_score numeric,
turnaround_days integer,
verified boolean NOT NULL DEFAULT false,
total_downloads integer NOT NULL DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
price_list jsonb DEFAULT '{"day_rate": null, "sfx_pack": null, "full_score": null, "track_custom": null, "contact_for_quote": false}'::jsonb,
ecosystem_license_accepted boolean NOT NULL DEFAULT false,
ecosystem_license_accepted_at timestamp with time zone,
CONSTRAINT ethos_artist_profiles_pkey PRIMARY KEY (user_id),
CONSTRAINT ethos_artist_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_ecosystem_licenses (
id uuid NOT NULL DEFAULT gen_random_uuid(),
track_id uuid NOT NULL,
artist_id uuid NOT NULL,
accepted_at timestamp with time zone NOT NULL DEFAULT now(),
agreement_version text NOT NULL DEFAULT '1.0'::text,
agreement_text_hash text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT ethos_ecosystem_licenses_pkey PRIMARY KEY (id),
CONSTRAINT ethos_ecosystem_licenses_track_id_fkey FOREIGN KEY (track_id) REFERENCES public.ethos_tracks(id),
CONSTRAINT ethos_ecosystem_licenses_artist_id_fkey FOREIGN KEY (artist_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_guild_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
role text NOT NULL DEFAULT 'member'::text CHECK (role = ANY (ARRAY['member'::text, 'curator'::text, 'admin'::text])),
joined_at timestamp with time zone NOT NULL DEFAULT now(),
bio text,
CONSTRAINT ethos_guild_members_pkey PRIMARY KEY (id),
CONSTRAINT ethos_guild_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_licensing_agreements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
track_id uuid NOT NULL,
licensee_id uuid NOT NULL,
license_type text NOT NULL CHECK (license_type = ANY (ARRAY['commercial_one_time'::text, 'commercial_exclusive'::text, 'broadcast'::text])),
agreement_url text,
approved boolean NOT NULL DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
expires_at timestamp with time zone,
CONSTRAINT ethos_licensing_agreements_pkey PRIMARY KEY (id),
CONSTRAINT ethos_licensing_agreements_track_id_fkey FOREIGN KEY (track_id) REFERENCES public.ethos_tracks(id),
CONSTRAINT ethos_licensing_agreements_licensee_id_fkey FOREIGN KEY (licensee_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_service_requests (
id uuid NOT NULL DEFAULT gen_random_uuid(),
artist_id uuid NOT NULL,
requester_id uuid NOT NULL,
service_type text NOT NULL CHECK (service_type = ANY (ARRAY['track_custom'::text, 'sfx_pack'::text, 'full_score'::text, 'day_rate'::text, 'contact_for_quote'::text])),
description text NOT NULL,
budget numeric,
deadline timestamp with time zone,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'accepted'::text, 'declined'::text, 'in_progress'::text, 'completed'::text, 'cancelled'::text])),
notes text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT ethos_service_requests_pkey PRIMARY KEY (id),
CONSTRAINT ethos_service_requests_artist_id_fkey FOREIGN KEY (artist_id) REFERENCES public.user_profiles(id),
CONSTRAINT ethos_service_requests_requester_id_fkey FOREIGN KEY (requester_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_tracks (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
title text NOT NULL,
description text,
file_url text NOT NULL,
duration_seconds integer,
genre ARRAY,
license_type text NOT NULL DEFAULT 'ecosystem'::text CHECK (license_type = ANY (ARRAY['ecosystem'::text, 'commercial_sample'::text])),
bpm integer,
is_published boolean NOT NULL DEFAULT true,
download_count integer NOT NULL DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT ethos_tracks_pkey PRIMARY KEY (id),
CONSTRAINT ethos_tracks_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_verification_audit_log (
id uuid NOT NULL DEFAULT gen_random_uuid(),
request_id uuid NOT NULL,
action text NOT NULL CHECK (action = ANY (ARRAY['submitted'::text, 'approved'::text, 'rejected'::text, 'resubmitted'::text])),
actor_id uuid,
notes text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT ethos_verification_audit_log_pkey PRIMARY KEY (id),
CONSTRAINT ethos_verification_audit_log_request_id_fkey FOREIGN KEY (request_id) REFERENCES public.ethos_verification_requests(id),
CONSTRAINT ethos_verification_audit_log_actor_id_fkey FOREIGN KEY (actor_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.ethos_verification_requests (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
artist_profile_id uuid NOT NULL,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'approved'::text, 'rejected'::text])),
submitted_at timestamp with time zone NOT NULL DEFAULT now(),
reviewed_at timestamp with time zone,
reviewed_by uuid,
rejection_reason text,
submission_notes text,
portfolio_links ARRAY,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT ethos_verification_requests_pkey PRIMARY KEY (id),
CONSTRAINT ethos_verification_requests_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id),
CONSTRAINT ethos_verification_requests_artist_profile_id_fkey FOREIGN KEY (artist_profile_id) REFERENCES public.ethos_artist_profiles(user_id),
CONSTRAINT ethos_verification_requests_reviewed_by_fkey FOREIGN KEY (reviewed_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.experiences (
id uuid NOT NULL DEFAULT gen_random_uuid(),
creator_user_id uuid,
title text NOT NULL,
description text,
thumbnail_url text,
banner_url text,
version text DEFAULT '1.0.0'::text,
status text DEFAULT 'private'::text CHECK (status = ANY (ARRAY['public'::text, 'private'::text, 'under_review'::text])),
tags ARRAY,
player_count integer DEFAULT 0,
max_players integer DEFAULT 10,
server_size integer DEFAULT 10,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
slug text,
is_published boolean DEFAULT false,
creator_group_id uuid,
roblox_place_id bigint,
CONSTRAINT experiences_pkey PRIMARY KEY (id),
CONSTRAINT experiences_creator_id_fkey FOREIGN KEY (creator_user_id) REFERENCES public.profiles(id),
CONSTRAINT experiences_creator_group_id_fkey FOREIGN KEY (creator_group_id) REFERENCES public.groups(id)
);
CREATE TABLE public.fan_art (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
user_id uuid,
title text NOT NULL,
description text,
image_url text NOT NULL,
is_approved boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
is_featured boolean NOT NULL DEFAULT false,
username text,
CONSTRAINT fan_art_pkey PRIMARY KEY (id)
);
CREATE TABLE public.faqs (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
question text NOT NULL,
answer text NOT NULL,
category text,
display_order integer,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT faqs_pkey PRIMARY KEY (id),
CONSTRAINT fk_site FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.featured_studios (
id bigint NOT NULL DEFAULT nextval('featured_studios_id_seq'::regclass),
name text NOT NULL UNIQUE,
tagline text,
metrics text,
specialties ARRAY,
rank integer,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT featured_studios_pkey PRIMARY KEY (id)
);
CREATE TABLE public.federation_applications (
id integer NOT NULL DEFAULT nextval('federation_applications_id_seq'::regclass),
guild_id character varying NOT NULL UNIQUE,
guild_name character varying,
guild_icon character varying,
owner_id character varying,
member_count integer DEFAULT 0,
reason text,
status character varying DEFAULT 'pending'::character varying,
reviewed_by character varying,
reviewed_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT federation_applications_pkey PRIMARY KEY (id)
);
CREATE TABLE public.federation_bans (
id integer NOT NULL DEFAULT nextval('federation_bans_id_seq'::regclass),
user_id character varying NOT NULL,
username character varying,
reason text,
evidence text,
severity character varying DEFAULT 'low'::character varying,
reported_by character varying,
reported_by_guild_id character varying,
active boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT federation_bans_pkey PRIMARY KEY (id)
);
CREATE TABLE public.federation_featured (
id integer NOT NULL DEFAULT nextval('federation_featured_id_seq'::regclass),
guild_id character varying NOT NULL UNIQUE,
subscription_id character varying,
active boolean DEFAULT true,
expires_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT federation_featured_pkey PRIMARY KEY (id)
);
CREATE TABLE public.federation_mappings (
role_id text NOT NULL,
role_name text,
guild_id text,
guild_name text,
linked_at timestamp with time zone DEFAULT now(),
CONSTRAINT federation_mappings_pkey PRIMARY KEY (role_id)
);
CREATE TABLE public.federation_reputation (
id integer NOT NULL DEFAULT nextval('federation_reputation_id_seq'::regclass),
guild_id character varying NOT NULL UNIQUE,
valid_reports integer DEFAULT 0,
false_positives integer DEFAULT 0,
total_reports integer DEFAULT 0,
last_updated timestamp with time zone DEFAULT now(),
CONSTRAINT federation_reputation_pkey PRIMARY KEY (id)
);
CREATE TABLE public.federation_servers (
id integer NOT NULL DEFAULT nextval('federation_servers_id_seq'::regclass),
guild_id character varying NOT NULL UNIQUE,
guild_name character varying,
guild_icon character varying,
owner_id character varying,
member_count integer DEFAULT 0,
status character varying DEFAULT 'pending'::character varying,
tier character varying DEFAULT 'free'::character varying,
trust_level character varying DEFAULT 'bronze'::character varying,
reputation_score integer DEFAULT 0,
subscription_id character varying,
subscription_status character varying,
invite_code character varying,
description text,
joined_federation_at timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT federation_servers_pkey PRIMARY KEY (id)
);
CREATE TABLE public.feedback_surveys (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
description text,
questions jsonb,
is_active boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT feedback_surveys_pkey PRIMARY KEY (id),
CONSTRAINT feedback_surveys_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.followers (
id uuid NOT NULL DEFAULT gen_random_uuid(),
follower_id uuid NOT NULL,
following_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT followers_pkey PRIMARY KEY (id),
CONSTRAINT followers_follower_id_fkey FOREIGN KEY (follower_id) REFERENCES public.profiles(id),
CONSTRAINT followers_following_id_fkey FOREIGN KEY (following_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.forum_categories (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
display_order integer,
site_id uuid,
slug text UNIQUE,
CONSTRAINT forum_categories_pkey PRIMARY KEY (id),
CONSTRAINT forum_categories_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.forum_comments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
post_id uuid,
user_id uuid,
parent_comment_id uuid,
content text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT forum_comments_pkey PRIMARY KEY (id),
CONSTRAINT forum_comments_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.forum_posts(id),
CONSTRAINT forum_comments_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT forum_comments_parent_comment_id_fkey FOREIGN KEY (parent_comment_id) REFERENCES public.forum_comments(id)
);
CREATE TABLE public.forum_likes (
id uuid NOT NULL DEFAULT gen_random_uuid(),
post_id uuid,
comment_id uuid,
user_id uuid,
reaction_type text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT forum_likes_pkey PRIMARY KEY (id),
CONSTRAINT forum_likes_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.forum_posts(id),
CONSTRAINT forum_likes_comment_id_fkey FOREIGN KEY (comment_id) REFERENCES public.forum_comments(id),
CONSTRAINT forum_likes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.forum_post_tags (
post_id uuid NOT NULL,
tag_id uuid NOT NULL,
CONSTRAINT forum_post_tags_pkey PRIMARY KEY (post_id, tag_id),
CONSTRAINT forum_post_tags_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.forum_posts(id),
CONSTRAINT forum_post_tags_tag_id_fkey FOREIGN KEY (tag_id) REFERENCES public.forum_tags(id)
);
CREATE TABLE public.forum_posts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
category_id uuid,
user_id uuid,
title text NOT NULL,
content text,
views_count integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
site_id uuid,
slug text,
last_activity_at timestamp with time zone DEFAULT now(),
CONSTRAINT forum_posts_pkey PRIMARY KEY (id),
CONSTRAINT forum_posts_category_id_fkey FOREIGN KEY (category_id) REFERENCES public.forum_categories(id),
CONSTRAINT forum_posts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT forum_posts_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.forum_tags (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT forum_tags_pkey PRIMARY KEY (id)
);
CREATE TABLE public.foundation_activity (
id integer NOT NULL DEFAULT nextval('foundation_activity_id_seq'::regclass),
member_id uuid,
action text,
points integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT foundation_activity_pkey PRIMARY KEY (id)
);
CREATE TABLE public.foundation_contributions (
id integer NOT NULL DEFAULT nextval('foundation_contributions_id_seq'::regclass),
contributor_id uuid,
type text,
amount numeric,
description text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT foundation_contributions_pkey PRIMARY KEY (id)
);
CREATE TABLE public.foundation_course_content (
id uuid NOT NULL DEFAULT gen_random_uuid(),
course_id uuid NOT NULL,
content_type text NOT NULL CHECK (content_type = ANY (ARRAY['markdown'::text, 'pdf'::text, 'code-sample'::text, 'video-link'::text])),
title text NOT NULL,
content_url text,
file_size_kb integer DEFAULT 0,
chapter_count integer DEFAULT 1,
download_count integer DEFAULT 0,
created_at timestamp without time zone DEFAULT now(),
updated_at timestamp without time zone DEFAULT now(),
CONSTRAINT foundation_course_content_pkey PRIMARY KEY (id),
CONSTRAINT foundation_course_content_course_id_fkey FOREIGN KEY (course_id) REFERENCES public.foundation_courses(id)
);
CREATE TABLE public.foundation_course_materials (
id uuid NOT NULL DEFAULT gen_random_uuid(),
course_id uuid NOT NULL,
title text NOT NULL,
content text NOT NULL,
format text NOT NULL CHECK (format = ANY (ARRAY['markdown'::text, 'pdf'::text, 'code'::text, 'video'::text])),
file_size_kb integer DEFAULT 0,
download_count integer DEFAULT 0,
created_at timestamp without time zone DEFAULT now(),
updated_at timestamp without time zone DEFAULT now(),
CONSTRAINT foundation_course_materials_pkey PRIMARY KEY (id),
CONSTRAINT foundation_course_materials_course_id_fkey FOREIGN KEY (course_id) REFERENCES public.foundation_courses(id)
);
CREATE TABLE public.foundation_courses (
id uuid NOT NULL DEFAULT gen_random_uuid(),
slug text NOT NULL UNIQUE,
title text NOT NULL,
description text NOT NULL,
content text,
category text NOT NULL CHECK (category = ANY (ARRAY['game-dev'::text, 'web-dev'::text, 'ai-ml'::text, 'design'::text, 'business'::text])),
difficulty text NOT NULL CHECK (difficulty = ANY (ARRAY['beginner'::text, 'intermediate'::text, 'advanced'::text])),
instructor_id uuid,
cover_image_url text,
estimated_hours integer DEFAULT 0,
is_published boolean DEFAULT false,
created_at timestamp without time zone DEFAULT now(),
updated_at timestamp without time zone DEFAULT now(),
CONSTRAINT foundation_courses_pkey PRIMARY KEY (id),
CONSTRAINT foundation_courses_instructor_id_fkey FOREIGN KEY (instructor_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.foundation_mentorship_requests (
id uuid NOT NULL DEFAULT gen_random_uuid(),
mentor_id uuid NOT NULL,
mentee_id uuid NOT NULL,
message text,
expertise_area text,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'accepted'::text, 'rejected'::text, 'cancelled'::text])),
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT foundation_mentorship_requests_pkey PRIMARY KEY (id),
CONSTRAINT foundation_mentorship_requests_mentor_id_fkey FOREIGN KEY (mentor_id) REFERENCES public.user_profiles(id),
CONSTRAINT foundation_mentorship_requests_mentee_id_fkey FOREIGN KEY (mentee_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.fourthwall_orders (
id bigint NOT NULL DEFAULT nextval('fourthwall_orders_id_seq'::regclass),
fourthwall_order_id text NOT NULL UNIQUE,
customer_email text NOT NULL,
items jsonb DEFAULT '[]'::jsonb,
total_amount numeric NOT NULL,
status text NOT NULL DEFAULT 'pending'::text,
paid_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT fourthwall_orders_pkey PRIMARY KEY (id)
);
CREATE TABLE public.fourthwall_products (
id bigint NOT NULL DEFAULT nextval('fourthwall_products_id_seq'::regclass),
fourthwall_id text NOT NULL UNIQUE,
name text NOT NULL,
description text,
price numeric NOT NULL,
currency text NOT NULL DEFAULT 'USD'::text,
image_url text,
category text,
synced_at timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT fourthwall_products_pkey PRIMARY KEY (id)
);
CREATE TABLE public.fourthwall_webhook_logs (
id bigint NOT NULL DEFAULT nextval('fourthwall_webhook_logs_id_seq'::regclass),
event_type text NOT NULL,
payload jsonb,
received_at timestamp with time zone DEFAULT now(),
CONSTRAINT fourthwall_webhook_logs_pkey PRIMARY KEY (id)
);
CREATE TABLE public.game_auth_tokens (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
game text NOT NULL,
token text NOT NULL UNIQUE,
player_token text,
expires_at timestamp without time zone NOT NULL,
created_at timestamp without time zone DEFAULT now(),
last_used timestamp without time zone,
metadata jsonb DEFAULT '{}'::jsonb,
CONSTRAINT game_auth_tokens_pkey PRIMARY KEY (id),
CONSTRAINT game_auth_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.game_sessions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
game text NOT NULL,
session_token text NOT NULL UNIQUE,
device_id text,
platform text,
expires_at timestamp without time zone NOT NULL,
last_activity timestamp without time zone DEFAULT now(),
created_at timestamp without time zone DEFAULT now(),
CONSTRAINT game_sessions_pkey PRIMARY KEY (id),
CONSTRAINT game_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.gameforge_builds (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid NOT NULL,
version text NOT NULL,
build_type text NOT NULL CHECK (build_type = ANY (ARRAY['alpha'::text, 'beta'::text, 'release_candidate'::text, 'final'::text])),
release_date timestamp with time zone NOT NULL DEFAULT now(),
download_url text,
changelog text,
file_size bigint,
target_platforms ARRAY NOT NULL DEFAULT '{}'::text[],
download_count integer NOT NULL DEFAULT 0,
created_by uuid,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_builds_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_builds_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.gameforge_projects(id),
CONSTRAINT gameforge_builds_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.gameforge_metrics (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid NOT NULL,
metric_date timestamp with time zone NOT NULL DEFAULT now(),
metric_type text NOT NULL CHECK (metric_type = ANY (ARRAY['monthly'::text, 'sprint'::text, 'milestone'::text])),
velocity integer,
hours_logged integer,
team_size_avg integer,
bugs_found integer DEFAULT 0,
bugs_fixed integer DEFAULT 0,
build_count integer DEFAULT 0,
days_from_planned_to_release integer,
on_schedule boolean,
budget_allocated numeric,
budget_spent numeric,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_metrics_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_metrics_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.gameforge_projects(id)
);
CREATE TABLE public.gameforge_projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
status text NOT NULL DEFAULT 'planning'::text CHECK (status = ANY (ARRAY['planning'::text, 'in_development'::text, 'qa'::text, 'released'::text, 'hiatus'::text, 'cancelled'::text])),
lead_id uuid NOT NULL,
platform text NOT NULL CHECK (platform = ANY (ARRAY['Unity'::text, 'Unreal'::text, 'Godot'::text, 'Custom'::text, 'WebGL'::text])),
genre ARRAY NOT NULL DEFAULT '{}'::text[],
target_release_date timestamp with time zone,
actual_release_date timestamp with time zone,
budget numeric,
current_spend numeric NOT NULL DEFAULT 0,
team_size integer DEFAULT 0,
repository_url text,
documentation_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_projects_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_projects_lead_id_fkey FOREIGN KEY (lead_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.gameforge_sprint_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
sprint_id uuid NOT NULL,
user_id uuid NOT NULL,
role text NOT NULL DEFAULT 'contributor'::text CHECK (role = ANY (ARRAY['lead'::text, 'contributor'::text, 'reviewer'::text])),
joined_at timestamp with time zone NOT NULL DEFAULT now(),
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_sprint_members_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_sprint_members_sprint_id_fkey FOREIGN KEY (sprint_id) REFERENCES public.gameforge_sprints(id),
CONSTRAINT gameforge_sprint_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.gameforge_sprints (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid NOT NULL,
sprint_number integer NOT NULL,
title text NOT NULL,
description text,
phase text NOT NULL DEFAULT 'planning'::text CHECK (phase = ANY (ARRAY['planning'::text, 'active'::text, 'completed'::text, 'cancelled'::text])),
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'active'::text, 'on_hold'::text, 'completed'::text])),
goal text,
start_date timestamp with time zone,
end_date timestamp with time zone,
planned_velocity integer,
actual_velocity integer,
created_by uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_sprints_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_sprints_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.gameforge_projects(id),
CONSTRAINT gameforge_sprints_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.gameforge_tasks (
id uuid NOT NULL DEFAULT gen_random_uuid(),
sprint_id uuid,
project_id uuid NOT NULL,
title text NOT NULL,
description text,
status text NOT NULL DEFAULT 'todo'::text CHECK (status = ANY (ARRAY['todo'::text, 'in_progress'::text, 'in_review'::text, 'done'::text, 'blocked'::text])),
priority text NOT NULL DEFAULT 'medium'::text CHECK (priority = ANY (ARRAY['low'::text, 'medium'::text, 'high'::text, 'critical'::text])),
estimated_hours numeric,
actual_hours numeric,
assigned_to uuid,
created_by uuid NOT NULL,
due_date timestamp with time zone,
completed_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_tasks_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_tasks_sprint_id_fkey FOREIGN KEY (sprint_id) REFERENCES public.gameforge_sprints(id),
CONSTRAINT gameforge_tasks_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.gameforge_projects(id),
CONSTRAINT gameforge_tasks_assigned_to_fkey FOREIGN KEY (assigned_to) REFERENCES public.user_profiles(id),
CONSTRAINT gameforge_tasks_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.gameforge_team_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
role text NOT NULL CHECK (role = ANY (ARRAY['engineer'::text, 'designer'::text, 'artist'::text, 'producer'::text, 'qa'::text, 'sound_designer'::text, 'writer'::text, 'manager'::text])),
position text,
contract_type text NOT NULL DEFAULT 'employee'::text CHECK (contract_type = ANY (ARRAY['employee'::text, 'contractor'::text, 'consultant'::text, 'intern'::text])),
hourly_rate numeric,
project_ids ARRAY NOT NULL DEFAULT '{}'::uuid[],
skills ARRAY DEFAULT '{}'::text[],
bio text,
joined_date timestamp with time zone NOT NULL DEFAULT now(),
left_date timestamp with time zone,
is_active boolean NOT NULL DEFAULT true,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT gameforge_team_members_pkey PRIMARY KEY (id),
CONSTRAINT gameforge_team_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.giveaways (
message_id text NOT NULL,
channel_id text,
guild_id text,
prize text,
winners_count integer DEFAULT 1,
required_role text,
host_id text,
end_time timestamp with time zone,
entries jsonb DEFAULT '[]'::jsonb,
status text DEFAULT 'active'::text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT giveaways_pkey PRIMARY KEY (message_id)
);
CREATE TABLE public.goals (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
site_id uuid NOT NULL,
title text NOT NULL,
description text,
status text DEFAULT 'in_progress'::text,
progress integer DEFAULT 0,
due_date date,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT goals_pkey PRIMARY KEY (id),
CONSTRAINT goals_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT goals_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.grid_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
discord_id text NOT NULL UNIQUE,
discord_username text NOT NULL,
display_name text,
avatar_url text,
bio text DEFAULT 'Grid member via Discord Activity'::text,
xp integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT grid_members_pkey PRIMARY KEY (id)
);
CREATE TABLE public.group_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
group_id uuid NOT NULL,
user_id uuid NOT NULL,
joined_at timestamp with time zone NOT NULL DEFAULT now(),
group_role_id uuid,
role text NOT NULL DEFAULT 'member'::text,
CONSTRAINT group_members_pkey PRIMARY KEY (id),
CONSTRAINT group_members_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.groups(id),
CONSTRAINT group_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT group_members_group_role_id_fkey FOREIGN KEY (group_role_id) REFERENCES public.group_roles(id)
);
CREATE TABLE public.group_roles (
id uuid NOT NULL DEFAULT gen_random_uuid(),
group_id uuid NOT NULL,
name text NOT NULL,
permissions jsonb NOT NULL,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT group_roles_pkey PRIMARY KEY (id),
CONSTRAINT group_roles_group_id_fkey FOREIGN KEY (group_id) REFERENCES public.groups(id)
);
CREATE TABLE public.groups (
id uuid NOT NULL DEFAULT gen_random_uuid(),
owner_id uuid NOT NULL,
name text NOT NULL UNIQUE,
slug text NOT NULL UNIQUE,
description text,
avatar_url text,
banner_url text,
is_verified boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT groups_pkey PRIMARY KEY (id),
CONSTRAINT groups_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.guild_user_xp (
id integer NOT NULL DEFAULT nextval('guild_user_xp_id_seq'::regclass),
guild_id character varying NOT NULL,
user_id character varying NOT NULL,
xp integer DEFAULT 0,
level integer DEFAULT 0,
prestige integer DEFAULT 0,
messages integer DEFAULT 0,
voice_minutes integer DEFAULT 0,
last_xp_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT guild_user_xp_pkey PRIMARY KEY (id)
);
CREATE TABLE public.help_requests (
id uuid NOT NULL DEFAULT gen_random_uuid(),
requester_id uuid NOT NULL,
requester_username character varying NOT NULL,
title text NOT NULL,
description text,
category character varying NOT NULL,
status character varying DEFAULT 'open'::character varying,
helper_id uuid,
helper_username character varying,
created_at timestamp with time zone DEFAULT now(),
resolved_at timestamp with time zone,
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT help_requests_pkey PRIMARY KEY (id),
CONSTRAINT help_requests_requester_id_fkey FOREIGN KEY (requester_id) REFERENCES public.user_profiles(id),
CONSTRAINT help_requests_helper_id_fkey FOREIGN KEY (helper_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.inspirations (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title text NOT NULL,
description text,
image_url text,
category text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
location_name text,
latitude numeric,
longitude numeric,
CONSTRAINT inspirations_pkey PRIMARY KEY (id)
);
CREATE TABLE public.interested_prospects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
full_name text NOT NULL,
email text NOT NULL UNIQUE,
area_of_interest text,
linkedin_url text,
submitted_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT interested_prospects_pkey PRIMARY KEY (id)
);
CREATE TABLE public.invitations (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
token text NOT NULL UNIQUE,
email text NOT NULL,
role text NOT NULL,
status text NOT NULL DEFAULT 'pending'::text,
created_at timestamp with time zone DEFAULT now(),
expires_at timestamp with time zone NOT NULL,
CONSTRAINT invitations_pkey PRIMARY KEY (id),
CONSTRAINT invitations_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.invites (
id uuid NOT NULL DEFAULT gen_random_uuid(),
inviter_id uuid NOT NULL,
invitee_email text NOT NULL,
token text NOT NULL UNIQUE,
status text NOT NULL DEFAULT 'pending'::text,
accepted_by uuid,
created_at timestamp with time zone NOT NULL DEFAULT now(),
accepted_at timestamp with time zone,
message text,
CONSTRAINT invites_pkey PRIMARY KEY (id),
CONSTRAINT invites_inviter_id_fkey FOREIGN KEY (inviter_id) REFERENCES auth.users(id),
CONSTRAINT invites_accepted_by_fkey FOREIGN KEY (accepted_by) REFERENCES auth.users(id)
);
CREATE TABLE public.invoices (
id uuid NOT NULL DEFAULT gen_random_uuid(),
sender_id uuid NOT NULL,
recipient_id uuid,
site_id uuid NOT NULL,
amount numeric NOT NULL,
due_date date,
status text DEFAULT 'pending'::text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT invoices_pkey PRIMARY KEY (id),
CONSTRAINT invoices_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES public.profiles(id),
CONSTRAINT invoices_recipient_id_fkey FOREIGN KEY (recipient_id) REFERENCES public.profiles(id),
CONSTRAINT invoices_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.ip_blacklist (
id character varying NOT NULL DEFAULT (gen_random_uuid())::character varying,
ip_address text NOT NULL UNIQUE,
reason text,
added_by character varying,
expires_at timestamp without time zone,
created_at timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT ip_blacklist_pkey PRIMARY KEY (id),
CONSTRAINT ip_blacklist_added_by_fkey FOREIGN KEY (added_by) REFERENCES public.users(id)
);
CREATE TABLE public.job_applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
job_id uuid NOT NULL,
user_id uuid NOT NULL,
resume_url text NOT NULL,
cover_letter text,
status text NOT NULL DEFAULT 'Under Review'::text,
submitted_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT job_applications_pkey PRIMARY KEY (id),
CONSTRAINT job_applications_job_id_fkey FOREIGN KEY (job_id) REFERENCES public.job_openings(id),
CONSTRAINT job_applications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.job_openings (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
description text,
department text,
location text,
status text DEFAULT 'open'::text,
is_internal boolean DEFAULT false,
posted_at timestamp with time zone DEFAULT now(),
CONSTRAINT job_openings_pkey PRIMARY KEY (id),
CONSTRAINT job_openings_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.knowledge_base (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
question text NOT NULL,
answer text NOT NULL,
category text,
tags ARRAY,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT knowledge_base_pkey PRIMARY KEY (id),
CONSTRAINT knowledge_base_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.level_roles (
id uuid NOT NULL DEFAULT gen_random_uuid(),
level_threshold integer NOT NULL UNIQUE,
role_name text NOT NULL,
icon text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT level_roles_pkey PRIMARY KEY (id)
);
CREATE TABLE public.listings (
id uuid NOT NULL DEFAULT gen_random_uuid(),
seller_id uuid NOT NULL,
title text NOT NULL,
description text,
price numeric NOT NULL,
category text,
status text NOT NULL DEFAULT 'active'::text,
images ARRAY,
featured boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT listings_pkey PRIMARY KEY (id),
CONSTRAINT listings_seller_id_fkey FOREIGN KEY (seller_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.marketplace_listings (
id bigint NOT NULL DEFAULT nextval('marketplace_listings_id_seq'::regclass),
asset_id bigint,
token_id text,
contract_address text,
chain_id integer,
seller_address text NOT NULL,
seller_id uuid,
listing_type text NOT NULL,
item_type text NOT NULL,
title text NOT NULL,
description text,
price numeric NOT NULL,
price_currency text NOT NULL DEFAULT 'ETH'::text,
quantity numeric DEFAULT 1,
starting_price numeric,
reserve_price numeric,
current_bid numeric,
highest_bidder_address text,
auction_end_time timestamp with time zone,
file_url text,
download_url text,
preview_url text,
license_type text,
status text DEFAULT 'active'::text,
expires_at timestamp with time zone,
signature text,
nonce text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT marketplace_listings_pkey PRIMARY KEY (id),
CONSTRAINT marketplace_listings_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES public.nft_assets(id),
CONSTRAINT marketplace_listings_seller_id_fkey FOREIGN KEY (seller_id) REFERENCES auth.users(id)
);
CREATE TABLE public.marketplace_offers (
id bigint NOT NULL DEFAULT nextval('marketplace_offers_id_seq'::regclass),
listing_id bigint,
asset_id bigint,
collection_id bigint,
offerer_address text NOT NULL,
offerer_id uuid,
price numeric NOT NULL,
price_currency text NOT NULL DEFAULT 'ETH'::text,
quantity numeric DEFAULT 1,
status text DEFAULT 'active'::text,
expires_at timestamp with time zone NOT NULL,
signature text,
nonce text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT marketplace_offers_pkey PRIMARY KEY (id),
CONSTRAINT marketplace_offers_listing_id_fkey FOREIGN KEY (listing_id) REFERENCES public.marketplace_listings(id),
CONSTRAINT marketplace_offers_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES public.nft_assets(id),
CONSTRAINT marketplace_offers_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES public.nft_collections(id),
CONSTRAINT marketplace_offers_offerer_id_fkey FOREIGN KEY (offerer_id) REFERENCES auth.users(id)
);
CREATE TABLE public.mentors (
user_id uuid NOT NULL,
bio text,
expertise ARRAY NOT NULL DEFAULT '{}'::text[],
available boolean NOT NULL DEFAULT true,
hourly_rate numeric,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT mentors_pkey PRIMARY KEY (user_id),
CONSTRAINT mentors_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.mentorship_requests (
id uuid NOT NULL DEFAULT gen_random_uuid(),
mentor_id uuid NOT NULL,
mentee_id uuid NOT NULL,
message text,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'accepted'::text, 'rejected'::text, 'cancelled'::text])),
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT mentorship_requests_pkey PRIMARY KEY (id),
CONSTRAINT mentorship_requests_mentor_id_fkey FOREIGN KEY (mentor_id) REFERENCES public.user_profiles(id),
CONSTRAINT mentorship_requests_mentee_id_fkey FOREIGN KEY (mentee_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.messages (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
conversation_id uuid NOT NULL,
sender_id uuid NOT NULL,
content text NOT NULL,
is_read boolean NOT NULL DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
subject text,
type text NOT NULL DEFAULT 'dm'::text,
CONSTRAINT messages_pkey PRIMARY KEY (id),
CONSTRAINT messages_conversation_id_fkey FOREIGN KEY (conversation_id) REFERENCES public.conversations(id),
CONSTRAINT messages_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.mod_actions (
id integer NOT NULL DEFAULT nextval('mod_actions_id_seq'::regclass),
guild_id text NOT NULL,
action text NOT NULL,
user_id text NOT NULL,
user_tag text,
moderator_id text NOT NULL,
moderator_tag text,
reason text,
duration_minutes integer,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT mod_actions_pkey PRIMARY KEY (id)
);
CREATE TABLE public.moderation_reports (
id uuid NOT NULL DEFAULT gen_random_uuid(),
reporter_id uuid,
target_type text NOT NULL CHECK (target_type = ANY (ARRAY['post'::text, 'comment'::text, 'user'::text, 'project'::text, 'other'::text])),
target_id uuid,
reason text NOT NULL,
details text,
status text NOT NULL DEFAULT 'open'::text CHECK (status = ANY (ARRAY['open'::text, 'resolved'::text, 'ignored'::text])),
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT moderation_reports_pkey PRIMARY KEY (id),
CONSTRAINT moderation_reports_reporter_id_fkey FOREIGN KEY (reporter_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.mrpiglr_events (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
title text NOT NULL,
description text,
start_time timestamp with time zone NOT NULL,
end_time timestamp with time zone,
event_type text,
image_url text,
stream_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT mrpiglr_events_pkey PRIMARY KEY (id),
CONSTRAINT mrpiglr_events_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.mrpiglr_site_badges (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
icon text,
color text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
category text,
tier integer,
required_value integer,
CONSTRAINT mrpiglr_site_badges_pkey PRIMARY KEY (id)
);
CREATE TABLE public.mrpiglr_waitlist (
id uuid NOT NULL DEFAULT gen_random_uuid(),
email text NOT NULL UNIQUE,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT mrpiglr_waitlist_pkey PRIMARY KEY (id)
);
CREATE TABLE public.music (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
title text NOT NULL,
artist text NOT NULL,
album text,
year text,
genre text,
duration text,
youtube_id text,
description text,
image_prompt text,
image_url text,
links jsonb,
display_order smallint,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT music_pkey PRIMARY KEY (id)
);
CREATE TABLE public.newsletter_subscribers (
id uuid NOT NULL DEFAULT gen_random_uuid(),
email text NOT NULL UNIQUE,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT newsletter_subscribers_pkey PRIMARY KEY (id)
);
CREATE TABLE public.nexus_applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
opportunity_id uuid NOT NULL,
creator_id uuid NOT NULL,
status text NOT NULL DEFAULT 'submitted'::text CHECK (status = ANY (ARRAY['submitted'::text, 'reviewing'::text, 'accepted'::text, 'rejected'::text, 'hired'::text, 'archived'::text])),
cover_letter text,
proposed_rate numeric,
proposal text,
application_questions jsonb,
viewed_at timestamp with time zone,
responded_at timestamp with time zone,
response_message text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_applications_pkey PRIMARY KEY (id),
CONSTRAINT nexus_applications_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.nexus_opportunities(id),
CONSTRAINT nexus_applications_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_commission_ledger (
id uuid NOT NULL DEFAULT gen_random_uuid(),
payment_id uuid,
period_start date,
period_end date,
total_volume numeric NOT NULL,
total_commission numeric NOT NULL,
creator_payouts numeric NOT NULL,
aethex_revenue numeric NOT NULL,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'settled'::text, 'disputed'::text])),
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_commission_ledger_pkey PRIMARY KEY (id),
CONSTRAINT nexus_commission_ledger_payment_id_fkey FOREIGN KEY (payment_id) REFERENCES public.nexus_payments(id)
);
CREATE TABLE public.nexus_contracts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
opportunity_id uuid,
creator_id uuid NOT NULL,
client_id uuid NOT NULL,
title text NOT NULL,
description text,
contract_type text NOT NULL CHECK (contract_type = ANY (ARRAY['one-time'::text, 'retainer'::text, 'hourly'::text])),
total_amount numeric NOT NULL,
aethex_commission_percent numeric NOT NULL DEFAULT 20,
aethex_commission_amount numeric NOT NULL DEFAULT 0,
creator_payout_amount numeric NOT NULL DEFAULT 0,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'active'::text, 'completed'::text, 'disputed'::text, 'cancelled'::text])),
start_date timestamp with time zone,
end_date timestamp with time zone,
milestone_count integer DEFAULT 1,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
stripe_payment_intent_id text,
CONSTRAINT nexus_contracts_pkey PRIMARY KEY (id),
CONSTRAINT nexus_contracts_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.nexus_opportunities(id),
CONSTRAINT nexus_contracts_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_contracts_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_conversations (
id uuid NOT NULL DEFAULT gen_random_uuid(),
participant_1 uuid NOT NULL,
participant_2 uuid NOT NULL,
opportunity_id uuid,
contract_id uuid,
subject text,
last_message_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_conversations_pkey PRIMARY KEY (id),
CONSTRAINT nexus_conversations_participant_1_fkey FOREIGN KEY (participant_1) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_conversations_participant_2_fkey FOREIGN KEY (participant_2) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_conversations_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.nexus_opportunities(id),
CONSTRAINT nexus_conversations_contract_id_fkey FOREIGN KEY (contract_id) REFERENCES public.nexus_contracts(id)
);
CREATE TABLE public.nexus_creator_profiles (
user_id uuid NOT NULL,
headline text,
bio text,
profile_image_url text,
skills ARRAY NOT NULL DEFAULT '{}'::text[],
experience_level text NOT NULL DEFAULT 'intermediate'::text CHECK (experience_level = ANY (ARRAY['beginner'::text, 'intermediate'::text, 'advanced'::text, 'expert'::text])),
hourly_rate numeric,
portfolio_url text,
availability_status text NOT NULL DEFAULT 'available'::text CHECK (availability_status = ANY (ARRAY['available'::text, 'busy'::text, 'unavailable'::text])),
availability_hours_per_week integer,
verified boolean NOT NULL DEFAULT false,
total_earnings numeric NOT NULL DEFAULT 0,
rating numeric,
review_count integer NOT NULL DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
stripe_connect_account_id text,
stripe_account_verified boolean DEFAULT false,
CONSTRAINT nexus_creator_profiles_pkey PRIMARY KEY (user_id),
CONSTRAINT nexus_creator_profiles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_disputes (
id uuid NOT NULL DEFAULT gen_random_uuid(),
contract_id uuid NOT NULL,
reported_by uuid NOT NULL,
reason text NOT NULL,
description text,
evidence_urls ARRAY DEFAULT '{}'::text[],
status text NOT NULL DEFAULT 'open'::text CHECK (status = ANY (ARRAY['open'::text, 'reviewing'::text, 'resolved'::text, 'escalated'::text])),
resolution_notes text,
resolved_by uuid,
resolved_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_disputes_pkey PRIMARY KEY (id),
CONSTRAINT nexus_disputes_contract_id_fkey FOREIGN KEY (contract_id) REFERENCES public.nexus_contracts(id),
CONSTRAINT nexus_disputes_reported_by_fkey FOREIGN KEY (reported_by) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_disputes_resolved_by_fkey FOREIGN KEY (resolved_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_messages (
id uuid NOT NULL DEFAULT gen_random_uuid(),
conversation_id uuid,
sender_id uuid NOT NULL,
recipient_id uuid NOT NULL,
opportunity_id uuid,
contract_id uuid,
message_text text NOT NULL,
is_read boolean NOT NULL DEFAULT false,
read_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_messages_pkey PRIMARY KEY (id),
CONSTRAINT nexus_messages_sender_id_fkey FOREIGN KEY (sender_id) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_messages_recipient_id_fkey FOREIGN KEY (recipient_id) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_messages_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.nexus_opportunities(id),
CONSTRAINT nexus_messages_contract_id_fkey FOREIGN KEY (contract_id) REFERENCES public.nexus_contracts(id)
);
CREATE TABLE public.nexus_milestones (
id uuid NOT NULL DEFAULT gen_random_uuid(),
contract_id uuid NOT NULL,
milestone_number integer NOT NULL,
description text,
amount numeric NOT NULL,
due_date timestamp with time zone,
status text NOT NULL DEFAULT 'pending'::text CHECK (status = ANY (ARRAY['pending'::text, 'submitted'::text, 'approved'::text, 'paid'::text, 'rejected'::text])),
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_milestones_pkey PRIMARY KEY (id),
CONSTRAINT nexus_milestones_contract_id_fkey FOREIGN KEY (contract_id) REFERENCES public.nexus_contracts(id)
);
CREATE TABLE public.nexus_opportunities (
id uuid NOT NULL DEFAULT gen_random_uuid(),
posted_by uuid NOT NULL,
title text NOT NULL,
description text NOT NULL,
category text NOT NULL,
required_skills ARRAY NOT NULL DEFAULT '{}'::text[],
budget_type text NOT NULL CHECK (budget_type = ANY (ARRAY['hourly'::text, 'fixed'::text, 'range'::text])),
budget_min numeric,
budget_max numeric,
timeline_type text NOT NULL DEFAULT 'flexible'::text CHECK (timeline_type = ANY (ARRAY['urgent'::text, 'short-term'::text, 'long-term'::text, 'ongoing'::text, 'flexible'::text])),
duration_weeks integer,
location_requirement text DEFAULT 'remote'::text CHECK (location_requirement = ANY (ARRAY['remote'::text, 'onsite'::text, 'hybrid'::text])),
required_experience text DEFAULT 'any'::text CHECK (required_experience = ANY (ARRAY['any'::text, 'beginner'::text, 'intermediate'::text, 'advanced'::text, 'expert'::text])),
company_name text,
status text NOT NULL DEFAULT 'open'::text CHECK (status = ANY (ARRAY['open'::text, 'in_progress'::text, 'filled'::text, 'closed'::text, 'cancelled'::text])),
application_count integer NOT NULL DEFAULT 0,
selected_creator_id uuid,
views integer NOT NULL DEFAULT 0,
is_featured boolean NOT NULL DEFAULT false,
published_at timestamp with time zone NOT NULL DEFAULT now(),
closed_at timestamp with time zone,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_opportunities_pkey PRIMARY KEY (id),
CONSTRAINT nexus_opportunities_posted_by_fkey FOREIGN KEY (posted_by) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_opportunities_selected_creator_id_fkey FOREIGN KEY (selected_creator_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_payments (
id uuid NOT NULL DEFAULT gen_random_uuid(),
contract_id uuid NOT NULL,
milestone_id uuid,
amount numeric NOT NULL,
creator_payout numeric NOT NULL,
aethex_commission numeric NOT NULL,
payment_method text NOT NULL DEFAULT 'stripe'::text,
payment_status text NOT NULL DEFAULT 'pending'::text CHECK (payment_status = ANY (ARRAY['pending'::text, 'processing'::text, 'completed'::text, 'failed'::text, 'refunded'::text])),
payment_date timestamp with time zone,
payout_date timestamp with time zone,
stripe_payment_intent_id text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
stripe_charge_id text,
CONSTRAINT nexus_payments_pkey PRIMARY KEY (id),
CONSTRAINT nexus_payments_contract_id_fkey FOREIGN KEY (contract_id) REFERENCES public.nexus_contracts(id),
CONSTRAINT nexus_payments_milestone_id_fkey FOREIGN KEY (milestone_id) REFERENCES public.nexus_milestones(id)
);
CREATE TABLE public.nexus_portfolio_items (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
title text NOT NULL,
description text,
project_url text,
image_url text,
skills_used ARRAY NOT NULL DEFAULT '{}'::text[],
featured boolean NOT NULL DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_portfolio_items_pkey PRIMARY KEY (id),
CONSTRAINT nexus_portfolio_items_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_reviews (
id uuid NOT NULL DEFAULT gen_random_uuid(),
application_id uuid NOT NULL,
opportunity_id uuid NOT NULL,
reviewer_id uuid NOT NULL,
creator_id uuid NOT NULL,
rating integer NOT NULL CHECK (rating >= 1 AND rating <= 5),
review_text text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_reviews_pkey PRIMARY KEY (id),
CONSTRAINT nexus_reviews_application_id_fkey FOREIGN KEY (application_id) REFERENCES public.nexus_applications(id),
CONSTRAINT nexus_reviews_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.nexus_opportunities(id),
CONSTRAINT nexus_reviews_reviewer_id_fkey FOREIGN KEY (reviewer_id) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_reviews_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nexus_skill_endorsements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
creator_id uuid NOT NULL,
endorsed_by uuid NOT NULL,
skill text NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT nexus_skill_endorsements_pkey PRIMARY KEY (id),
CONSTRAINT nexus_skill_endorsements_creator_id_fkey FOREIGN KEY (creator_id) REFERENCES public.user_profiles(id),
CONSTRAINT nexus_skill_endorsements_endorsed_by_fkey FOREIGN KEY (endorsed_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.nft_assets (
id bigint NOT NULL DEFAULT nextval('nft_assets_id_seq'::regclass),
token_id text NOT NULL,
collection_id bigint,
contract_address text NOT NULL,
chain_id integer NOT NULL,
owner_address text NOT NULL,
creator_address text,
token_uri text,
name text,
description text,
image_url text,
animation_url text,
external_url text,
attributes jsonb DEFAULT '[]'::jsonb,
metadata jsonb DEFAULT '{}'::jsonb,
rarity_score numeric,
rarity_rank integer,
last_sale_price numeric,
last_sale_price_currency text,
last_sale_date timestamp with time zone,
cached_at timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT nft_assets_pkey PRIMARY KEY (id),
CONSTRAINT nft_assets_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES public.nft_collections(id)
);
CREATE TABLE public.nft_collections (
id bigint NOT NULL DEFAULT nextval('nft_collections_id_seq'::regclass),
contract_address text NOT NULL,
chain_id integer NOT NULL,
name text NOT NULL,
symbol text,
description text,
image_url text,
banner_url text,
creator_address text NOT NULL,
owner_id uuid,
token_standard text,
total_supply numeric,
floor_price numeric DEFAULT 0,
floor_price_currency text DEFAULT 'ETH'::text,
volume_traded numeric DEFAULT 0,
total_sales integer DEFAULT 0,
royalty_percentage numeric DEFAULT 0,
royalty_address text,
is_verified boolean DEFAULT false,
metadata jsonb DEFAULT '{}'::jsonb,
social_links jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT nft_collections_pkey PRIMARY KEY (id),
CONSTRAINT nft_collections_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES auth.users(id)
);
CREATE TABLE public.nft_sales (
id bigint NOT NULL DEFAULT nextval('nft_sales_id_seq'::regclass),
transaction_hash text NOT NULL,
block_number bigint,
chain_id integer NOT NULL,
event_timestamp timestamp with time zone NOT NULL,
asset_id bigint,
token_id text NOT NULL,
contract_address text NOT NULL,
collection_id bigint,
sale_type text,
auction_type text,
price numeric,
price_currency text DEFAULT 'ETH'::text,
price_usd numeric,
quantity numeric DEFAULT 1,
seller_address text,
buyer_address text,
platform_address text,
platform_fee numeric DEFAULT 0,
royalty_fee numeric DEFAULT 0,
gas_fee numeric DEFAULT 0,
marketplace text,
metadata jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT nft_sales_pkey PRIMARY KEY (id),
CONSTRAINT nft_sales_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES public.nft_assets(id),
CONSTRAINT nft_sales_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES public.nft_collections(id)
);
CREATE TABLE public.nodes (
id text NOT NULL DEFAULT (gen_random_uuid())::text,
x numeric NOT NULL,
y numeric NOT NULL,
z numeric DEFAULT 0,
title text NOT NULL,
content text NOT NULL,
category text,
details ARRAY,
type text,
status text CHECK (status = ANY (ARRAY['healthy'::text, 'warning'::text, 'error'::text, 'inactive'::text])),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT nodes_pkey PRIMARY KEY (id)
);
CREATE TABLE public.notification_preferences (
user_id uuid NOT NULL,
prefs jsonb NOT NULL DEFAULT '{}'::jsonb,
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT notification_preferences_pkey PRIMARY KEY (user_id),
CONSTRAINT notification_preferences_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.notifications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
type text NOT NULL,
data jsonb,
is_read boolean DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT notifications_pkey PRIMARY KEY (id),
CONSTRAINT notifications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.now_playing (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
track_title text NOT NULL,
artist_name text NOT NULL,
album_art_url text,
track_url text,
is_active boolean DEFAULT true,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT now_playing_pkey PRIMARY KEY (id),
CONSTRAINT now_playing_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.oauth_authorization_codes (
id uuid NOT NULL DEFAULT gen_random_uuid(),
code text NOT NULL UNIQUE,
client_id text NOT NULL,
user_id uuid NOT NULL,
redirect_uri text NOT NULL,
code_challenge text,
code_challenge_method text,
scope text NOT NULL DEFAULT 'openid profile email'::text,
expires_at timestamp with time zone NOT NULL,
used boolean NOT NULL DEFAULT false,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT oauth_authorization_codes_pkey PRIMARY KEY (id),
CONSTRAINT oauth_authorization_codes_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.oauth_clients(client_id)
);
CREATE TABLE public.oauth_clients (
id uuid NOT NULL DEFAULT gen_random_uuid(),
client_id text NOT NULL UNIQUE,
client_secret text,
name text NOT NULL,
description text,
redirect_uris jsonb NOT NULL DEFAULT '[]'::jsonb,
allowed_scopes ARRAY NOT NULL DEFAULT ARRAY['openid'::text, 'profile'::text, 'email'::text],
is_trusted boolean NOT NULL DEFAULT false,
is_active boolean NOT NULL DEFAULT true,
logo_url text,
website_url text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT oauth_clients_pkey PRIMARY KEY (id)
);
CREATE TABLE public.oauth_refresh_tokens (
id uuid NOT NULL DEFAULT gen_random_uuid(),
token text NOT NULL UNIQUE,
client_id text NOT NULL,
user_id uuid NOT NULL,
scope text NOT NULL DEFAULT 'openid profile email'::text,
expires_at timestamp with time zone NOT NULL,
revoked boolean NOT NULL DEFAULT false,
last_used_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT oauth_refresh_tokens_pkey PRIMARY KEY (id),
CONSTRAINT oauth_refresh_tokens_client_id_fkey FOREIGN KEY (client_id) REFERENCES public.oauth_clients(client_id)
);
CREATE TABLE public.orders (
id uuid NOT NULL DEFAULT gen_random_uuid(),
listing_id uuid NOT NULL,
buyer_id uuid NOT NULL,
seller_id uuid NOT NULL,
price_at_purchase numeric NOT NULL,
status text NOT NULL DEFAULT 'pending'::text,
stripe_account_id text,
stripe_payment_intent_id text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT orders_pkey PRIMARY KEY (id),
CONSTRAINT orders_listing_id_fkey FOREIGN KEY (listing_id) REFERENCES public.listings(id),
CONSTRAINT orders_buyer_id_fkey FOREIGN KEY (buyer_id) REFERENCES public.profiles(id),
CONSTRAINT orders_seller_id_fkey FOREIGN KEY (seller_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.pages (
id uuid NOT NULL DEFAULT gen_random_uuid(),
slug text NOT NULL UNIQUE,
title text NOT NULL,
content jsonb,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT pages_pkey PRIMARY KEY (id)
);
CREATE TABLE public.pair_sessions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
initiator_id uuid NOT NULL,
initiator_username character varying NOT NULL,
partner_id uuid,
partner_username character varying,
session_type character varying NOT NULL,
status character varying DEFAULT 'waiting'::character varying,
started_at timestamp with time zone,
ended_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT pair_sessions_pkey PRIMARY KEY (id),
CONSTRAINT pair_sessions_initiator_id_fkey FOREIGN KEY (initiator_id) REFERENCES public.user_profiles(id),
CONSTRAINT pair_sessions_partner_id_fkey FOREIGN KEY (partner_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.passport_scores (
id bigint NOT NULL DEFAULT nextval('passport_scores_id_seq'::regclass),
user_id uuid NOT NULL,
wallet_address text NOT NULL,
score numeric NOT NULL DEFAULT 0,
status text,
evidence jsonb DEFAULT '{}'::jsonb,
last_updated timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT passport_scores_pkey PRIMARY KEY (id),
CONSTRAINT passport_scores_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.payslips (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
site_id uuid,
pay_period_start date NOT NULL,
pay_period_end date NOT NULL,
amount numeric NOT NULL,
file_url text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT payslips_pkey PRIMARY KEY (id),
CONSTRAINT payslips_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT payslips_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.performance_reviews (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
reviewer_id uuid,
site_id uuid NOT NULL,
review_date date NOT NULL,
ratings jsonb,
comments text,
document_url text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT performance_reviews_pkey PRIMARY KEY (id),
CONSTRAINT performance_reviews_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT performance_reviews_reviewer_id_fkey FOREIGN KEY (reviewer_id) REFERENCES public.profiles(id),
CONSTRAINT performance_reviews_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.permissions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT permissions_pkey PRIMARY KEY (id)
);
CREATE TABLE public.personal_site_config (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL UNIQUE,
site_status text NOT NULL DEFAULT 'live'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT personal_site_config_pkey PRIMARY KEY (id)
);
CREATE TABLE public.polls (
id integer NOT NULL DEFAULT nextval('polls_id_seq'::regclass),
guild_id text NOT NULL,
channel_id text,
message_id text,
question text NOT NULL,
options jsonb NOT NULL,
votes jsonb DEFAULT '{}'::jsonb,
created_by text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT polls_pkey PRIMARY KEY (id)
);
CREATE TABLE public.portfolio_projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
slug text NOT NULL UNIQUE,
title text NOT NULL,
subtitle text,
cover_image_url text,
description text,
content jsonb,
tags ARRAY,
project_date date,
live_url text,
github_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT portfolio_projects_pkey PRIMARY KEY (id),
CONSTRAINT portfolio_projects_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.post_likes (
post_id uuid NOT NULL,
user_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT post_likes_pkey PRIMARY KEY (post_id, user_id),
CONSTRAINT post_likes_post_id_fkey FOREIGN KEY (post_id) REFERENCES public.posts(id),
CONSTRAINT post_likes_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.posts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
content text NOT NULL,
media_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT posts_pkey PRIMARY KEY (id),
CONSTRAINT posts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.products (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
name text NOT NULL,
price numeric,
category text,
description text,
image_prompt text,
image_url text,
tags ARRAY,
stock integer,
rating numeric,
display_order smallint,
created_at timestamp with time zone NOT NULL DEFAULT now(),
title text NOT NULL,
CONSTRAINT products_pkey PRIMARY KEY (id)
);
CREATE TABLE public.profiles (
id uuid NOT NULL,
username text NOT NULL UNIQUE,
role text NOT NULL DEFAULT 'member'::text,
onboarded boolean NOT NULL DEFAULT false,
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
bio text,
skills ARRAY,
avatar_url text,
banner_url text,
social_links jsonb,
loyalty_points bigint NOT NULL DEFAULT 0,
email text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
user_type USER-DEFINED DEFAULT 'community_member'::user_type_enum,
experience_level USER-DEFINED DEFAULT 'beginner'::experience_level_enum,
full_name text,
location text,
website_url text,
github_url text,
twitter_url text,
linkedin_url text,
total_xp integer DEFAULT 0,
level integer DEFAULT 1,
featured_badge_ids ARRAY,
aethex_passport_id uuid NOT NULL DEFAULT gen_random_uuid() UNIQUE,
signature text,
status text DEFAULT 'offline'::text,
telemetry_api_key text,
active_title text,
suspended_at timestamp with time zone,
suspension_reason text,
roblox_user_id bigint UNIQUE,
roblox_access_token text,
roblox_refresh_token text,
roblox_token_expires_at timestamp with time zone,
experience jsonb,
education jsonb,
primary_role text,
specialization jsonb,
is_verified boolean DEFAULT false,
CONSTRAINT profiles_pkey PRIMARY KEY (id),
CONSTRAINT profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id)
);
CREATE TABLE public.project_members (
project_id uuid NOT NULL,
user_id uuid NOT NULL,
role text NOT NULL DEFAULT 'contributor'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT project_members_pkey PRIMARY KEY (project_id, user_id),
CONSTRAINT project_members_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id),
CONSTRAINT project_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.project_tasks (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid NOT NULL,
title text NOT NULL,
description text,
status text NOT NULL DEFAULT 'todo'::text,
assignee_id uuid,
due_date date,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT project_tasks_pkey PRIMARY KEY (id),
CONSTRAINT project_tasks_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id),
CONSTRAINT project_tasks_assignee_id_fkey FOREIGN KEY (assignee_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.project_team_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid,
user_id uuid,
role text NOT NULL,
created_at timestamp with time zone DEFAULT now(),
site_id uuid,
CONSTRAINT project_team_members_pkey PRIMARY KEY (id),
CONSTRAINT project_team_members_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id),
CONSTRAINT project_team_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT fk_site_id FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
owner_id uuid,
title text NOT NULL,
description text,
status text DEFAULT 'In Progress'::text,
github_url text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
user_id uuid,
site_id uuid,
engine text,
priority text DEFAULT 'medium'::text,
progress integer DEFAULT 0,
live_url text,
technologies ARRAY,
CONSTRAINT projects_pkey PRIMARY KEY (id),
CONSTRAINT projects_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public.profiles(id),
CONSTRAINT projects_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT projects_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.quests (
id integer NOT NULL DEFAULT nextval('quests_id_seq'::regclass),
guild_id character varying NOT NULL,
name character varying NOT NULL,
description text,
quest_type character varying DEFAULT 'daily'::character varying,
trigger_type character varying NOT NULL,
target_value integer NOT NULL,
xp_reward integer DEFAULT 100,
active boolean DEFAULT true,
starts_at timestamp with time zone,
expires_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT quests_pkey PRIMARY KEY (id)
);
CREATE TABLE public.refresh_tokens (
id character varying NOT NULL DEFAULT (gen_random_uuid())::character varying,
user_id character varying NOT NULL,
token text NOT NULL UNIQUE,
expires_at timestamp without time zone NOT NULL,
created_at timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT refresh_tokens_pkey PRIMARY KEY (id),
CONSTRAINT refresh_tokens_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id)
);
CREATE TABLE public.reputation_events (
id uuid NOT NULL DEFAULT gen_random_uuid(),
aethex_passport_id uuid NOT NULL,
event_type text NOT NULL,
points integer NOT NULL,
site_id text,
metadata jsonb,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT reputation_events_pkey PRIMARY KEY (id),
CONSTRAINT reputation_events_aethex_passport_id_fkey FOREIGN KEY (aethex_passport_id) REFERENCES public.aethex_passports(id)
);
CREATE TABLE public.reputation_scores (
aethex_passport_id uuid NOT NULL,
score integer NOT NULL DEFAULT 0,
updated_at timestamp with time zone,
CONSTRAINT reputation_scores_pkey PRIMARY KEY (aethex_passport_id),
CONSTRAINT reputation_scores_aethex_passport_id_fkey FOREIGN KEY (aethex_passport_id) REFERENCES public.aethex_passports(id)
);
CREATE TABLE public.resources (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title character varying NOT NULL,
description text NOT NULL,
category character varying NOT NULL,
file_url text NOT NULL,
file_type character varying NOT NULL,
file_size_bytes bigint,
thumbnail_url text,
tags ARRAY DEFAULT '{}'::text[],
download_count integer NOT NULL DEFAULT 0,
published_by uuid,
published_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
is_featured boolean DEFAULT false,
CONSTRAINT resources_pkey PRIMARY KEY (id),
CONSTRAINT resources_published_by_fkey FOREIGN KEY (published_by) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.reviews (
id uuid NOT NULL DEFAULT gen_random_uuid(),
order_id uuid NOT NULL,
reviewer_id uuid NOT NULL,
reviewee_id uuid NOT NULL,
rating integer NOT NULL CHECK (rating >= 1 AND rating <= 5),
comment text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT reviews_pkey PRIMARY KEY (id),
CONSTRAINT reviews_order_id_fkey FOREIGN KEY (order_id) REFERENCES public.orders(id),
CONSTRAINT reviews_reviewer_id_fkey FOREIGN KEY (reviewer_id) REFERENCES public.profiles(id),
CONSTRAINT reviews_reviewee_id_fkey FOREIGN KEY (reviewee_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.reward_events (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
type text NOT NULL,
points_kind text NOT NULL DEFAULT 'xp'::text,
amount integer NOT NULL DEFAULT 0,
metadata jsonb,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT reward_events_pkey PRIMARY KEY (id),
CONSTRAINT reward_events_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.rewards (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
type text NOT NULL,
value jsonb,
title_id uuid,
site_id uuid,
cost integer NOT NULL DEFAULT 100,
stock integer,
rarity text DEFAULT 'Common'::text,
bg_color text DEFAULT '#4A5568'::text,
color text DEFAULT '#FFFFFF'::text,
CONSTRAINT rewards_pkey PRIMARY KEY (id),
CONSTRAINT rewards_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.roblox_links (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
roblox_user_id text NOT NULL UNIQUE,
roblox_username text NOT NULL,
linked_at timestamp without time zone DEFAULT now(),
last_verified timestamp without time zone,
CONSTRAINT roblox_links_pkey PRIMARY KEY (id),
CONSTRAINT roblox_links_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.role_panels (
message_id text NOT NULL,
channel_id text,
guild_id text,
title text,
description text,
color text,
roles jsonb DEFAULT '[]'::jsonb,
created_by text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT role_panels_pkey PRIMARY KEY (message_id)
);
CREATE TABLE public.role_permissions (
role_id uuid NOT NULL,
permission_id uuid NOT NULL,
CONSTRAINT role_permissions_pkey PRIMARY KEY (role_id, permission_id),
CONSTRAINT role_permissions_role_id_fkey FOREIGN KEY (role_id) REFERENCES public.roles(id),
CONSTRAINT role_permissions_permission_id_fkey FOREIGN KEY (permission_id) REFERENCES public.permissions(id)
);
CREATE TABLE public.roles (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL UNIQUE,
description text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT roles_pkey PRIMARY KEY (id)
);
CREATE TABLE public.saved_views (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL,
description text,
user_id text,
filters jsonb DEFAULT '{}'::jsonb,
layout_type text NOT NULL,
camera_state jsonb NOT NULL,
hidden_node_ids ARRAY DEFAULT '{}'::text[],
hidden_edge_ids ARRAY DEFAULT '{}'::text[],
node_color_property text,
node_size_property text,
edge_style_property text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT saved_views_pkey PRIMARY KEY (id)
);
CREATE TABLE public.scheduled_messages (
id text NOT NULL,
guild_id text,
channel_id text,
type text,
content text,
embed_data jsonb,
send_time timestamp with time zone,
created_by text,
status text DEFAULT 'pending'::text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT scheduled_messages_pkey PRIMARY KEY (id)
);
CREATE TABLE public.scrub_logs (
id character varying NOT NULL DEFAULT (gen_random_uuid())::character varying,
user_id character varying,
original_length integer NOT NULL,
scrubbed_length integer NOT NULL,
detection_count integer NOT NULL DEFAULT 0,
detection_types ARRAY,
status text NOT NULL,
ip_address text,
timestamp timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT scrub_logs_pkey PRIMARY KEY (id),
CONSTRAINT scrub_logs_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id)
);
CREATE TABLE public.server_config (
guild_id text NOT NULL,
welcome_channel text,
goodbye_channel text,
modlog_channel text,
level_up_channel text,
auto_role text,
verified_role text,
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT server_config_pkey PRIMARY KEY (guild_id)
);
CREATE TABLE public.service_inquiries (
id uuid NOT NULL DEFAULT gen_random_uuid(),
service_id uuid NOT NULL,
service_title text NOT NULL,
name text NOT NULL,
email text NOT NULL,
message text,
status text NOT NULL DEFAULT 'pending'::text,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT service_inquiries_pkey PRIMARY KEY (id),
CONSTRAINT fk_service FOREIGN KEY (service_id) REFERENCES public.consultancy_services(id)
);
CREATE TABLE public.sessions (
id character varying NOT NULL DEFAULT (gen_random_uuid())::character varying,
user_id character varying NOT NULL,
username text NOT NULL,
token text NOT NULL,
expires_at timestamp without time zone NOT NULL,
created_at timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT sessions_pkey PRIMARY KEY (id),
CONSTRAINT sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.users(id)
);
CREATE TABLE public.shop_items (
id integer NOT NULL DEFAULT nextval('shop_items_id_seq'::regclass),
guild_id character varying NOT NULL,
name character varying NOT NULL,
description text,
price integer NOT NULL,
item_type character varying NOT NULL,
item_data jsonb DEFAULT '{}'::jsonb,
stock integer,
enabled boolean DEFAULT true,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT shop_items_pkey PRIMARY KEY (id)
);
CREATE TABLE public.shorts (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
video_url text NOT NULL,
description text,
likes_count integer NOT NULL DEFAULT 0,
comments_count integer NOT NULL DEFAULT 0,
shares_count integer NOT NULL DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT shorts_pkey PRIMARY KEY (id),
CONSTRAINT shorts_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.showcase_contributors (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid NOT NULL,
name text NOT NULL,
title text,
avatar text,
CONSTRAINT showcase_contributors_pkey PRIMARY KEY (id),
CONSTRAINT showcase_contributors_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.showcase_projects(id)
);
CREATE TABLE public.showcase_project_links (
id uuid NOT NULL DEFAULT gen_random_uuid(),
project_id uuid NOT NULL,
label text NOT NULL,
href text NOT NULL,
CONSTRAINT showcase_project_links_pkey PRIMARY KEY (id),
CONSTRAINT showcase_project_links_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.showcase_projects(id)
);
CREATE TABLE public.showcase_projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title text NOT NULL,
org_unit text CHECK (org_unit = ANY (ARRAY['Studio'::text, 'Labs'::text, 'Platform'::text, 'Community'::text])),
role text,
timeframe text,
description text,
tags ARRAY NOT NULL DEFAULT '{}'::text[],
image text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT showcase_projects_pkey PRIMARY KEY (id)
);
CREATE TABLE public.site_config (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL UNIQUE,
site_name text,
site_description text,
logo_url text,
favicon_url text,
primary_color text,
secondary_color text,
updated_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
maintenance_ends_at timestamp with time zone,
system_status text NOT NULL DEFAULT 'online'::text,
system_status_message text,
maintenance_mode boolean DEFAULT false,
status_updates jsonb DEFAULT '[]'::jsonb,
CONSTRAINT site_config_pkey PRIMARY KEY (id),
CONSTRAINT fk_site_id FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.site_context (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
site_id uuid NOT NULL,
role text NOT NULL DEFAULT 'member'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT site_context_pkey PRIMARY KEY (id),
CONSTRAINT site_context_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.site_metrics (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
metric_name text NOT NULL,
metric_value text NOT NULL,
display_order integer,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT site_metrics_pkey PRIMARY KEY (id),
CONSTRAINT fk_site_id FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.site_settings (
key text NOT NULL,
value jsonb NOT NULL DEFAULT '{}'::jsonb,
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT site_settings_pkey PRIMARY KEY (key)
);
CREATE TABLE public.social_links (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
name text NOT NULL,
url text NOT NULL,
icon text NOT NULL,
display_order smallint,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT social_links_pkey PRIMARY KEY (id)
);
CREATE TABLE public.sponsors (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid NOT NULL,
name text NOT NULL,
logo_url text,
website_url text,
display_order integer,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT sponsors_pkey PRIMARY KEY (id),
CONSTRAINT fk_site FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.sprints (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name character varying NOT NULL,
description text,
start_date date NOT NULL,
end_date date NOT NULL,
total_points integer DEFAULT 0,
completed_points integer DEFAULT 0,
status character varying DEFAULT 'active'::character varying,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT sprints_pkey PRIMARY KEY (id)
);
CREATE TABLE public.staff_contractors (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid UNIQUE,
email text NOT NULL UNIQUE,
full_name text NOT NULL,
position text,
company text,
phone text,
avatar_url text,
contract_type text DEFAULT 'contractor'::text CHECK (contract_type = ANY (ARRAY['contractor'::text, 'consultant'::text, 'partner'::text])),
is_active boolean DEFAULT true,
start_date date,
end_date date,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
location text,
CONSTRAINT staff_contractors_pkey PRIMARY KEY (id),
CONSTRAINT staff_contractors_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.staff_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid UNIQUE,
email text NOT NULL UNIQUE,
full_name text NOT NULL,
position text,
department text,
phone text,
avatar_url text,
role text DEFAULT 'employee'::text CHECK (role = ANY (ARRAY['owner'::text, 'admin'::text, 'founder'::text, 'staff'::text, 'employee'::text])),
is_active boolean DEFAULT true,
hired_date date,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
location text,
CONSTRAINT staff_members_pkey PRIMARY KEY (id),
CONSTRAINT staff_members_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.stripe_accounts (
id uuid NOT NULL,
stripe_account_id text NOT NULL UNIQUE,
charges_enabled boolean NOT NULL DEFAULT false,
payouts_enabled boolean NOT NULL DEFAULT false,
details_submitted boolean NOT NULL DEFAULT false,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT stripe_accounts_pkey PRIMARY KEY (id),
CONSTRAINT stripe_accounts_id_fkey FOREIGN KEY (id) REFERENCES public.profiles(id)
);
CREATE TABLE public.studio_projects (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
title text NOT NULL,
description text,
likes integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT studio_projects_pkey PRIMARY KEY (id)
);
CREATE TABLE public.survey_responses (
id uuid NOT NULL DEFAULT gen_random_uuid(),
survey_id uuid NOT NULL,
user_id uuid NOT NULL,
responses jsonb,
submitted_at timestamp with time zone DEFAULT now(),
CONSTRAINT survey_responses_pkey PRIMARY KEY (id),
CONSTRAINT survey_responses_survey_id_fkey FOREIGN KEY (survey_id) REFERENCES public.feedback_surveys(id),
CONSTRAINT survey_responses_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.system_settings (
key text NOT NULL,
value jsonb,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT system_settings_pkey PRIMARY KEY (key)
);
CREATE TABLE public.team_activity_log (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
username character varying NOT NULL,
activity_type character varying NOT NULL,
activity_metadata jsonb,
points integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT team_activity_log_pkey PRIMARY KEY (id),
CONSTRAINT team_activity_log_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.team_members (
id uuid NOT NULL DEFAULT gen_random_uuid(),
profile_id uuid UNIQUE,
name text NOT NULL,
role text NOT NULL,
bio text,
avatar_url text,
social_links jsonb,
order_index integer DEFAULT 0,
created_at timestamp with time zone NOT NULL DEFAULT timezone('utc'::text, now()),
CONSTRAINT team_members_pkey PRIMARY KEY (id),
CONSTRAINT team_members_profile_id_fkey FOREIGN KEY (profile_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.team_memberships (
team_id uuid NOT NULL,
user_id uuid NOT NULL,
role text NOT NULL DEFAULT 'member'::text,
status text NOT NULL DEFAULT 'active'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT team_memberships_pkey PRIMARY KEY (team_id, user_id),
CONSTRAINT team_memberships_team_id_fkey FOREIGN KEY (team_id) REFERENCES public.teams(id),
CONSTRAINT team_memberships_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.team_presence (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
discord_user_id character varying NOT NULL,
discord_username character varying NOT NULL,
status text,
is_online boolean DEFAULT true,
last_seen timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT team_presence_pkey PRIMARY KEY (id),
CONSTRAINT team_presence_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.teams (
id uuid NOT NULL DEFAULT gen_random_uuid(),
owner_id uuid NOT NULL,
name text NOT NULL,
slug text UNIQUE,
description text,
visibility text NOT NULL DEFAULT 'private'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
updated_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT teams_pkey PRIMARY KEY (id),
CONSTRAINT teams_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.tickets (
id uuid NOT NULL DEFAULT gen_random_uuid(),
site_id uuid,
project_id uuid,
created_by uuid,
assigned_to uuid,
title text NOT NULL,
description text,
status text DEFAULT 'Open'::text,
priority text DEFAULT 'Medium'::text,
type text,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT tickets_pkey PRIMARY KEY (id),
CONSTRAINT tickets_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id),
CONSTRAINT tickets_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.projects(id),
CONSTRAINT tickets_created_by_fkey FOREIGN KEY (created_by) REFERENCES public.profiles(id),
CONSTRAINT tickets_assigned_to_fkey FOREIGN KEY (assigned_to) REFERENCES public.profiles(id)
);
CREATE TABLE public.time_off_requests (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
site_id uuid,
start_date date NOT NULL,
end_date date NOT NULL,
reason text,
status text DEFAULT 'Pending'::text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT time_off_requests_pkey PRIMARY KEY (id),
CONSTRAINT time_off_requests_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT time_off_requests_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.time_tracking (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
site_id uuid,
clock_in timestamp with time zone NOT NULL,
clock_out timestamp with time zone,
notes text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT time_tracking_pkey PRIMARY KEY (id),
CONSTRAINT time_tracking_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT time_tracking_site_id_fkey FOREIGN KEY (site_id) REFERENCES public.aethex_sites(id)
);
CREATE TABLE public.timesheet_entries (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
work_date date NOT NULL,
total_hours numeric NOT NULL,
billable_hours numeric DEFAULT 0,
status character varying DEFAULT 'draft'::character varying,
approved_by uuid,
approved_at timestamp with time zone,
exported_to_nexus boolean DEFAULT false,
nexus_sync_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT timesheet_entries_pkey PRIMARY KEY (id),
CONSTRAINT timesheet_entries_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id),
CONSTRAINT timesheet_entries_approved_by_fkey FOREIGN KEY (approved_by) REFERENCES auth.users(id)
);
CREATE TABLE public.token_balances (
id bigint NOT NULL DEFAULT nextval('token_balances_id_seq'::regclass),
user_id uuid NOT NULL,
wallet_address text NOT NULL,
chain_id integer NOT NULL,
token_address text,
token_symbol text NOT NULL,
token_name text,
token_decimals integer DEFAULT 18,
balance numeric NOT NULL DEFAULT 0,
balance_usd numeric DEFAULT 0,
price_usd numeric DEFAULT 0,
last_synced_at timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT token_balances_pkey PRIMARY KEY (id),
CONSTRAINT token_balances_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.type_racer_games (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
username character varying NOT NULL,
challenge_text text NOT NULL,
wpm integer NOT NULL,
accuracy numeric NOT NULL,
time_seconds integer NOT NULL,
is_practice boolean DEFAULT true,
race_id uuid,
placement integer,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT type_racer_games_pkey PRIMARY KEY (id),
CONSTRAINT type_racer_games_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.user_achievements (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
achievement_id uuid,
site_id text,
created_at timestamp with time zone DEFAULT now(),
unlocked_at timestamp with time zone DEFAULT now(),
earned_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_achievements_pkey PRIMARY KEY (id),
CONSTRAINT user_achievements_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT user_achievements_achievement_id_fkey FOREIGN KEY (achievement_id) REFERENCES public.achievements(id)
);
CREATE TABLE public.user_activities (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
activity_type text,
message text,
metadata jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_activities_pkey PRIMARY KEY (id),
CONSTRAINT user_activities_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.user_aethex_badges (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
badge_id uuid NOT NULL,
unlocked_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT user_aethex_badges_pkey PRIMARY KEY (id),
CONSTRAINT user_aethex_badges_badge_id_fkey FOREIGN KEY (badge_id) REFERENCES public.aethex_badges(id),
CONSTRAINT user_aethex_badges_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id)
);
CREATE TABLE public.user_connections (
user_id uuid NOT NULL,
connection_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT user_connections_pkey PRIMARY KEY (user_id, connection_id),
CONSTRAINT user_connections_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id),
CONSTRAINT user_connections_connection_id_fkey FOREIGN KEY (connection_id) REFERENCES auth.users(id)
);
CREATE TABLE public.user_email_links (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
email text NOT NULL UNIQUE,
is_primary boolean DEFAULT false,
verified_at timestamp with time zone DEFAULT now(),
linked_at timestamp with time zone DEFAULT now(),
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_email_links_pkey PRIMARY KEY (id),
CONSTRAINT user_email_links_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.user_experience_link (
id uuid NOT NULL DEFAULT gen_random_uuid(),
experience_id uuid NOT NULL,
asset_id uuid NOT NULL,
asset_type text NOT NULL,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_experience_link_pkey PRIMARY KEY (id),
CONSTRAINT experience_assets_experience_id_fkey FOREIGN KEY (experience_id) REFERENCES public.experiences(id),
CONSTRAINT experience_assets_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES public.assets(id)
);
CREATE TABLE public.user_favorites (
id bigint NOT NULL DEFAULT nextval('user_favorites_id_seq'::regclass),
user_id uuid NOT NULL,
asset_id bigint,
collection_id bigint,
listing_id bigint,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_favorites_pkey PRIMARY KEY (id),
CONSTRAINT user_favorites_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id),
CONSTRAINT user_favorites_asset_id_fkey FOREIGN KEY (asset_id) REFERENCES public.nft_assets(id),
CONSTRAINT user_favorites_collection_id_fkey FOREIGN KEY (collection_id) REFERENCES public.nft_collections(id),
CONSTRAINT user_favorites_listing_id_fkey FOREIGN KEY (listing_id) REFERENCES public.marketplace_listings(id)
);
CREATE TABLE public.user_follows (
id uuid NOT NULL DEFAULT gen_random_uuid(),
follower_id uuid NOT NULL,
following_id uuid NOT NULL,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT user_follows_pkey PRIMARY KEY (id),
CONSTRAINT user_follows_follower_id_fkey FOREIGN KEY (follower_id) REFERENCES public.user_profiles(id),
CONSTRAINT user_follows_following_id_fkey FOREIGN KEY (following_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.user_interests (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
user_id uuid,
interest text NOT NULL,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_interests_pkey PRIMARY KEY (id),
CONSTRAINT user_interests_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.user_mrpiglr_site_badges (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
badge_id uuid NOT NULL,
unlocked_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT user_mrpiglr_site_badges_pkey PRIMARY KEY (id),
CONSTRAINT user_mrpiglr_site_badges_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT user_mrpiglr_site_badges_badge_id_fkey FOREIGN KEY (badge_id) REFERENCES public.mrpiglr_site_badges(id)
);
CREATE TABLE public.user_profiles (
id uuid NOT NULL,
username text UNIQUE,
full_name text,
avatar_url text,
user_type USER-DEFINED NOT NULL,
experience_level USER-DEFINED DEFAULT 'beginner'::experience_level_enum,
bio text,
location text,
website_url text,
github_url text,
twitter_url text,
linkedin_url text,
total_xp integer DEFAULT 0,
level integer DEFAULT 1,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
current_streak integer DEFAULT 0,
longest_streak integer DEFAULT 0,
last_streak_at date,
loyalty_points integer DEFAULT 0,
reputation_score integer DEFAULT 0,
wallet_address character varying DEFAULT NULL::character varying UNIQUE,
show_in_creator_directory boolean NOT NULL DEFAULT false,
arms ARRAY DEFAULT '{}'::text[],
roles ARRAY DEFAULT '{}'::text[],
last_active_at timestamp with time zone DEFAULT now(),
streak_days integer DEFAULT 0,
roblox_user_id text UNIQUE,
roblox_username text,
unity_player_id text UNIQUE,
unreal_player_id text UNIQUE,
godot_player_id text UNIQUE,
merged_to_user_id uuid,
aethex_domain text,
discord_id text UNIQUE,
discord_username text,
is_architect boolean DEFAULT false,
xp integer DEFAULT 0,
daily_streak integer DEFAULT 0,
last_daily timestamp with time zone,
last_xp_message timestamp with time zone,
badges jsonb DEFAULT '[]'::jsonb,
CONSTRAINT user_profiles_pkey PRIMARY KEY (id),
CONSTRAINT user_profiles_id_fkey FOREIGN KEY (id) REFERENCES auth.users(id),
CONSTRAINT user_profiles_merged_to_user_id_fkey FOREIGN KEY (merged_to_user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.user_rewards (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
reward_id uuid NOT NULL,
claimed_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT user_rewards_pkey PRIMARY KEY (id),
CONSTRAINT user_rewards_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT user_rewards_reward_id_fkey FOREIGN KEY (reward_id) REFERENCES public.rewards(id)
);
CREATE TABLE public.user_roles (
user_id uuid NOT NULL,
role_id uuid NOT NULL,
CONSTRAINT user_roles_pkey PRIMARY KEY (user_id, role_id),
CONSTRAINT user_roles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT user_roles_role_id_fkey FOREIGN KEY (role_id) REFERENCES public.roles(id)
);
CREATE TABLE public.user_stats (
id integer NOT NULL DEFAULT nextval('user_stats_id_seq'::regclass),
user_id uuid,
guild_id character varying NOT NULL,
messages_sent integer DEFAULT 0,
reactions_given integer DEFAULT 0,
reactions_received integer DEFAULT 0,
voice_minutes integer DEFAULT 0,
commands_used integer DEFAULT 0,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_stats_pkey PRIMARY KEY (id)
);
CREATE TABLE public.user_titles (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid,
title_id uuid,
unlocked_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_titles_pkey PRIMARY KEY (id),
CONSTRAINT user_titles_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT user_titles_title_id_fkey FOREIGN KEY (title_id) REFERENCES public.rewards(id)
);
CREATE TABLE public.user_wallets (
id bigint NOT NULL DEFAULT nextval('user_wallets_id_seq'::regclass),
user_id uuid NOT NULL,
wallet_address text NOT NULL UNIQUE,
chain_id integer NOT NULL,
chain_name text,
is_primary boolean DEFAULT false,
verified_at timestamp with time zone,
created_at timestamp with time zone DEFAULT now(),
updated_at timestamp with time zone DEFAULT now(),
CONSTRAINT user_wallets_pkey PRIMARY KEY (id),
CONSTRAINT user_wallets_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id)
);
CREATE TABLE public.users (
id character varying NOT NULL DEFAULT (gen_random_uuid())::character varying,
username text NOT NULL UNIQUE,
password text NOT NULL,
is_active boolean NOT NULL DEFAULT true,
is_admin boolean NOT NULL DEFAULT false,
created_at timestamp without time zone NOT NULL DEFAULT now(),
CONSTRAINT users_pkey PRIMARY KEY (id)
);
CREATE TABLE public.voice_states (
discord_user_id character varying NOT NULL,
discord_username character varying NOT NULL,
channel_id character varying NOT NULL,
guild_id character varying NOT NULL,
joined_at timestamp with time zone DEFAULT now(),
last_updated timestamp with time zone DEFAULT now(),
CONSTRAINT voice_states_pkey PRIMARY KEY (discord_user_id)
);
CREATE TABLE public.volunteer_applications (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
opportunity_id uuid NOT NULL,
message text,
status text NOT NULL DEFAULT 'pending'::text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT volunteer_applications_pkey PRIMARY KEY (id),
CONSTRAINT volunteer_applications_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.profiles(id),
CONSTRAINT volunteer_applications_opportunity_id_fkey FOREIGN KEY (opportunity_id) REFERENCES public.volunteer_opportunities(id)
);
CREATE TABLE public.volunteer_opportunities (
id uuid NOT NULL DEFAULT gen_random_uuid(),
title text NOT NULL,
description text NOT NULL,
responsibilities ARRAY,
time_commitment text,
skills_required ARRAY,
is_active boolean NOT NULL DEFAULT true,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT volunteer_opportunities_pkey PRIMARY KEY (id)
);
CREATE TABLE public.volunteer_testimonials (
id uuid NOT NULL DEFAULT gen_random_uuid(),
name text NOT NULL,
role text NOT NULL,
testimonial text NOT NULL,
avatar_url text,
created_at timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT volunteer_testimonials_pkey PRIMARY KEY (id)
);
CREATE TABLE public.waitlist (
id uuid NOT NULL DEFAULT gen_random_uuid(),
email text NOT NULL UNIQUE,
created_at timestamp with time zone NOT NULL DEFAULT now(),
segment text,
site_id uuid,
CONSTRAINT waitlist_pkey PRIMARY KEY (id)
);
CREATE TABLE public.warnings (
id integer NOT NULL DEFAULT nextval('warnings_id_seq'::regclass),
guild_id text NOT NULL,
user_id text NOT NULL,
user_tag text,
moderator_id text NOT NULL,
moderator_tag text,
reason text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT warnings_pkey PRIMARY KEY (id)
);
CREATE TABLE public.web3_nonces (
id uuid NOT NULL DEFAULT gen_random_uuid(),
wallet_address text NOT NULL UNIQUE CHECK (wallet_address ~ '^0x[a-fA-F0-9]{40}$'::text),
nonce text NOT NULL,
used_at timestamp without time zone,
expires_at timestamp without time zone NOT NULL,
created_at timestamp without time zone DEFAULT now(),
CONSTRAINT web3_nonces_pkey PRIMARY KEY (id)
);
CREATE TABLE public.web3_wallets (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
wallet_address text NOT NULL UNIQUE CHECK (wallet_address ~ '^0x[a-fA-F0-9]{40}$'::text),
chain_id integer DEFAULT 1,
linked_at timestamp without time zone DEFAULT now(),
last_verified timestamp without time zone,
CONSTRAINT web3_wallets_pkey PRIMARY KEY (id),
CONSTRAINT web3_wallets_user_id_fkey FOREIGN KEY (user_id) REFERENCES public.user_profiles(id)
);
CREATE TABLE public.work_sessions (
id uuid NOT NULL DEFAULT gen_random_uuid(),
user_id uuid NOT NULL,
project_id uuid,
task_id uuid,
clock_in timestamp with time zone NOT NULL DEFAULT now(),
clock_out timestamp with time zone,
duration_minutes integer DEFAULT (EXTRACT(epoch FROM (clock_out - clock_in)) / (60)::numeric),
source character varying DEFAULT 'web'::character varying,
notes text,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT work_sessions_pkey PRIMARY KEY (id),
CONSTRAINT work_sessions_user_id_fkey FOREIGN KEY (user_id) REFERENCES auth.users(id),
CONSTRAINT work_sessions_project_id_fkey FOREIGN KEY (project_id) REFERENCES public.gameforge_projects(id),
CONSTRAINT work_sessions_task_id_fkey FOREIGN KEY (task_id) REFERENCES public.gameforge_tasks(id)
);
CREATE TABLE public.xp_config (
id integer NOT NULL DEFAULT nextval('xp_config_id_seq'::regclass),
guild_id character varying NOT NULL UNIQUE,
xp_per_message integer DEFAULT 15,
xp_cooldown integer DEFAULT 60,
voice_xp_per_minute integer DEFAULT 5,
reaction_xp integer DEFAULT 5,
difficulty character varying DEFAULT 'normal'::character varying,
bonus_channels jsonb DEFAULT '[]'::jsonb,
role_multipliers jsonb DEFAULT '{}'::jsonb,
created_at timestamp with time zone DEFAULT now(),
CONSTRAINT xp_config_pkey PRIMARY KEY (id)
);