Target Schema — Nxtgauge Database
This document defines the target state for the Nxtgauge PostgreSQL schema based on the single source of truth.
1. Identity & Access Control
users
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| email |
TEXT |
Unique |
| phone |
TEXT |
Unique, nullable |
| password_hash |
TEXT |
|
| account_type |
TEXT |
INDIVIDUAL, COMPANY |
| status |
TEXT |
ACTIVE, PENDING, SUSPENDED |
| last_login_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
refresh_tokens
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| token_hash |
TEXT |
Unique |
| expires_at |
TIMESTAMP |
|
| revoked |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
user_sessions
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| session_token |
TEXT |
Unique |
| ip_address |
TEXT |
|
| user_agent |
TEXT |
|
| expires_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
user_settings
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users, Unique |
| settings_json |
JSONB |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
roles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| key |
TEXT |
Unique |
| name |
TEXT |
|
| audience |
TEXT |
INTERNAL, EXTERNAL |
| description |
TEXT |
|
| department_id |
UUID |
FK → departments |
| can_approve_requests |
BOOLEAN |
|
| can_manage_system_settings |
BOOLEAN |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
permissions
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| key |
TEXT |
Unique |
| name |
TEXT |
|
| description |
TEXT |
|
| created_at |
TIMESTAMP |
|
role_permissions
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| role_id |
UUID |
FK → roles |
| permission_key |
TEXT |
FK → permissions |
| created_at |
TIMESTAMP |
|
user_roles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| role_id |
UUID |
FK → roles |
| status |
TEXT |
PENDING, APPROVED, REJECTED |
| approved_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
employees
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users, Unique |
| employee_code |
TEXT |
|
| department_id |
UUID |
FK → departments |
| designation_id |
UUID |
FK → designations |
| joining_date |
DATE |
|
| employment_status |
TEXT |
ACTIVE, INACTIVE, TERMINATED |
| manager_employee_id |
UUID |
Self-reference |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
departments
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| name |
TEXT |
Unique |
| code |
TEXT |
Unique |
| description |
TEXT |
|
| department_head |
TEXT |
|
| department_email |
TEXT |
|
| is_active |
BOOLEAN |
|
| visibility |
TEXT |
INTERNAL |
| transfers_enabled |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
designations
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| name |
TEXT |
Unique |
| code |
TEXT |
Unique |
| department_id |
UUID |
FK → departments |
| description |
TEXT |
|
| level |
TEXT |
|
| can_manage_team |
BOOLEAN |
|
| can_approve |
BOOLEAN |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
2. User Role Profiles (NEW ROOT)
user_role_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| role_key |
TEXT |
photographer, tutor, developer, etc. |
| display_name |
TEXT |
|
| bio |
TEXT |
|
| location |
TEXT |
|
| avatar_url |
TEXT |
|
| phone |
TEXT |
|
| email |
TEXT |
|
| status |
TEXT |
DRAFT, ACTIVE, SUSPENDED |
| verification_status |
TEXT |
PENDING, VERIFIED, REJECTED |
| approval_status |
TEXT |
PENDING, APPROVED, REJECTED |
| rejection_reason |
TEXT |
|
| approved_at |
TIMESTAMP |
|
| verified_at |
TIMESTAMP |
|
| is_profile_public |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
Indexes:
UNIQUE(user_id, role_key)
INDEX(status)
INDEX(verification_status)
INDEX(approval_status)
3. Role Extension Tables
photographer_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| specialties |
TEXT[] |
|
| camera_brands |
TEXT[] |
|
| studio_available |
BOOLEAN |
|
| outdoor_shoots |
BOOLEAN |
|
| travel_radius_km |
INTEGER |
|
| starting_price_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
tutor_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| subjects |
TEXT[] |
|
| board_types |
TEXT[] |
|
| qualification |
TEXT |
|
| teaches_online |
BOOLEAN |
|
| teaches_offline |
BOOLEAN |
|
| experience_years |
INTEGER |
|
| hourly_rate_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
makeup_artist_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| specializations |
TEXT[] |
|
| kit_brands |
TEXT[] |
|
| home_service |
BOOLEAN |
|
| studio_available |
BOOLEAN |
|
| starting_price_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
developer_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| tech_stack |
TEXT[] |
|
| experience_years |
INTEGER |
|
| availability |
TEXT |
FULL_TIME, PART_TIME, FREELANCE |
| hourly_rate_inr |
INTEGER |
in paise |
| remote_ok |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
NO external links (github_url, portfolio_url removed)
video_editor_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| software_skills |
TEXT[] |
|
| style_tags |
TEXT[] |
|
| turnaround_days |
INTEGER |
|
| starting_price_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
NO reel_url
graphic_designer_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| design_tools |
TEXT[] |
|
| style_tags |
TEXT[] |
|
| brand_experience |
BOOLEAN |
|
| starting_price_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
NO portfolio_url
social_media_manager_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| platforms |
TEXT[] |
|
| industries |
TEXT[] |
|
| content_types |
TEXT[] |
|
| avg_follower_growth_pct |
INTEGER |
|
| starting_price_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
fitness_trainer_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| disciplines |
TEXT[] |
|
| certifications |
TEXT[] |
|
| online_sessions |
BOOLEAN |
|
| home_visits |
BOOLEAN |
|
| gym_based |
BOOLEAN |
|
| per_session_rate_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
catering_service_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| business_name |
TEXT |
|
| cuisine_types |
TEXT[] |
|
| event_types |
TEXT[] |
|
| min_guests |
INTEGER |
|
| max_guests |
INTEGER |
|
| has_setup_team |
BOOLEAN |
|
| has_serving_staff |
BOOLEAN |
|
| price_per_head_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
ugc_content_creator_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles, Unique |
| niche_tags |
TEXT[] |
|
| content_formats |
TEXT[] |
|
| platforms |
TEXT[] |
|
| turnaround_days |
INTEGER |
|
| starting_price_inr |
INTEGER |
in paise |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
4. Other Profiles
company_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users, Unique |
| company_name |
TEXT |
|
| business_type |
TEXT |
|
| industry |
TEXT |
|
| contact_person_name |
TEXT |
|
| email |
TEXT |
|
| phone |
TEXT |
|
| location |
TEXT |
|
| bio |
TEXT |
|
| status |
TEXT |
|
| verification_status |
TEXT |
|
| approval_status |
TEXT |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
customer_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users, Unique |
| display_name |
TEXT |
|
| phone |
TEXT |
|
| email |
TEXT |
|
| location |
TEXT |
|
| status |
TEXT |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
candidate_profiles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users, Unique |
| display_name |
TEXT |
|
| bio |
TEXT |
|
| location |
TEXT |
|
| experience_years |
INTEGER |
|
| preferred_roles |
TEXT[] |
|
| expected_salary_inr |
INTEGER |
|
| resume_file_url |
TEXT |
|
| status |
TEXT |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
5. Portfolio Domain
portfolio_items
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles |
| title |
TEXT |
|
| description |
TEXT |
|
| tags |
TEXT[] |
|
| display_order |
INTEGER |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
NO external links
portfolio_images
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| portfolio_item_id |
UUID |
FK → portfolio_items |
| file_url |
TEXT |
|
| display_order |
INTEGER |
|
| created_at |
TIMESTAMP |
|
services
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles |
| name |
TEXT |
|
| description |
TEXT |
|
| price |
INTEGER |
in paise |
| duration_minutes |
INTEGER |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
6. Verification Domain
verification_requests
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_role_profile_id |
UUID |
FK → user_role_profiles |
| verification_type |
TEXT |
IDENTITY, BUSINESS, DOCUMENT |
| status |
TEXT |
PENDING, APPROVED, REJECTED |
| submitted_at |
TIMESTAMP |
|
| reviewed_at |
TIMESTAMP |
|
| reviewed_by_user_id |
UUID |
FK → users |
| remarks |
TEXT |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
verification_documents
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| verification_request_id |
UUID |
FK → verification_requests |
| document_type |
TEXT |
|
| file_url |
TEXT |
|
| file_name |
TEXT |
|
| mime_type |
TEXT |
|
| status |
TEXT |
PENDING, APPROVED, REJECTED |
| uploaded_at |
TIMESTAMP |
|
| reviewed_at |
TIMESTAMP |
|
| reviewed_by_user_id |
UUID |
FK → users |
| remarks |
TEXT |
|
| created_at |
TIMESTAMP |
|
verification_logs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| verification_request_id |
UUID |
FK → verification_requests |
| action |
TEXT |
SUBMITTED, APPROVED, REJECTED, DOCUMENT_REQUESTED |
| old_status |
TEXT |
|
| new_status |
TEXT |
|
| acted_by_user_id |
UUID |
FK → users |
| remarks |
TEXT |
|
| created_at |
TIMESTAMP |
|
7. Approval Domain
approval_requests
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| entity_type |
TEXT |
job, lead, profile, company |
| entity_id |
UUID |
|
| approval_type |
TEXT |
CONTENT, VERIFICATION, FEATURE |
| status |
TEXT |
PENDING, APPROVED, REJECTED |
| submitted_by_user_id |
UUID |
FK → users |
| reviewed_by_user_id |
UUID |
FK → users |
| submitted_at |
TIMESTAMP |
|
| reviewed_at |
TIMESTAMP |
|
| remarks |
TEXT |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
approval_logs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| approval_request_id |
UUID |
FK → approval_requests |
| action |
TEXT |
SUBMITTED, APPROVED, REJECTED |
| old_status |
TEXT |
|
| new_status |
TEXT |
|
| acted_by_user_id |
UUID |
FK → users |
| remarks |
TEXT |
|
| created_at |
TIMESTAMP |
|
8. Marketplace Domain
jobs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| company_profile_id |
UUID |
FK → company_profiles |
| posted_by_user_id |
UUID |
FK → users |
| title |
TEXT |
|
| description |
TEXT |
|
| location |
TEXT |
|
| employment_type |
TEXT |
FULL_TIME, PART_TIME, CONTRACT |
| mode_of_work |
TEXT |
ONSITE, REMOTE, HYBRID |
| budget_inr |
INTEGER |
|
| salary_range_json |
JSONB |
|
| status |
TEXT |
DRAFT, PENDING, LIVE, CLOSED |
| approved_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
job_applications (RENAMED from applications)
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| job_id |
UUID |
FK → jobs |
| applicant_user_id |
UUID |
FK → users |
| status |
TEXT |
APPLIED, SHORTLISTED, INTERVIEW, OFFERED, REJECTED |
| cover_note |
TEXT |
|
| applied_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
leads (RENAMED from requirements)
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| created_by_user_id |
UUID |
FK → users |
| profession_key |
TEXT |
|
| title |
TEXT |
|
| description |
TEXT |
|
| location |
TEXT |
|
| budget_inr |
INTEGER |
|
| required_date |
DATE |
|
| status |
TEXT |
DRAFT, PENDING, OPEN, CLOSED |
| approved_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
lead_requests
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| lead_id |
UUID |
FK → leads |
| user_role_profile_id |
UUID |
FK → user_role_profiles |
| status |
TEXT |
PENDING, ACCEPTED, REJECTED |
| remarks |
TEXT |
|
| requested_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
reviews
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| reviewer_user_id |
UUID |
FK → users |
| entity_type |
TEXT |
professional, company |
| entity_id |
UUID |
|
| rating |
SMALLINT |
1-5 |
| review_text |
TEXT |
|
| status |
TEXT |
PENDING, PUBLISHED, HIDDEN |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
9. Finance Domain
pricing_packages
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| name |
TEXT |
|
| description |
TEXT |
|
| package_type |
TEXT |
JOB_POSTING, CONTACT_VIEWS, TRACECOIN_BUNDLE |
| price_inr |
INTEGER |
in paise |
| tracecoins_included |
INTEGER |
|
| validity_days |
INTEGER |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
tracecoin_wallets
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users, Unique |
| current_balance |
INTEGER |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
tracecoin_ledger (IMMUTABLE)
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| wallet_id |
UUID |
FK → tracecoin_wallets |
| transaction_type |
TEXT |
CREDIT, DEBIT |
| amount |
INTEGER |
|
| balance_after |
INTEGER |
|
| reference_type |
TEXT |
JOB, LEAD, PURCHASE, BONUS |
| reference_id |
UUID |
|
| remarks |
TEXT |
|
| created_at |
TIMESTAMP |
|
orders
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| order_type |
TEXT |
PACKAGE, SERVICE |
| subtotal_inr |
INTEGER |
|
| discount_inr |
INTEGER |
|
| tax_inr |
INTEGER |
|
| total_inr |
INTEGER |
|
| status |
TEXT |
PENDING, COMPLETED, CANCELLED |
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
order_items
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| order_id |
UUID |
FK → orders |
| item_type |
TEXT |
PACKAGE, SERVICE |
| item_id |
UUID |
|
| item_name |
TEXT |
|
| quantity |
INTEGER |
|
| unit_price_inr |
INTEGER |
|
| total_price_inr |
INTEGER |
|
| created_at |
TIMESTAMP |
|
invoices
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| order_id |
UUID |
FK → orders |
| user_id |
UUID |
FK → users |
| invoice_number |
TEXT |
Unique |
| subtotal_inr |
INTEGER |
|
| discount_inr |
INTEGER |
|
| tax_inr |
INTEGER |
|
| total_inr |
INTEGER |
|
| status |
TEXT |
ISSUED, PAID |
| issued_at |
TIMESTAMP |
|
| due_at |
TIMESTAMP |
|
| paid_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
payments
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| order_id |
UUID |
FK → orders |
| invoice_id |
UUID |
FK → invoices |
| user_id |
UUID |
FK → users |
| payment_gateway_config_id |
UUID |
FK → payment_gateway_configs |
| payment_method |
TEXT |
|
| provider_payment_ref |
TEXT |
|
| amount_inr |
INTEGER |
|
| currency_code |
TEXT |
INR |
| status |
TEXT |
PENDING, SUCCESS, FAILED |
| initiated_at |
TIMESTAMP |
|
| completed_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
payment_gateway_configs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| gateway_key |
TEXT |
RAZORPAY, STRIPE |
| display_name |
TEXT |
|
| config_json |
JSONB |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
payment_transactions
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| payment_id |
UUID |
FK → payments |
| transaction_type |
TEXT |
INITIATED, COMPLETED, FAILED |
| provider_reference |
TEXT |
|
| request_payload_json |
JSONB |
|
| response_payload_json |
JSONB |
|
| status |
TEXT |
|
| created_at |
TIMESTAMP |
|
coupons
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| code |
TEXT |
Unique |
| description |
TEXT |
|
| discount_type |
TEXT |
PERCENT, FLAT |
| discount_value |
INTEGER |
|
| max_discount_inr |
INTEGER |
|
| min_order_value_inr |
INTEGER |
|
| valid_from |
TIMESTAMP |
|
| valid_to |
TIMESTAMP |
|
| usage_limit |
INTEGER |
NULL = unlimited |
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
coupon_redemptions (RENAMED from coupon_uses)
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| coupon_id |
UUID |
FK → coupons |
| user_id |
UUID |
FK → users |
| order_id |
UUID |
FK → orders |
| redeemed_at |
TIMESTAMP |
|
| discount_amount_inr |
INTEGER |
|
| created_at |
TIMESTAMP |
|
discount_rules
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| name |
TEXT |
|
| scope_type |
TEXT |
GLOBAL, CATEGORY, SERVICE |
| scope_id |
UUID |
|
| discount_type |
TEXT |
PERCENT, FLAT |
| discount_value |
INTEGER |
|
| starts_at |
TIMESTAMP |
|
| ends_at |
TIMESTAMP |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
tax_rules
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| name |
TEXT |
|
| tax_type |
TEXT |
GST, TCS |
| tax_rate |
DECIMAL |
|
| applies_to |
TEXT |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
10. Knowledge Base
kb_categories
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| name |
TEXT |
|
| slug |
TEXT |
Unique |
| description |
TEXT |
|
| display_order |
INTEGER |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
kb_sections
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| category_id |
UUID |
FK → kb_categories |
| name |
TEXT |
|
| slug |
TEXT |
|
| description |
TEXT |
|
| display_order |
INTEGER |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
kb_articles
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| category_id |
UUID |
FK → kb_categories |
| section_id |
UUID |
FK → kb_sections |
| title |
TEXT |
|
| slug |
TEXT |
Unique |
| summary |
TEXT |
|
| content_markdown |
TEXT |
|
| article_type |
TEXT |
HOW_TO, TROUBLESHOOTING, FAQ, FEATURE, POLICY |
| status |
TEXT |
DRAFT, PUBLISHED |
| audience_type |
TEXT |
INTERNAL, EXTERNAL, ALL |
| tags |
TEXT[] |
|
| author_user_id |
UUID |
FK → users |
| reviewed_by_user_id |
UUID |
FK → users |
| published_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
kb_article_feedback
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| article_id |
UUID |
FK → kb_articles |
| user_id |
UUID |
FK → users |
| is_helpful |
BOOLEAN |
|
| feedback_text |
TEXT |
|
| created_at |
TIMESTAMP |
|
11. Support System
support_tickets
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| created_by_user_id |
UUID |
FK → users |
| assigned_to_user_id |
UUID |
FK → users |
| category |
TEXT |
GENERAL, BILLING, TECHNICAL, ACCOUNT |
| priority |
TEXT |
LOW, NORMAL, HIGH, URGENT |
| status |
TEXT |
OPEN, IN_PROGRESS, RESOLVED, CLOSED |
| subject |
TEXT |
|
| description |
TEXT |
|
| related_entity_type |
TEXT |
|
| related_entity_id |
UUID |
|
| closed_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
support_ticket_messages
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| support_ticket_id |
UUID |
FK → support_tickets |
| sender_user_id |
UUID |
FK → users |
| message_body |
TEXT |
|
| attachment_url |
TEXT |
|
| is_internal |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
12. Notifications & Communication
notification_templates
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| template_key |
TEXT |
Unique |
| channel |
TEXT |
EMAIL, SMS, PUSH |
| title_template |
TEXT |
|
| body_template |
TEXT |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
notifications
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| channel |
TEXT |
EMAIL, SMS, PUSH, IN_APP |
| title |
TEXT |
|
| body |
TEXT |
|
| status |
TEXT |
PENDING, SENT, READ |
| related_entity_type |
TEXT |
|
| related_entity_id |
UUID |
|
| sent_at |
TIMESTAMP |
|
| read_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
email_logs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| user_id |
UUID |
FK → users |
| notification_template_id |
UUID |
FK → notification_templates |
| to_email |
TEXT |
|
| subject |
TEXT |
|
| body_snapshot |
TEXT |
|
| status |
TEXT |
PENDING, SENT, FAILED |
| provider_reference |
TEXT |
|
| error_message |
TEXT |
|
| sent_at |
TIMESTAMP |
|
| created_at |
TIMESTAMP |
|
smtp_configs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| provider_name |
TEXT |
|
| host |
TEXT |
|
| port |
INTEGER |
|
| username |
TEXT |
|
| encryption_mode |
TEXT |
SSL, TLS |
| from_name |
TEXT |
|
| from_email |
TEXT |
|
| is_default |
BOOLEAN |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
13. Dashboard & Config
dashboard_configs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| dashboard_type |
TEXT |
INTERNAL, EXTERNAL |
| owner_type |
TEXT |
ROLE, USER |
| owner_id |
UUID |
|
| name |
TEXT |
|
| layout_json |
JSONB |
|
| is_default |
BOOLEAN |
|
| is_active |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
dashboard_widgets
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| dashboard_config_id |
UUID |
FK → dashboard_configs |
| widget_key |
TEXT |
|
| widget_title |
TEXT |
|
| config_json |
JSONB |
|
| display_order |
INTEGER |
|
| width_units |
INTEGER |
|
| height_units |
INTEGER |
|
| is_visible |
BOOLEAN |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
runtime_configs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| config_group |
TEXT |
|
| config_key |
TEXT |
|
| config_value_json |
JSONB |
|
| is_active |
BOOLEAN |
|
| description |
TEXT |
|
| created_at |
TIMESTAMP |
|
| updated_at |
TIMESTAMP |
|
14. Audit Management
audit_logs
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| actor_user_id |
UUID |
FK → users |
| actor_employee_id |
UUID |
FK → employees |
| actor_type |
TEXT |
USER, EMPLOYEE, SYSTEM, CRON |
| action |
TEXT |
CREATE, UPDATE, DELETE, APPROVE, REJECT |
| entity_type |
TEXT |
|
| entity_id |
UUID |
|
| entity_label |
TEXT |
|
| module_key |
TEXT |
users, verification, jobs, leads, finance |
| source_type |
TEXT |
UI, API, WORKER, CRON |
| source_id |
UUID |
|
| request_id |
UUID |
|
| correlation_id |
UUID |
|
| ip_address |
TEXT |
|
| user_agent |
TEXT |
|
| status |
TEXT |
SUCCESS, FAILED |
| summary |
TEXT |
|
| metadata_json |
JSONB |
|
| created_at |
TIMESTAMP |
|
audit_log_changes
| Column |
Type |
Notes |
| id |
UUID |
Primary key |
| audit_log_id |
UUID |
FK → audit_logs |
| field_name |
TEXT |
|
| old_value_text |
TEXT |
|
| new_value_text |
TEXT |
|
| created_at |
TIMESTAMP |
|
15. Summary of Table Counts
| Domain |
Tables |
Status |
| Identity & Access |
10 |
Existing + user_sessions, user_settings |
| User Role Profiles |
1 |
NEW |
| Role Extensions |
10 |
Updated FK |
| Other Profiles |
3 |
company, customer, candidate |
| Portfolio |
3 |
Updated FK |
| Verification |
3 |
NEW structure |
| Approval |
2 |
NEW structure |
| Marketplace |
5 |
Renamed tables |
| Finance |
12 |
Expanded |
| Knowledge Base |
4 |
Added sections, feedback |
| Support |
2 |
Enhanced |
| Notifications |
4 |
Added templates, smtp |
| Dashboard |
3 |
Added widgets |
| Audit |
2 |
NEW |
| TOTAL |
64 |
|