nxtgauge-backend-rust/docs/schema_audit.md
Tracewebstudio Dev 03376b9567 feat: Add database redesign documentation and Phase 1-2 migrations
- Add schema_audit.md documenting current schema issues
- Add target_schema.md with complete target schema design
- Add old_to_new_mapping.md with table mapping
- Add migration_plan.md with phased migration strategy
- Add Phase 1 migrations (core infrastructure):
  - user_sessions table
  - users missing columns
  - departments updates
  - designations updates
  - employees updates
- Add Phase 2 migrations (profile domain - CRITICAL):
  - create user_role_profiles root table
  - backfill user_role_profiles from existing profiles
  - add user_role_profile_id to extension tables
  - remove forbidden external portfolio links
- Add user_role_profile Rust model
- Update photographer model to use user_role_profile_id
2026-04-12 23:21:11 +02:00

10 KiB

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_idusers.id Target: photographer_profiles.user_role_profile_iduser_role_profiles.id

Impact: Cannot support multiple role profiles per user properly.

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