duoqi-api/db/migrations/meta/0006_snapshot.json
Wang Zhuoxuan c29599daaa
All checks were successful
CI/CD Pipeline / Unit Tests (push) Successful in 19s
CI/CD Pipeline / Build & Deploy Test (push) Has been skipped
CI/CD Pipeline / Build & Deploy Production (push) Successful in 1m15s
fix: clamp negative hearts in bootstrap progress
2026-06-10 13:04:27 +08:00

3366 lines
89 KiB
JSON

{
"version": "5",
"dialect": "mysql",
"id": "19c17c12-e4d0-4cc1-9018-e019d6fbb784",
"prevId": "336479f9-32f5-490f-84f4-c505f206b02b",
"tables": {
"account_migrations": {
"name": "account_migrations",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"guest_user_id": {
"name": "guest_user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"formal_user_id": {
"name": "formal_user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"provider": {
"name": "provider",
"type": "enum('apple','google','phone')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"provider_user_id": {
"name": "provider_user_id",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"client_migration_id": {
"name": "client_migration_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('in_progress','completed','failed')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'in_progress'"
},
"migration_summary": {
"name": "migration_summary",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"completed_at": {
"name": "completed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"uk_migration_guest_client": {
"name": "uk_migration_guest_client",
"columns": [
"guest_user_id",
"client_migration_id"
],
"isUnique": true
},
"uk_migration_guest_provider": {
"name": "uk_migration_guest_provider",
"columns": [
"guest_user_id",
"provider"
],
"isUnique": true
}
},
"foreignKeys": {
"account_migrations_guest_user_id_users_id_fk": {
"name": "account_migrations_guest_user_id_users_id_fk",
"tableFrom": "account_migrations",
"tableTo": "users",
"columnsFrom": [
"guest_user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"account_migrations_formal_user_id_users_id_fk": {
"name": "account_migrations_formal_user_id_users_id_fk",
"tableFrom": "account_migrations",
"tableTo": "users",
"columnsFrom": [
"formal_user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"account_migrations_id": {
"name": "account_migrations_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"achievements": {
"name": "achievements",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"type": {
"name": "type",
"type": "enum('knowledge','behavior')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "varchar(100)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"description": {
"name": "description",
"type": "varchar(300)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"icon_url": {
"name": "icon_url",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"condition": {
"name": "condition",
"type": "json",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"achievements_id": {
"name": "achievements_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"ad_recovery_sessions": {
"name": "ad_recovery_sessions",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"type": {
"name": "type",
"type": "enum('hearts','bonusAttempts','streakProtection')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('pending','settling','completed','failed','expired')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'pending'"
},
"client_request_id": {
"name": "client_request_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"complete_request_id": {
"name": "complete_request_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"platform": {
"name": "platform",
"type": "enum('ios','android','harmony','web')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"ad_provider": {
"name": "ad_provider",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"ad_placement_id": {
"name": "ad_placement_id",
"type": "varchar(120)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"provider_reward_token": {
"name": "provider_reward_token",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"reward_snapshot": {
"name": "reward_snapshot",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"progress_before": {
"name": "progress_before",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"progress_after": {
"name": "progress_after",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"failure_reason": {
"name": "failure_reason",
"type": "varchar(80)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"provider_error": {
"name": "provider_error",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"duplicate_count": {
"name": "duplicate_count",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"expires_at": {
"name": "expires_at",
"type": "datetime",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"completed_at": {
"name": "completed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_ad_recovery_user_client_request": {
"name": "uk_ad_recovery_user_client_request",
"columns": [
"user_id",
"client_request_id"
],
"isUnique": true
},
"idx_ad_recovery_user_type_status_created": {
"name": "idx_ad_recovery_user_type_status_created",
"columns": [
"user_id",
"type",
"status",
"created_at"
],
"isUnique": false
}
},
"foreignKeys": {
"ad_recovery_sessions_user_id_users_id_fk": {
"name": "ad_recovery_sessions_user_id_users_id_fk",
"tableFrom": "ad_recovery_sessions",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"ad_recovery_sessions_id": {
"name": "ad_recovery_sessions_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"admin_audit_log": {
"name": "admin_audit_log",
"columns": {
"id": {
"name": "id",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": true
},
"admin_id": {
"name": "admin_id",
"type": "varchar(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"action": {
"name": "action",
"type": "varchar(10)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"resource": {
"name": "resource",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"details": {
"name": "details",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"ip_address": {
"name": "ip_address",
"type": "varchar(45)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"admin_audit_log_id": {
"name": "admin_audit_log_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"admin_users": {
"name": "admin_users",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"username": {
"name": "username",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"password_hash": {
"name": "password_hash",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"role": {
"name": "role",
"type": "enum('admin','super_admin')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'admin'"
},
"is_active": {
"name": "is_active",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 1
},
"last_login_at": {
"name": "last_login_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_admin_username": {
"name": "uk_admin_username",
"columns": [
"username"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"admin_users_id": {
"name": "admin_users_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"app_settings": {
"name": "app_settings",
"columns": {
"key": {
"name": "key",
"type": "varchar(100)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"value": {
"name": "value",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"description": {
"name": "description",
"type": "varchar(300)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"app_settings_key": {
"name": "app_settings_key",
"columns": [
"key"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"categories": {
"name": "categories",
"columns": {
"id": {
"name": "id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "varchar(100)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"slug": {
"name": "slug",
"type": "varchar(100)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"parent_id": {
"name": "parent_id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"sort_order": {
"name": "sort_order",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"question_count": {
"name": "question_count",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"status": {
"name": "status",
"type": "enum('active','inactive')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'active'"
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_slug": {
"name": "uk_slug",
"columns": [
"slug"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"categories_id": {
"name": "categories_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"challenge_session_answers": {
"name": "challenge_session_answers",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"session_id": {
"name": "session_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"question_id": {
"name": "question_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"submit_request_id": {
"name": "submit_request_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"answer_order": {
"name": "answer_order",
"type": "tinyint",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"answer": {
"name": "answer",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"correct": {
"name": "correct",
"type": "tinyint",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"time_ms": {
"name": "time_ms",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"combo_count": {
"name": "combo_count",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"result_snapshot": {
"name": "result_snapshot",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"submitted_at": {
"name": "submitted_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_challenge_answer_session_question": {
"name": "uk_challenge_answer_session_question",
"columns": [
"session_id",
"question_id"
],
"isUnique": true
},
"uk_challenge_answer_session_request": {
"name": "uk_challenge_answer_session_request",
"columns": [
"session_id",
"submit_request_id"
],
"isUnique": true
},
"idx_challenge_answer_user_submitted": {
"name": "idx_challenge_answer_user_submitted",
"columns": [
"user_id",
"submitted_at"
],
"isUnique": false
}
},
"foreignKeys": {
"challenge_session_answers_session_id_challenge_sessions_id_fk": {
"name": "challenge_session_answers_session_id_challenge_sessions_id_fk",
"tableFrom": "challenge_session_answers",
"tableTo": "challenge_sessions",
"columnsFrom": [
"session_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"challenge_session_answers_user_id_users_id_fk": {
"name": "challenge_session_answers_user_id_users_id_fk",
"tableFrom": "challenge_session_answers",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"challenge_session_answers_question_id_questions_id_fk": {
"name": "challenge_session_answers_question_id_questions_id_fk",
"tableFrom": "challenge_session_answers",
"tableTo": "questions",
"columnsFrom": [
"question_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"challenge_session_answers_id": {
"name": "challenge_session_answers_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"challenge_sessions": {
"name": "challenge_sessions",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"track_id": {
"name": "track_id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"category_id": {
"name": "category_id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"chapter_id": {
"name": "chapter_id",
"type": "char(36)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('pending','in_progress','completed','abandoned','expired')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'pending'"
},
"client_request_id": {
"name": "client_request_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"complete_request_id": {
"name": "complete_request_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"question_ids": {
"name": "question_ids",
"type": "json",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"total_questions": {
"name": "total_questions",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 5
},
"answered_count": {
"name": "answered_count",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"correct_count": {
"name": "correct_count",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"high_reward_eligible": {
"name": "high_reward_eligible",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 1
},
"reward_snapshot": {
"name": "reward_snapshot",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"progress_before": {
"name": "progress_before",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"progress_after": {
"name": "progress_after",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"expires_at": {
"name": "expires_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"completed_at": {
"name": "completed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_challenge_session_user_client_request": {
"name": "uk_challenge_session_user_client_request",
"columns": [
"user_id",
"client_request_id"
],
"isUnique": true
},
"uk_challenge_session_user_complete_request": {
"name": "uk_challenge_session_user_complete_request",
"columns": [
"user_id",
"complete_request_id"
],
"isUnique": true
},
"idx_challenge_session_user_status_created": {
"name": "idx_challenge_session_user_status_created",
"columns": [
"user_id",
"status",
"created_at"
],
"isUnique": false
},
"idx_challenge_session_chapter_status": {
"name": "idx_challenge_session_chapter_status",
"columns": [
"chapter_id",
"status"
],
"isUnique": false
}
},
"foreignKeys": {
"challenge_sessions_user_id_users_id_fk": {
"name": "challenge_sessions_user_id_users_id_fk",
"tableFrom": "challenge_sessions",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"challenge_sessions_category_id_categories_id_fk": {
"name": "challenge_sessions_category_id_categories_id_fk",
"tableFrom": "challenge_sessions",
"tableTo": "categories",
"columnsFrom": [
"category_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"challenge_sessions_chapter_id_skill_tree_id_fk": {
"name": "challenge_sessions_chapter_id_skill_tree_id_fk",
"tableFrom": "challenge_sessions",
"tableTo": "skill_tree",
"columnsFrom": [
"chapter_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"challenge_sessions_id": {
"name": "challenge_sessions_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"inventory_transactions": {
"name": "inventory_transactions",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"inventory_item_id": {
"name": "inventory_item_id",
"type": "char(36)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"item_id": {
"name": "item_id",
"type": "enum('coins','streak_shield','double_xp_potion','heart_supply','hint_feather','mascot_outfit')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"direction": {
"name": "direction",
"type": "enum('grant','consume','adjust')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"quantity_delta": {
"name": "quantity_delta",
"type": "int",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"balance_after": {
"name": "balance_after",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"source_type": {
"name": "source_type",
"type": "enum('challenge','daily_task','level_up','theme_node','chest','shop_purchase','ad_recovery','subscription','admin_grant','system_adjust','leaderboard_settlement')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"source_id": {
"name": "source_id",
"type": "varchar(120)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"idempotency_key": {
"name": "idempotency_key",
"type": "varchar(160)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"snapshot": {
"name": "snapshot",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_inventory_transaction_idempotency": {
"name": "uk_inventory_transaction_idempotency",
"columns": [
"user_id",
"idempotency_key"
],
"isUnique": true
},
"idx_inventory_transaction_user_created": {
"name": "idx_inventory_transaction_user_created",
"columns": [
"user_id",
"created_at"
],
"isUnique": false
},
"idx_inventory_transaction_source": {
"name": "idx_inventory_transaction_source",
"columns": [
"source_type",
"source_id"
],
"isUnique": false
}
},
"foreignKeys": {
"inventory_transactions_user_id_users_id_fk": {
"name": "inventory_transactions_user_id_users_id_fk",
"tableFrom": "inventory_transactions",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"fk_inv_tx_item": {
"name": "fk_inv_tx_item",
"tableFrom": "inventory_transactions",
"tableTo": "user_inventory_items",
"columnsFrom": [
"inventory_item_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"inventory_transactions_id": {
"name": "inventory_transactions_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"knowledge_cards": {
"name": "knowledge_cards",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"question_id": {
"name": "question_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"summary": {
"name": "summary",
"type": "varchar(300)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"deep_dive": {
"name": "deep_dive",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"source_ref": {
"name": "source_ref",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_question": {
"name": "uk_question",
"columns": [
"question_id"
],
"isUnique": true
}
},
"foreignKeys": {
"knowledge_cards_question_id_questions_id_fk": {
"name": "knowledge_cards_question_id_questions_id_fk",
"tableFrom": "knowledge_cards",
"tableTo": "questions",
"columnsFrom": [
"question_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"knowledge_cards_id": {
"name": "knowledge_cards_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"leaderboard_snapshots": {
"name": "leaderboard_snapshots",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"tier": {
"name": "tier",
"type": "enum('bronze','silver','gold','platinum','diamond','master','grandmaster','champion','legend','mythic')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"weekly_xp": {
"name": "weekly_xp",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"rank": {
"name": "rank",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"group_id": {
"name": "group_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"league": {
"name": "league",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"reward_snapshot": {
"name": "reward_snapshot",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"settled_at": {
"name": "settled_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"week_start": {
"name": "week_start",
"type": "date",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"week_end": {
"name": "week_end",
"type": "date",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_leaderboard_snapshot_user_week": {
"name": "uk_leaderboard_snapshot_user_week",
"columns": [
"user_id",
"week_start"
],
"isUnique": true
},
"idx_leaderboard_snapshot_group_rank": {
"name": "idx_leaderboard_snapshot_group_rank",
"columns": [
"group_id",
"week_start",
"rank"
],
"isUnique": false
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"leaderboard_snapshots_id": {
"name": "leaderboard_snapshots_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"question_ratings": {
"name": "question_ratings",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"question_id": {
"name": "question_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"rating": {
"name": "rating",
"type": "enum('good','bad')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_user_question_rating": {
"name": "uk_user_question_rating",
"columns": [
"user_id",
"question_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"question_ratings_id": {
"name": "question_ratings_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"questions": {
"name": "questions",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"stem": {
"name": "stem",
"type": "json",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"content_type": {
"name": "content_type",
"type": "enum('text','image','video','audio')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"correct_answer": {
"name": "correct_answer",
"type": "varchar(500)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"distractors": {
"name": "distractors",
"type": "json",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"category_id": {
"name": "category_id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"difficulty": {
"name": "difficulty",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"dynamic_difficulty": {
"name": "dynamic_difficulty",
"type": "decimal(3,1)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"source": {
"name": "source",
"type": "enum('system','ugc')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'system'"
},
"creator_id": {
"name": "creator_id",
"type": "char(36)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('draft','reviewing','published','archived')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'draft'"
},
"stats": {
"name": "stats",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "('{\"timesAnswered\":0,\"correctRate\":0,\"avgTimeMs\":0}')"
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {
"questions_category_id_categories_id_fk": {
"name": "questions_category_id_categories_id_fk",
"tableFrom": "questions",
"tableTo": "categories",
"columnsFrom": [
"category_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"questions_id": {
"name": "questions_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"reward_ledger": {
"name": "reward_ledger",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"source_type": {
"name": "source_type",
"type": "enum('challenge_answer','challenge_completion','daily_task','streak_milestone','level_up','theme_node','knowledge_card','chest','shop_purchase','ad_recovery','leaderboard_settlement','subscription','admin_grant','system_adjust')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"source_id": {
"name": "source_id",
"type": "varchar(120)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"idempotency_key": {
"name": "idempotency_key",
"type": "varchar(160)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('pending','settling','completed','failed','reversed')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'pending'"
},
"reward_snapshot": {
"name": "reward_snapshot",
"type": "json",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"resource_deltas": {
"name": "resource_deltas",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"state_before": {
"name": "state_before",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"state_after": {
"name": "state_after",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"failure_reason": {
"name": "failure_reason",
"type": "varchar(120)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"settled_at": {
"name": "settled_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_reward_ledger_user_idempotency": {
"name": "uk_reward_ledger_user_idempotency",
"columns": [
"user_id",
"idempotency_key"
],
"isUnique": true
},
"idx_reward_ledger_user_status_created": {
"name": "idx_reward_ledger_user_status_created",
"columns": [
"user_id",
"status",
"created_at"
],
"isUnique": false
},
"idx_reward_ledger_source": {
"name": "idx_reward_ledger_source",
"columns": [
"source_type",
"source_id"
],
"isUnique": false
}
},
"foreignKeys": {
"reward_ledger_user_id_users_id_fk": {
"name": "reward_ledger_user_id_users_id_fk",
"tableFrom": "reward_ledger",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"reward_ledger_id": {
"name": "reward_ledger_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"skill_tree": {
"name": "skill_tree",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"category_id": {
"name": "category_id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"title": {
"name": "title",
"type": "varchar(100)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"parent_id": {
"name": "parent_id",
"type": "char(36)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"sort_order": {
"name": "sort_order",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"questions_required": {
"name": "questions_required",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 4
},
"pass_threshold": {
"name": "pass_threshold",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 2
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {
"skill_tree_category_id_categories_id_fk": {
"name": "skill_tree_category_id_categories_id_fk",
"tableFrom": "skill_tree",
"tableTo": "categories",
"columnsFrom": [
"category_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"skill_tree_id": {
"name": "skill_tree_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"subscriptions": {
"name": "subscriptions",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"tier": {
"name": "tier",
"type": "enum('free','pro','proplus')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'free'"
},
"platform": {
"name": "platform",
"type": "enum('huawei','apple','google')",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"purchase_token": {
"name": "purchase_token",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"expires_at": {
"name": "expires_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"auto_renew": {
"name": "auto_renew",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"status": {
"name": "status",
"type": "enum('active','expired','cancelled')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'active'"
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_subscription_user": {
"name": "uk_subscription_user",
"columns": [
"user_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"subscriptions_id": {
"name": "subscriptions_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_achievements": {
"name": "user_achievements",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"achievement_id": {
"name": "achievement_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"unlocked_at": {
"name": "unlocked_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_user_achievement": {
"name": "uk_user_achievement",
"columns": [
"user_id",
"achievement_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"user_achievements_id": {
"name": "user_achievements_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_chapter_progress": {
"name": "user_chapter_progress",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"chapter_id": {
"name": "chapter_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"status": {
"name": "status",
"type": "enum('locked','unlocked','passed','perfect')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'locked'"
},
"best_correct_count": {
"name": "best_correct_count",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"attempts": {
"name": "attempts",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"completed_at": {
"name": "completed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"uk_user_chapter": {
"name": "uk_user_chapter",
"columns": [
"user_id",
"chapter_id"
],
"isUnique": true
}
},
"foreignKeys": {
"user_chapter_progress_user_id_users_id_fk": {
"name": "user_chapter_progress_user_id_users_id_fk",
"tableFrom": "user_chapter_progress",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"user_chapter_progress_chapter_id_skill_tree_id_fk": {
"name": "user_chapter_progress_chapter_id_skill_tree_id_fk",
"tableFrom": "user_chapter_progress",
"tableTo": "skill_tree",
"columnsFrom": [
"chapter_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_chapter_progress_id": {
"name": "user_chapter_progress_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_daily_progress": {
"name": "user_daily_progress",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"progress_date": {
"name": "progress_date",
"type": "date",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"timezone": {
"name": "timezone",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'UTC'"
},
"first_challenge_session_id": {
"name": "first_challenge_session_id",
"type": "char(36)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"first_challenge_completed_at": {
"name": "first_challenge_completed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"challenge_sessions_completed": {
"name": "challenge_sessions_completed",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"high_reward_sessions_max": {
"name": "high_reward_sessions_max",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 3
},
"high_reward_sessions_used": {
"name": "high_reward_sessions_used",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"high_reward_sessions_restored": {
"name": "high_reward_sessions_restored",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"daily_tasks_completed": {
"name": "daily_tasks_completed",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"daily_tasks_reward_claimed": {
"name": "daily_tasks_reward_claimed",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"xp_earned": {
"name": "xp_earned",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"coins_earned": {
"name": "coins_earned",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"streak_counted": {
"name": "streak_counted",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"metadata": {
"name": "metadata",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_daily_progress_user_date": {
"name": "uk_daily_progress_user_date",
"columns": [
"user_id",
"progress_date"
],
"isUnique": true
},
"idx_daily_progress_date": {
"name": "idx_daily_progress_date",
"columns": [
"progress_date"
],
"isUnique": false
}
},
"foreignKeys": {
"user_daily_progress_user_id_users_id_fk": {
"name": "user_daily_progress_user_id_users_id_fk",
"tableFrom": "user_daily_progress",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"fk_daily_progress_session": {
"name": "fk_daily_progress_session",
"tableFrom": "user_daily_progress",
"tableTo": "challenge_sessions",
"columnsFrom": [
"first_challenge_session_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_daily_progress_id": {
"name": "user_daily_progress_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_daily_tasks": {
"name": "user_daily_tasks",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"daily_progress_id": {
"name": "daily_progress_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"task_date": {
"name": "task_date",
"type": "date",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"task_id": {
"name": "task_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"task_type": {
"name": "task_type",
"type": "enum('complete_challenge','earn_xp','answer_correct','review_explanation','use_item','watch_ad')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"target_count": {
"name": "target_count",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 1
},
"current_count": {
"name": "current_count",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"status": {
"name": "status",
"type": "enum('active','completed','reward_claimed','expired')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'active'"
},
"reward_snapshot": {
"name": "reward_snapshot",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"completed_at": {
"name": "completed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"reward_claimed_at": {
"name": "reward_claimed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_daily_task_user_date_task": {
"name": "uk_daily_task_user_date_task",
"columns": [
"user_id",
"task_date",
"task_id"
],
"isUnique": true
},
"idx_daily_task_progress_status": {
"name": "idx_daily_task_progress_status",
"columns": [
"daily_progress_id",
"status"
],
"isUnique": false
}
},
"foreignKeys": {
"user_daily_tasks_daily_progress_id_user_daily_progress_id_fk": {
"name": "user_daily_tasks_daily_progress_id_user_daily_progress_id_fk",
"tableFrom": "user_daily_tasks",
"tableTo": "user_daily_progress",
"columnsFrom": [
"daily_progress_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"user_daily_tasks_user_id_users_id_fk": {
"name": "user_daily_tasks_user_id_users_id_fk",
"tableFrom": "user_daily_tasks",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_daily_tasks_id": {
"name": "user_daily_tasks_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_feedback": {
"name": "user_feedback",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"contact": {
"name": "contact",
"type": "varchar(255)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"page_context": {
"name": "page_context",
"type": "varchar(200)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {
"user_feedback_id": {
"name": "user_feedback_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_inventory_items": {
"name": "user_inventory_items",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"item_id": {
"name": "item_id",
"type": "enum('streak_shield','double_xp_potion','heart_supply','hint_feather','mascot_outfit')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"quantity": {
"name": "quantity",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"active_until": {
"name": "active_until",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"metadata": {
"name": "metadata",
"type": "json",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_inventory_user_item": {
"name": "uk_inventory_user_item",
"columns": [
"user_id",
"item_id"
],
"isUnique": true
},
"idx_inventory_user_active": {
"name": "idx_inventory_user_active",
"columns": [
"user_id",
"active_until"
],
"isUnique": false
}
},
"foreignKeys": {
"user_inventory_items_user_id_users_id_fk": {
"name": "user_inventory_items_user_id_users_id_fk",
"tableFrom": "user_inventory_items",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_inventory_items_id": {
"name": "user_inventory_items_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_progress": {
"name": "user_progress",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"question_id": {
"name": "question_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"correct": {
"name": "correct",
"type": "tinyint",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"time_ms": {
"name": "time_ms",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"answered_at": {
"name": "answered_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"idx_user_answered": {
"name": "idx_user_answered",
"columns": [
"user_id",
"answered_at"
],
"isUnique": false
}
},
"foreignKeys": {
"user_progress_user_id_users_id_fk": {
"name": "user_progress_user_id_users_id_fk",
"tableFrom": "user_progress",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
},
"user_progress_question_id_questions_id_fk": {
"name": "user_progress_question_id_questions_id_fk",
"tableFrom": "user_progress",
"tableTo": "questions",
"columnsFrom": [
"question_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_progress_id": {
"name": "user_progress_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_region_change_logs": {
"name": "user_region_change_logs",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"from_region_code": {
"name": "from_region_code",
"type": "varchar(20)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"to_region_code": {
"name": "to_region_code",
"type": "varchar(20)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"changed_at": {
"name": "changed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
}
},
"indexes": {
"idx_region_change_user_changed": {
"name": "idx_region_change_user_changed",
"columns": [
"user_id",
"changed_at"
],
"isUnique": false
}
},
"foreignKeys": {
"user_region_change_logs_user_id_users_id_fk": {
"name": "user_region_change_logs_user_id_users_id_fk",
"tableFrom": "user_region_change_logs",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_region_change_logs_id": {
"name": "user_region_change_logs_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_wallets": {
"name": "user_wallets",
"columns": {
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"coins_balance": {
"name": "coins_balance",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"lifetime_coins_earned": {
"name": "lifetime_coins_earned",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"lifetime_coins_spent": {
"name": "lifetime_coins_spent",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {},
"foreignKeys": {
"user_wallets_user_id_users_id_fk": {
"name": "user_wallets_user_id_users_id_fk",
"tableFrom": "user_wallets",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_wallets_user_id": {
"name": "user_wallets_user_id",
"columns": [
"user_id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"user_weekly_xp": {
"name": "user_weekly_xp",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"week_start": {
"name": "week_start",
"type": "date",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"week_end": {
"name": "week_end",
"type": "date",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"timezone": {
"name": "timezone",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'UTC'"
},
"xp_earned": {
"name": "xp_earned",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"challenge_sessions_completed": {
"name": "challenge_sessions_completed",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"group_id": {
"name": "group_id",
"type": "varchar(80)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"rank": {
"name": "rank",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"settled": {
"name": "settled",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"settled_at": {
"name": "settled_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"last_xp_at": {
"name": "last_xp_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"next_refresh_at": {
"name": "next_refresh_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_weekly_xp_user_week": {
"name": "uk_weekly_xp_user_week",
"columns": [
"user_id",
"week_start"
],
"isUnique": true
},
"idx_weekly_xp_group_rank": {
"name": "idx_weekly_xp_group_rank",
"columns": [
"group_id",
"week_start",
"xp_earned"
],
"isUnique": false
},
"idx_weekly_xp_week_settled": {
"name": "idx_weekly_xp_week_settled",
"columns": [
"week_start",
"settled"
],
"isUnique": false
}
},
"foreignKeys": {
"user_weekly_xp_user_id_users_id_fk": {
"name": "user_weekly_xp_user_id_users_id_fk",
"tableFrom": "user_weekly_xp",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {
"user_weekly_xp_id": {
"name": "user_weekly_xp_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {}
},
"users": {
"name": "users",
"columns": {
"id": {
"name": "id",
"type": "char(36)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"auth_type": {
"name": "auth_type",
"type": "enum('huawei','guest','phone','apple','google')",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"auth_id": {
"name": "auth_id",
"type": "varchar(255)",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"nickname": {
"name": "nickname",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"avatar_url": {
"name": "avatar_url",
"type": "varchar(500)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"tier": {
"name": "tier",
"type": "enum('free','pro','proplus')",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'free'"
},
"xp_total": {
"name": "xp_total",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"streak_days": {
"name": "streak_days",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"streak_last_date": {
"name": "streak_last_date",
"type": "date",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"hearts_remaining": {
"name": "hearts_remaining",
"type": "tinyint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 5
},
"hearts_last_restore": {
"name": "hearts_last_restore",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"daily_xp_goal": {
"name": "daily_xp_goal",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 50
},
"daily_xp_earned": {
"name": "daily_xp_earned",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"daily_xp_date": {
"name": "daily_xp_date",
"type": "date",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"current_theme": {
"name": "current_theme",
"type": "varchar(20)",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "'inkTeal'"
},
"active_track_id": {
"name": "active_track_id",
"type": "varchar(50)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"region_code": {
"name": "region_code",
"type": "varchar(20)",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"region_selected_at": {
"name": "region_selected_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"region_changed_at": {
"name": "region_changed_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"daily_attempts_left": {
"name": "daily_attempts_left",
"type": "smallint",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 5
},
"daily_attempts_date": {
"name": "daily_attempts_date",
"type": "date",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"check_in_days": {
"name": "check_in_days",
"type": "int",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": 0
},
"last_check_in_date": {
"name": "last_check_in_date",
"type": "date",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"streak_protected_until": {
"name": "streak_protected_until",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"created_at": {
"name": "created_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP"
},
"updated_at": {
"name": "updated_at",
"type": "datetime",
"primaryKey": false,
"notNull": false,
"autoincrement": false,
"default": "CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP"
}
},
"indexes": {
"uk_auth": {
"name": "uk_auth",
"columns": [
"auth_type",
"auth_id"
],
"isUnique": true
},
"idx_users_region": {
"name": "idx_users_region",
"columns": [
"region_code"
],
"isUnique": false
}
},
"foreignKeys": {},
"compositePrimaryKeys": {
"users_id": {
"name": "users_id",
"columns": [
"id"
]
}
},
"uniqueConstraints": {},
"checkConstraint": {
"chk_users_hearts_remaining_nonnegative": {
"name": "chk_users_hearts_remaining_nonnegative",
"value": "`users`.`hearts_remaining` >= 0"
}
}
}
},
"views": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"tables": {},
"indexes": {}
}
}