# Schema Audit — Nxtgauge Database ## Current State Overview The Nxtgauge database contains **45+ tables** spread across migrations and init-db.sql. Below is the complete audit. --- ## 1. Current Table Inventory ### Identity & Access Control | Table | Status | Notes | | --------------------------- | -------- | --------------------------------------------------- | | `users` | ✅ Good | Has email, phone, password_hash, status, timestamps | | `refresh_tokens` | ✅ Good | Token storage for auth | | `roles` | ✅ Good | Role definitions | | `role_permissions` | ✅ Good | Permission assignments | | `user_roles` | ✅ Good | User-role associations | | `employees` | ✅ Good | Internal staff records | | `departments` | ✅ Good | Organization structure | | `designations` | ✅ Good | Job titles | | `user_settings` | ✅ Added | User preferences | | `account_deletion_requests` | ✅ Added | Deletion tracking | ### User Profiles — DUPLICATED STRUCTURE (PROBLEM) | Table | Status | Issue | | ------------------------------- | ------------- | ---------------------------------------------- | | `photographer_profiles` | ⚠️ | Has duplicated common fields | | `tutor_profiles` | ⚠️ | Has duplicated common fields | | `makeup_artist_profiles` | ⚠️ | Has duplicated common fields | | `developer_profiles` | ⚠️ | Has external links (github_url, portfolio_url) | | `video_editor_profiles` | ⚠️ | Has external links (reel_url) | | `graphic_designer_profiles` | ⚠️ | Has external links (portfolio_url) | | `social_media_manager_profiles` | ⚠️ | Has duplicated common fields | | `fitness_trainer_profiles` | ⚠️ | Has duplicated common fields | | `catering_service_profiles` | ⚠️ | Has duplicated common fields | | `ugc_content_creator_profiles` | ⚠️ | Has duplicated common fields | | `company_profiles` | ⚠️ | Has duplicated fields | | `customer_profiles` | ⚠️ | Has duplicated fields | | `job_seeker_profiles` | ⚠️ | Has duplicated fields | | `professionals` | ❌ Deprecated | Old root table, references user_id | ### Portfolio Domain | Table | Status | Issue | | ------------------ | ------- | ---------------------------------------------- | | `portfolio_items` | ⚠️ | References `professionals` table, needs update | | `portfolio_images` | ✅ Good | Simple image storage | | `services` | ⚠️ | References `professionals` table, needs update | ### Marketplace | Table | Status | Notes | | --------------- | ------- | --------------------------------------- | | `jobs` | ✅ Good | Job postings | | `applications` | ⚠️ | Should be renamed to `job_applications` | | `requirements` | ⚠️ | Should be renamed to `leads` | | `lead_requests` | ⚠️ | References `professionals` table | | `reviews` | ✅ Good | Reviews system | ### Verification & Approval (Mixed with Onboarding) | Table | Status | Issue | | ------------------------ | --------- | ------------------------ | | `onboarding_submissions` | ❌ Legacy | Tied to onboarding flow | | `submission_documents` | ❌ Legacy | Tied to onboarding | | `onboarding_states` | ❌ Legacy | Tied to onboarding | | `onboarding_configs` | ❌ Legacy | Tied to onboarding | | `verifications` | ⚠️ | Basic verification table | | `verification_logs` | ⚠️ | Basic verification logs | ### Finance Domain | Table | Status | Notes | | ------------------- | ------- | ------------------------------ | | `tracecoin_wallets` | ✅ Good | Wallet per user | | `tracecoin_ledger` | ✅ Good | Immutable ledger | | `pricing_packages` | ✅ Good | Package definitions | | `payments` | ✅ Good | Payment records | | `invoices` | ✅ Good | Invoice records | | `coupons` | ✅ Good | Coupon system | | `coupon_uses` | ⚠️ | Should be `coupon_redemptions` | | `discounts` | ✅ Good | Discount rules | ### Communication & Support | Table | Status | Notes | | ------------------------- | ------- | -------------------- | | `notifications` | ✅ Good | In-app notifications | | `email_logs` | ✅ Good | Email audit trail | | `support_tickets` | ✅ Good | Support system | | `support_ticket_messages` | ✅ Good | Ticket messages | ### Knowledge Base | Table | Status | Notes | | --------------- | ------- | ------------------------------------------- | | `kb_categories` | ✅ Good | KB categories | | `kb_articles` | ⚠️ | Missing `section_id`, `kb_article_feedback` | ### Dashboard & Config | Table | Status | Notes | | ------------------- | ------- | ------------------------ | | `dashboard_configs` | ✅ Good | Dashboard configurations | | `runtime_configs` | ✅ Good | Runtime feature flags | ### Audit & Logging | Table | Status | Issue | | ------------------- | ---------- | ------------------------- | | `activity_logs` | ⚠️ | Basic logging, incomplete | | `audit_logs` | ❌ Missing | Not implemented | | `audit_log_changes` | ❌ Missing | Not implemented | --- ## 2. Problems Identified ### Problem 1: Duplicated Profile Fields Every profile table has these duplicated fields: - `display_name`, `bio`, `location`, `status`, `rejection_reason`, `approved_at` **Impact**: Data redundancy, inconsistent updates, maintenance burden. ### Problem 2: Extension Tables Reference `user_id` Instead of Root Profile Current: `photographer_profiles.user_id` → `users.id` Target: `photographer_profiles.user_role_profile_id` → `user_role_profiles.id` **Impact**: Cannot support multiple role profiles per user properly. ### Problem 3: External Portfolio Links Tables with forbidden external links: - `developer_profiles`: `github_url`, `portfolio_url` - `video_editor_profiles`: `reel_url` - `graphic_designer_profiles`: `portfolio_url` **Impact**: Violates platform-native portfolio requirement. ### Problem 4: Table Names Not Aligned with Target | Current | Target | | -------------- | -------------------- | | `applications` | `job_applications` | | `requirements` | `leads` | | `coupon_uses` | `coupon_redemptions` | ### Problem 5: Missing Root Profile Table `user_role_profiles` does not exist. Users cannot have multiple role profiles properly. ### Problem 6: Missing Audit Infrastructure - No `audit_logs` table - No `audit_log_changes` table - Current `activity_logs` is incomplete ### Problem 7: Verification/Approval Tied to Onboarding - `onboarding_submissions`, `onboarding_configs`, `onboarding_states` are legacy - Need separate `verification_requests`, `approval_requests` ### Problem 8: Incomplete Knowledge Base - Missing `kb_sections` - Missing `kb_article_feedback` - Missing `kb_article_related` ### Problem 9: Missing Finance Tables - No `orders` / `order_items` - No `tax_rules` - No `payment_transactions` - No `payment_gateway_configs` --- ## 3. Page-Based Anti-Patterns The schema was influenced by admin pages rather than domain entities: | Page | Problem Table(s) | | --------------------- | ------------------------------------------------------------------- | | Onboarding Management | `onboarding_submissions`, `onboarding_configs`, `onboarding_states` | | Account Settings | Should be in `user_settings` | | Reviews | Mix of UI and domain | --- ## 4. Inconsistent Naming | Issue | Examples | | ----------------------- | ----------------------------------------------------------- | | Mixed naming | `job_type` vs `employment_type` | | Inconsistent timestamps | Some tables have `created_at`, some don't have `updated_at` | | UUID vs text | Some IDs are UUID, some referenced tables use text | --- ## 5. Recommendations 1. **Create `user_role_profiles`** as the root profile table 2. **Update extension tables** to reference `user_role_profile_id` 3. **Remove external links** from profile tables 4. **Rename tables** to match target schema 5. **Create audit tables** for compliance 6. **Separate verification from approval** domains 7. **Add missing finance tables** for proper order management 8. **Complete KB structure** with sections and feedback