@kaikybrofc/omnizap-system 2.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +534 -0
- package/LICENSE +21 -0
- package/README.md +431 -0
- package/RELEASE-v2.1.2.md +83 -0
- package/app/config/adminIdentity.js +87 -0
- package/app/config/baileysConfig.js +693 -0
- package/app/config/groupUtils.js +388 -0
- package/app/connection/socketController.js +992 -0
- package/app/controllers/messageController.js +354 -0
- package/app/modules/adminModule/groupCommandHandlers.js +1294 -0
- package/app/modules/adminModule/groupEventHandlers.js +355 -0
- package/app/modules/aiModule/catCommand.js +1006 -0
- package/app/modules/broadcastModule/noticeCommand.js +416 -0
- package/app/modules/gameModule/diceCommand.js +67 -0
- package/app/modules/menuModule/common.js +311 -0
- package/app/modules/menuModule/menus.js +59 -0
- package/app/modules/playModule/playCommand.js +1615 -0
- package/app/modules/quoteModule/quoteCommand.js +851 -0
- package/app/modules/rpgPokemonModule/rpgBattleCanvasRenderer.js +786 -0
- package/app/modules/rpgPokemonModule/rpgBattleService.js +2082 -0
- package/app/modules/rpgPokemonModule/rpgBattleService.test.js +760 -0
- package/app/modules/rpgPokemonModule/rpgEvolutionUtils.js +22 -0
- package/app/modules/rpgPokemonModule/rpgPokemonCommand.js +172 -0
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.js +192 -0
- package/app/modules/rpgPokemonModule/rpgPokemonDomain.test.js +93 -0
- package/app/modules/rpgPokemonModule/rpgPokemonEvolution.test.js +46 -0
- package/app/modules/rpgPokemonModule/rpgPokemonMessages.js +746 -0
- package/app/modules/rpgPokemonModule/rpgPokemonRepository.js +1859 -0
- package/app/modules/rpgPokemonModule/rpgPokemonService.js +6738 -0
- package/app/modules/rpgPokemonModule/rpgProfileCanvasRenderer.js +354 -0
- package/app/modules/statsModule/globalRankingCommand.js +65 -0
- package/app/modules/statsModule/noMessageCommand.js +288 -0
- package/app/modules/statsModule/rankingCommand.js +60 -0
- package/app/modules/statsModule/rankingCommon.js +889 -0
- package/app/modules/stickerModule/addStickerMetadata.js +239 -0
- package/app/modules/stickerModule/convertToWebp.js +390 -0
- package/app/modules/stickerModule/stickerCommand.js +454 -0
- package/app/modules/stickerModule/stickerConvertCommand.js +156 -0
- package/app/modules/stickerModule/stickerTextCommand.js +657 -0
- package/app/modules/stickerPackModule/autoPackCollectorRuntime.js +20 -0
- package/app/modules/stickerPackModule/autoPackCollectorService.js +284 -0
- package/app/modules/stickerPackModule/semanticReclassificationEngine.js +466 -0
- package/app/modules/stickerPackModule/semanticReclassificationEngine.test.js +88 -0
- package/app/modules/stickerPackModule/semanticThemeClusterService.js +571 -0
- package/app/modules/stickerPackModule/stickerAssetClassificationRepository.js +449 -0
- package/app/modules/stickerPackModule/stickerAssetRepository.js +400 -0
- package/app/modules/stickerPackModule/stickerAssetReprocessQueueRepository.js +180 -0
- package/app/modules/stickerPackModule/stickerAutoPackByTagsRuntime.js +4078 -0
- package/app/modules/stickerPackModule/stickerClassificationBackgroundRuntime.js +598 -0
- package/app/modules/stickerPackModule/stickerClassificationService.js +588 -0
- package/app/modules/stickerPackModule/stickerMarketplaceDriftService.js +102 -0
- package/app/modules/stickerPackModule/stickerPackCatalogHttp.js +7506 -0
- package/app/modules/stickerPackModule/stickerPackCommandHandlers.js +1095 -0
- package/app/modules/stickerPackModule/stickerPackEngagementRepository.js +108 -0
- package/app/modules/stickerPackModule/stickerPackErrors.js +30 -0
- package/app/modules/stickerPackModule/stickerPackInteractionEventRepository.js +110 -0
- package/app/modules/stickerPackModule/stickerPackItemRepository.js +440 -0
- package/app/modules/stickerPackModule/stickerPackMarketplaceService.js +337 -0
- package/app/modules/stickerPackModule/stickerPackMessageService.js +296 -0
- package/app/modules/stickerPackModule/stickerPackRepository.js +442 -0
- package/app/modules/stickerPackModule/stickerPackService.js +788 -0
- package/app/modules/stickerPackModule/stickerPackServiceRuntime.js +51 -0
- package/app/modules/stickerPackModule/stickerPackUtils.js +97 -0
- package/app/modules/stickerPackModule/stickerStorageService.js +507 -0
- package/app/modules/stickerPackModule/stickerWorkerPipelineRuntime.js +233 -0
- package/app/modules/stickerPackModule/stickerWorkerTaskQueueRepository.js +205 -0
- package/app/modules/systemMetricsModule/pingCommand.js +421 -0
- package/app/modules/tiktokModule/tiktokCommand.js +798 -0
- package/app/modules/userModule/userCommand.js +1217 -0
- package/app/modules/waifuPicsModule/waifuPicsCommand.js +177 -0
- package/app/observability/metrics.js +734 -0
- package/app/services/captchaService.js +492 -0
- package/app/services/dbWriteQueue.js +572 -0
- package/app/services/groupMetadataService.js +279 -0
- package/app/services/lidMapService.js +663 -0
- package/app/services/messagePersistenceService.js +56 -0
- package/app/services/newsBroadcastService.js +351 -0
- package/app/services/pokeApiService.js +398 -0
- package/app/services/queueUtils.js +57 -0
- package/app/services/socketState.js +7 -0
- package/app/store/aiPromptStore.js +38 -0
- package/app/store/groupConfigStore.js +58 -0
- package/app/store/premiumUserStore.js +36 -0
- package/app/utils/antiLink/antiLinkModule.js +804 -0
- package/app/utils/http/getImageBufferModule.js +18 -0
- package/app/utils/json/jsonSanitizer.js +113 -0
- package/app/utils/json/jsonSanitizer.test.js +40 -0
- package/app/utils/logger/loggerModule.js +262 -0
- package/app/utils/systemMetrics/systemMetricsModule.js +91 -0
- package/database/index.js +2052 -0
- package/database/init.js +516 -0
- package/database/migrations/20260203_0001_sticker_packs.sql +54 -0
- package/database/migrations/20260210_0003_rpg_pokemon.sql +58 -0
- package/database/migrations/20260210_0004_rpg_shiny_biome.sql +9 -0
- package/database/migrations/20260210_0005_rpg_missions.sql +14 -0
- package/database/migrations/20260210_0006_rpg_world_pokedex_traits.sql +27 -0
- package/database/migrations/20260210_0007_rpg_raid_pvp.sql +56 -0
- package/database/migrations/20260210_0008_rpg_social_system.sql +195 -0
- package/database/migrations/20260211_0009_rpg_social_xp.sql +36 -0
- package/database/migrations/20260222_0010_remove_message_xp.sql +2 -0
- package/database/migrations/20260226_0011_sticker_asset_classification.sql +17 -0
- package/database/migrations/20260226_0012_sticker_pack_engagement.sql +16 -0
- package/database/migrations/20260226_0013_sticker_marketplace_intelligence.sql +19 -0
- package/database/migrations/20260226_0014_sticker_pack_publish_flow.sql +30 -0
- package/database/migrations/20260226_0014_sticker_worker_queues.sql +42 -0
- package/database/migrations/20260226_0015_sticker_auto_pack_curation_integrity.sql +18 -0
- package/database/migrations/20260226_0016_sticker_web_google_auth_persistence.sql +34 -0
- package/database/migrations/20260226_0017_sticker_web_admin_ban.sql +22 -0
- package/database/migrations/20260226_0018_sticker_web_admin_moderator.sql +18 -0
- package/database/migrations/20260227_0019_sticker_classification_v2_signals.sql +12 -0
- package/database/migrations/20260227_0020_semantic_theme_clusters.sql +35 -0
- package/docker-compose.yml +103 -0
- package/ecosystem.prod.config.cjs +35 -0
- package/eslint.config.js +61 -0
- package/index.js +437 -0
- package/ml/clip_classifier/Dockerfile +16 -0
- package/ml/clip_classifier/README.md +120 -0
- package/ml/clip_classifier/adaptive_scoring.py +40 -0
- package/ml/clip_classifier/classifier.py +654 -0
- package/ml/clip_classifier/embedding_store.py +481 -0
- package/ml/clip_classifier/env_loader.py +15 -0
- package/ml/clip_classifier/llm_label_expander.py +144 -0
- package/ml/clip_classifier/main.py +213 -0
- package/ml/clip_classifier/requirements.txt +10 -0
- package/ml/clip_classifier/similarity_engine.py +74 -0
- package/observability/alert-rules.yml +60 -0
- package/observability/grafana/dashboards/omnizap-mysql.json +136 -0
- package/observability/grafana/dashboards/omnizap-overview.json +170 -0
- package/observability/grafana/provisioning/dashboards/dashboards.yml +11 -0
- package/observability/grafana/provisioning/datasources/datasources.yml +15 -0
- package/observability/loki-config.yml +38 -0
- package/observability/mysql-exporter.cnf +5 -0
- package/observability/mysql-setup.sql +46 -0
- package/observability/prometheus.yml +32 -0
- package/observability/promtail-config.yml +84 -0
- package/package.json +109 -0
- package/public/api-docs/index.html +144 -0
- package/public/css/github-project-panel.css +297 -0
- package/public/css/stickers-admin.css +1272 -0
- package/public/css/styles.css +671 -0
- package/public/index.html +1311 -0
- package/public/js/apps/apiDocsApp.js +310 -0
- package/public/js/apps/createPackApp.js +2069 -0
- package/public/js/apps/homeApp.js +396 -0
- package/public/js/apps/stickersAdminApp.js +1744 -0
- package/public/js/apps/stickersApp.js +4830 -0
- package/public/js/catalog.js +1019 -0
- package/public/js/github-panel/components/CommitList.js +34 -0
- package/public/js/github-panel/components/ErrorState.js +16 -0
- package/public/js/github-panel/components/GithubProjectPanel.js +106 -0
- package/public/js/github-panel/components/ReleaseList.js +38 -0
- package/public/js/github-panel/components/SkeletonPanel.js +22 -0
- package/public/js/github-panel/components/StatCard.js +15 -0
- package/public/js/github-panel/index.js +15 -0
- package/public/js/github-panel/useGithubRepoData.js +154 -0
- package/public/js/github-panel/vendor/react.js +11 -0
- package/public/js/runtime/react-runtime.js +19 -0
- package/public/licenca/index.html +106 -0
- package/public/stickers/admin/index.html +23 -0
- package/public/stickers/create/index.html +47 -0
- package/public/stickers/index.html +48 -0
- package/public/termos-de-uso/index.html +125 -0
- package/scripts/cache-bust.mjs +107 -0
- package/scripts/deploy.sh +458 -0
- package/scripts/github-deploy-notify.mjs +174 -0
- package/scripts/release.sh +129 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS rpg_raid_state (
|
|
2
|
+
chat_jid VARCHAR(255) PRIMARY KEY,
|
|
3
|
+
created_by_jid VARCHAR(255) NOT NULL,
|
|
4
|
+
biome_key VARCHAR(64) NULL,
|
|
5
|
+
boss_snapshot_json JSON NOT NULL,
|
|
6
|
+
max_hp INT UNSIGNED NOT NULL,
|
|
7
|
+
current_hp INT UNSIGNED NOT NULL,
|
|
8
|
+
started_at DATETIME NOT NULL,
|
|
9
|
+
ends_at DATETIME NOT NULL,
|
|
10
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
11
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
12
|
+
INDEX idx_rpg_raid_ends_at (ends_at),
|
|
13
|
+
CONSTRAINT fk_rpg_raid_creator
|
|
14
|
+
FOREIGN KEY (created_by_jid) REFERENCES rpg_player(jid)
|
|
15
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
16
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
17
|
+
|
|
18
|
+
CREATE TABLE IF NOT EXISTS rpg_raid_participant (
|
|
19
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
20
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
21
|
+
total_damage INT UNSIGNED NOT NULL DEFAULT 0,
|
|
22
|
+
joined_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
23
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
24
|
+
PRIMARY KEY (chat_jid, owner_jid),
|
|
25
|
+
INDEX idx_rpg_raid_part_owner (owner_jid),
|
|
26
|
+
CONSTRAINT fk_rpg_raid_part_chat
|
|
27
|
+
FOREIGN KEY (chat_jid) REFERENCES rpg_raid_state(chat_jid)
|
|
28
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
29
|
+
CONSTRAINT fk_rpg_raid_part_owner
|
|
30
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
31
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
32
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
33
|
+
|
|
34
|
+
CREATE TABLE IF NOT EXISTS rpg_pvp_challenge (
|
|
35
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
36
|
+
chat_jid VARCHAR(255) NULL,
|
|
37
|
+
challenger_jid VARCHAR(255) NOT NULL,
|
|
38
|
+
opponent_jid VARCHAR(255) NOT NULL,
|
|
39
|
+
status VARCHAR(24) NOT NULL DEFAULT 'pending',
|
|
40
|
+
turn_jid VARCHAR(255) NULL,
|
|
41
|
+
winner_jid VARCHAR(255) NULL,
|
|
42
|
+
battle_snapshot_json JSON NOT NULL,
|
|
43
|
+
started_at DATETIME NULL,
|
|
44
|
+
expires_at DATETIME NOT NULL,
|
|
45
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
46
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
47
|
+
INDEX idx_rpg_pvp_status_expires (status, expires_at),
|
|
48
|
+
INDEX idx_rpg_pvp_challenger (challenger_jid),
|
|
49
|
+
INDEX idx_rpg_pvp_opponent (opponent_jid),
|
|
50
|
+
CONSTRAINT fk_rpg_pvp_challenger
|
|
51
|
+
FOREIGN KEY (challenger_jid) REFERENCES rpg_player(jid)
|
|
52
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
53
|
+
CONSTRAINT fk_rpg_pvp_opponent
|
|
54
|
+
FOREIGN KEY (opponent_jid) REFERENCES rpg_player(jid)
|
|
55
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
56
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS rpg_pvp_queue (
|
|
2
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
3
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
4
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
5
|
+
status VARCHAR(24) NOT NULL DEFAULT 'queued',
|
|
6
|
+
matched_challenge_id BIGINT UNSIGNED NULL,
|
|
7
|
+
expires_at DATETIME NOT NULL,
|
|
8
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
9
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
10
|
+
UNIQUE KEY uq_rpg_pvp_queue_chat_owner_status (chat_jid, owner_jid, status),
|
|
11
|
+
INDEX idx_rpg_pvp_queue_chat_status_expires (chat_jid, status, expires_at),
|
|
12
|
+
INDEX idx_rpg_pvp_queue_owner_status (owner_jid, status),
|
|
13
|
+
CONSTRAINT fk_rpg_pvp_queue_owner
|
|
14
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
15
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
16
|
+
CONSTRAINT fk_rpg_pvp_queue_challenge
|
|
17
|
+
FOREIGN KEY (matched_challenge_id) REFERENCES rpg_pvp_challenge(id)
|
|
18
|
+
ON DELETE SET NULL ON UPDATE CASCADE
|
|
19
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
20
|
+
|
|
21
|
+
CREATE TABLE IF NOT EXISTS rpg_pvp_weekly_stats (
|
|
22
|
+
week_ref_date DATE NOT NULL,
|
|
23
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
24
|
+
matches_played INT UNSIGNED NOT NULL DEFAULT 0,
|
|
25
|
+
wins INT UNSIGNED NOT NULL DEFAULT 0,
|
|
26
|
+
losses INT UNSIGNED NOT NULL DEFAULT 0,
|
|
27
|
+
points INT UNSIGNED NOT NULL DEFAULT 0,
|
|
28
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
29
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
30
|
+
PRIMARY KEY (week_ref_date, owner_jid),
|
|
31
|
+
INDEX idx_rpg_pvp_weekly_points (week_ref_date, points DESC, wins DESC),
|
|
32
|
+
CONSTRAINT fk_rpg_pvp_weekly_owner
|
|
33
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
34
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
35
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
36
|
+
|
|
37
|
+
CREATE TABLE IF NOT EXISTS rpg_social_link (
|
|
38
|
+
pair_key VARCHAR(600) PRIMARY KEY,
|
|
39
|
+
user_a_jid VARCHAR(255) NOT NULL,
|
|
40
|
+
user_b_jid VARCHAR(255) NOT NULL,
|
|
41
|
+
friendship_score INT NOT NULL DEFAULT 0,
|
|
42
|
+
rivalry_score INT NOT NULL DEFAULT 0,
|
|
43
|
+
interactions_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
44
|
+
last_interaction_at DATETIME NULL,
|
|
45
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
46
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
47
|
+
UNIQUE KEY uq_rpg_social_link_pair_users (user_a_jid, user_b_jid),
|
|
48
|
+
INDEX idx_rpg_social_link_user_a (user_a_jid),
|
|
49
|
+
INDEX idx_rpg_social_link_user_b (user_b_jid),
|
|
50
|
+
CONSTRAINT fk_rpg_social_link_user_a
|
|
51
|
+
FOREIGN KEY (user_a_jid) REFERENCES rpg_player(jid)
|
|
52
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
53
|
+
CONSTRAINT fk_rpg_social_link_user_b
|
|
54
|
+
FOREIGN KEY (user_b_jid) REFERENCES rpg_player(jid)
|
|
55
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
56
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
57
|
+
|
|
58
|
+
CREATE TABLE IF NOT EXISTS rpg_trade_offer (
|
|
59
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
60
|
+
chat_jid VARCHAR(255) NULL,
|
|
61
|
+
proposer_jid VARCHAR(255) NOT NULL,
|
|
62
|
+
receiver_jid VARCHAR(255) NOT NULL,
|
|
63
|
+
proposer_offer_json JSON NOT NULL,
|
|
64
|
+
receiver_offer_json JSON NOT NULL,
|
|
65
|
+
status VARCHAR(24) NOT NULL DEFAULT 'pending',
|
|
66
|
+
accepted_at DATETIME NULL,
|
|
67
|
+
expires_at DATETIME NOT NULL,
|
|
68
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
69
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
70
|
+
INDEX idx_rpg_trade_status_expires (status, expires_at),
|
|
71
|
+
INDEX idx_rpg_trade_proposer (proposer_jid),
|
|
72
|
+
INDEX idx_rpg_trade_receiver (receiver_jid),
|
|
73
|
+
CONSTRAINT fk_rpg_trade_proposer
|
|
74
|
+
FOREIGN KEY (proposer_jid) REFERENCES rpg_player(jid)
|
|
75
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
76
|
+
CONSTRAINT fk_rpg_trade_receiver
|
|
77
|
+
FOREIGN KEY (receiver_jid) REFERENCES rpg_player(jid)
|
|
78
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
79
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
80
|
+
|
|
81
|
+
CREATE TABLE IF NOT EXISTS rpg_group_coop_weekly (
|
|
82
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
83
|
+
week_ref_date DATE NOT NULL,
|
|
84
|
+
capture_target INT UNSIGNED NOT NULL DEFAULT 20,
|
|
85
|
+
raid_target INT UNSIGNED NOT NULL DEFAULT 3,
|
|
86
|
+
capture_progress INT UNSIGNED NOT NULL DEFAULT 0,
|
|
87
|
+
raid_progress INT UNSIGNED NOT NULL DEFAULT 0,
|
|
88
|
+
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
|
89
|
+
completed_at DATETIME NULL,
|
|
90
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
91
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
92
|
+
PRIMARY KEY (chat_jid, week_ref_date),
|
|
93
|
+
INDEX idx_rpg_coop_weekly_status (status, week_ref_date)
|
|
94
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
95
|
+
|
|
96
|
+
CREATE TABLE IF NOT EXISTS rpg_group_coop_member (
|
|
97
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
98
|
+
week_ref_date DATE NOT NULL,
|
|
99
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
100
|
+
capture_contribution INT UNSIGNED NOT NULL DEFAULT 0,
|
|
101
|
+
raid_contribution INT UNSIGNED NOT NULL DEFAULT 0,
|
|
102
|
+
reward_claimed_at DATETIME NULL,
|
|
103
|
+
last_contribution_at DATETIME NULL,
|
|
104
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
105
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
106
|
+
PRIMARY KEY (chat_jid, week_ref_date, owner_jid),
|
|
107
|
+
INDEX idx_rpg_coop_member_owner (owner_jid, week_ref_date),
|
|
108
|
+
CONSTRAINT fk_rpg_coop_member_weekly
|
|
109
|
+
FOREIGN KEY (chat_jid, week_ref_date) REFERENCES rpg_group_coop_weekly(chat_jid, week_ref_date)
|
|
110
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
111
|
+
CONSTRAINT fk_rpg_coop_member_owner
|
|
112
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
113
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
114
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
115
|
+
|
|
116
|
+
CREATE TABLE IF NOT EXISTS rpg_group_event_weekly (
|
|
117
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
118
|
+
week_ref_date DATE NOT NULL,
|
|
119
|
+
event_key VARCHAR(64) NOT NULL,
|
|
120
|
+
target_value BIGINT UNSIGNED NOT NULL,
|
|
121
|
+
progress_value BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
122
|
+
status VARCHAR(24) NOT NULL DEFAULT 'active',
|
|
123
|
+
expires_at DATETIME NOT NULL,
|
|
124
|
+
completed_at DATETIME NULL,
|
|
125
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
126
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
127
|
+
PRIMARY KEY (chat_jid, week_ref_date),
|
|
128
|
+
INDEX idx_rpg_event_weekly_status_expires (status, expires_at)
|
|
129
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
130
|
+
|
|
131
|
+
CREATE TABLE IF NOT EXISTS rpg_group_event_member (
|
|
132
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
133
|
+
week_ref_date DATE NOT NULL,
|
|
134
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
135
|
+
contribution BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
136
|
+
reward_claimed_at DATETIME NULL,
|
|
137
|
+
last_contribution_at DATETIME NULL,
|
|
138
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
139
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
140
|
+
PRIMARY KEY (chat_jid, week_ref_date, owner_jid),
|
|
141
|
+
INDEX idx_rpg_event_member_owner (owner_jid, week_ref_date),
|
|
142
|
+
CONSTRAINT fk_rpg_event_member_weekly
|
|
143
|
+
FOREIGN KEY (chat_jid, week_ref_date) REFERENCES rpg_group_event_weekly(chat_jid, week_ref_date)
|
|
144
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
145
|
+
CONSTRAINT fk_rpg_event_member_owner
|
|
146
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
147
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
148
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
149
|
+
|
|
150
|
+
CREATE TABLE IF NOT EXISTS rpg_karma_profile (
|
|
151
|
+
owner_jid VARCHAR(255) PRIMARY KEY,
|
|
152
|
+
karma_score INT NOT NULL DEFAULT 0,
|
|
153
|
+
positive_votes INT UNSIGNED NOT NULL DEFAULT 0,
|
|
154
|
+
negative_votes INT UNSIGNED NOT NULL DEFAULT 0,
|
|
155
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
156
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
157
|
+
CONSTRAINT fk_rpg_karma_profile_owner
|
|
158
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
159
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
160
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
161
|
+
|
|
162
|
+
CREATE TABLE IF NOT EXISTS rpg_karma_vote_history (
|
|
163
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
164
|
+
week_ref_date DATE NOT NULL,
|
|
165
|
+
voter_jid VARCHAR(255) NOT NULL,
|
|
166
|
+
target_jid VARCHAR(255) NOT NULL,
|
|
167
|
+
vote_value TINYINT NOT NULL,
|
|
168
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
169
|
+
UNIQUE KEY uq_rpg_karma_week_vote (week_ref_date, voter_jid, target_jid),
|
|
170
|
+
INDEX idx_rpg_karma_target_week (target_jid, week_ref_date),
|
|
171
|
+
CONSTRAINT fk_rpg_karma_vote_voter
|
|
172
|
+
FOREIGN KEY (voter_jid) REFERENCES rpg_player(jid)
|
|
173
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
174
|
+
CONSTRAINT fk_rpg_karma_vote_target
|
|
175
|
+
FOREIGN KEY (target_jid) REFERENCES rpg_player(jid)
|
|
176
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
177
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
178
|
+
|
|
179
|
+
CREATE TABLE IF NOT EXISTS rpg_group_activity_daily (
|
|
180
|
+
day_ref_date DATE NOT NULL,
|
|
181
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
182
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
183
|
+
actions_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
184
|
+
pvp_created_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
185
|
+
pvp_completed_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
186
|
+
coop_completed_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
187
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
188
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
189
|
+
PRIMARY KEY (day_ref_date, chat_jid, owner_jid),
|
|
190
|
+
INDEX idx_rpg_activity_chat_day (chat_jid, day_ref_date),
|
|
191
|
+
INDEX idx_rpg_activity_owner_day (owner_jid, day_ref_date),
|
|
192
|
+
CONSTRAINT fk_rpg_activity_owner
|
|
193
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
194
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
195
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
SET @xp_pool_social_exists := (
|
|
2
|
+
SELECT COUNT(*)
|
|
3
|
+
FROM INFORMATION_SCHEMA.COLUMNS
|
|
4
|
+
WHERE TABLE_SCHEMA = DATABASE()
|
|
5
|
+
AND TABLE_NAME = 'rpg_player'
|
|
6
|
+
AND COLUMN_NAME = 'xp_pool_social'
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
SET @xp_pool_social_sql := IF(
|
|
10
|
+
@xp_pool_social_exists = 0,
|
|
11
|
+
'ALTER TABLE rpg_player ADD COLUMN xp_pool_social BIGINT UNSIGNED NOT NULL DEFAULT 0 AFTER xp',
|
|
12
|
+
'SELECT 1'
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
PREPARE stmt_rpg_player_xp_pool_social FROM @xp_pool_social_sql;
|
|
16
|
+
EXECUTE stmt_rpg_player_xp_pool_social;
|
|
17
|
+
DEALLOCATE PREPARE stmt_rpg_player_xp_pool_social;
|
|
18
|
+
|
|
19
|
+
CREATE TABLE IF NOT EXISTS rpg_social_xp_daily (
|
|
20
|
+
day_ref_date DATE NOT NULL,
|
|
21
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
22
|
+
chat_jid VARCHAR(255) NOT NULL,
|
|
23
|
+
earned_xp INT UNSIGNED NOT NULL DEFAULT 0,
|
|
24
|
+
converted_xp INT UNSIGNED NOT NULL DEFAULT 0,
|
|
25
|
+
cap_hits INT UNSIGNED NOT NULL DEFAULT 0,
|
|
26
|
+
last_message_hash CHAR(40) NULL,
|
|
27
|
+
last_earned_at DATETIME NULL,
|
|
28
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
29
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
30
|
+
PRIMARY KEY (day_ref_date, owner_jid, chat_jid),
|
|
31
|
+
INDEX idx_rpg_social_xp_owner_day (owner_jid, day_ref_date),
|
|
32
|
+
INDEX idx_rpg_social_xp_chat_day (chat_jid, day_ref_date),
|
|
33
|
+
CONSTRAINT fk_rpg_social_xp_owner
|
|
34
|
+
FOREIGN KEY (owner_jid) REFERENCES rpg_player(jid)
|
|
35
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
36
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_asset_classification (
|
|
2
|
+
asset_id CHAR(36) PRIMARY KEY,
|
|
3
|
+
provider VARCHAR(64) NOT NULL DEFAULT 'clip',
|
|
4
|
+
model_name VARCHAR(120) NULL,
|
|
5
|
+
category VARCHAR(120) NULL,
|
|
6
|
+
confidence DECIMAL(6,5) NULL,
|
|
7
|
+
nsfw_score DECIMAL(6,5) NULL,
|
|
8
|
+
is_nsfw TINYINT(1) NOT NULL DEFAULT 0,
|
|
9
|
+
all_scores JSON NULL,
|
|
10
|
+
classified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
11
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
12
|
+
CONSTRAINT fk_sticker_asset_classification_asset
|
|
13
|
+
FOREIGN KEY (asset_id) REFERENCES sticker_asset(id)
|
|
14
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
15
|
+
INDEX idx_sticker_asset_classification_category (category),
|
|
16
|
+
INDEX idx_sticker_asset_classification_nsfw (is_nsfw)
|
|
17
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_pack_engagement (
|
|
2
|
+
pack_id CHAR(36) PRIMARY KEY,
|
|
3
|
+
open_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
4
|
+
like_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
5
|
+
dislike_count BIGINT UNSIGNED NOT NULL DEFAULT 0,
|
|
6
|
+
last_opened_at TIMESTAMP NULL DEFAULT NULL,
|
|
7
|
+
last_interacted_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
8
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
9
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
10
|
+
CONSTRAINT fk_sticker_pack_engagement_pack
|
|
11
|
+
FOREIGN KEY (pack_id) REFERENCES sticker_pack(id)
|
|
12
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
13
|
+
INDEX idx_sticker_pack_engagement_updated (updated_at),
|
|
14
|
+
INDEX idx_sticker_pack_engagement_like (like_count),
|
|
15
|
+
INDEX idx_sticker_pack_engagement_open (open_count)
|
|
16
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_pack_interaction_event (
|
|
2
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
3
|
+
pack_id CHAR(36) NOT NULL,
|
|
4
|
+
interaction ENUM('open', 'like', 'dislike') NOT NULL,
|
|
5
|
+
actor_key VARCHAR(120) NULL,
|
|
6
|
+
session_key VARCHAR(120) NULL,
|
|
7
|
+
source VARCHAR(32) NULL,
|
|
8
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
9
|
+
CONSTRAINT fk_sticker_pack_interaction_pack
|
|
10
|
+
FOREIGN KEY (pack_id) REFERENCES sticker_pack(id)
|
|
11
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
12
|
+
INDEX idx_sticker_pack_interaction_pack_created (pack_id, created_at),
|
|
13
|
+
INDEX idx_sticker_pack_interaction_actor_created (actor_key, created_at),
|
|
14
|
+
INDEX idx_sticker_pack_interaction_session_created (session_key, created_at),
|
|
15
|
+
INDEX idx_sticker_pack_interaction_type_created (interaction, created_at)
|
|
16
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
17
|
+
|
|
18
|
+
ALTER TABLE sticker_asset_classification
|
|
19
|
+
ADD COLUMN IF NOT EXISTS classification_version VARCHAR(32) NOT NULL DEFAULT 'v1' AFTER model_name;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
ALTER TABLE sticker_pack
|
|
2
|
+
ADD COLUMN IF NOT EXISTS status ENUM('draft', 'uploading', 'processing', 'published', 'failed')
|
|
3
|
+
NOT NULL DEFAULT 'published'
|
|
4
|
+
AFTER visibility;
|
|
5
|
+
|
|
6
|
+
CREATE TABLE IF NOT EXISTS sticker_pack_web_upload (
|
|
7
|
+
id CHAR(36) PRIMARY KEY,
|
|
8
|
+
pack_id CHAR(36) NOT NULL,
|
|
9
|
+
upload_id VARCHAR(120) NOT NULL,
|
|
10
|
+
sticker_hash CHAR(64) NOT NULL,
|
|
11
|
+
source_mimetype VARCHAR(64) NULL,
|
|
12
|
+
upload_status ENUM('pending', 'processing', 'done', 'failed') NOT NULL DEFAULT 'pending',
|
|
13
|
+
sticker_id CHAR(36) NULL,
|
|
14
|
+
error_code VARCHAR(64) NULL,
|
|
15
|
+
error_message VARCHAR(255) NULL,
|
|
16
|
+
attempt_count INT UNSIGNED NOT NULL DEFAULT 0,
|
|
17
|
+
last_attempt_at TIMESTAMP NULL DEFAULT NULL,
|
|
18
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
19
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
20
|
+
UNIQUE KEY uq_sticker_pack_web_upload_pack_upload_id (pack_id, upload_id),
|
|
21
|
+
UNIQUE KEY uq_sticker_pack_web_upload_pack_hash (pack_id, sticker_hash),
|
|
22
|
+
INDEX idx_sticker_pack_web_upload_pack_status (pack_id, upload_status),
|
|
23
|
+
INDEX idx_sticker_pack_web_upload_pack_updated (pack_id, updated_at),
|
|
24
|
+
CONSTRAINT fk_sticker_pack_web_upload_pack
|
|
25
|
+
FOREIGN KEY (pack_id) REFERENCES sticker_pack(id)
|
|
26
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
27
|
+
CONSTRAINT fk_sticker_pack_web_upload_sticker
|
|
28
|
+
FOREIGN KEY (sticker_id) REFERENCES sticker_asset(id)
|
|
29
|
+
ON DELETE SET NULL ON UPDATE CASCADE
|
|
30
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_asset_reprocess_queue (
|
|
2
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
3
|
+
asset_id CHAR(36) NOT NULL,
|
|
4
|
+
reason ENUM('MODEL_UPGRADE', 'LOW_CONFIDENCE', 'TREND_SHIFT', 'NSFW_REVIEW') NOT NULL,
|
|
5
|
+
priority TINYINT UNSIGNED NOT NULL DEFAULT 50,
|
|
6
|
+
scheduled_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
7
|
+
status ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending',
|
|
8
|
+
attempts TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
|
9
|
+
max_attempts TINYINT UNSIGNED NOT NULL DEFAULT 5,
|
|
10
|
+
worker_token CHAR(36) NULL,
|
|
11
|
+
last_error VARCHAR(255) NULL,
|
|
12
|
+
locked_at TIMESTAMP NULL DEFAULT NULL,
|
|
13
|
+
processed_at TIMESTAMP NULL DEFAULT NULL,
|
|
14
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
15
|
+
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
16
|
+
CONSTRAINT fk_sticker_reprocess_asset
|
|
17
|
+
FOREIGN KEY (asset_id) REFERENCES sticker_asset(id)
|
|
18
|
+
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
19
|
+
INDEX idx_sticker_reprocess_status_schedule (status, scheduled_at, priority),
|
|
20
|
+
INDEX idx_sticker_reprocess_asset_reason (asset_id, reason),
|
|
21
|
+
INDEX idx_sticker_reprocess_worker_token (worker_token)
|
|
22
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
23
|
+
|
|
24
|
+
CREATE TABLE IF NOT EXISTS sticker_worker_task_queue (
|
|
25
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
26
|
+
task_type ENUM('classification_cycle', 'curation_cycle', 'rebuild_cycle') NOT NULL,
|
|
27
|
+
payload JSON NULL,
|
|
28
|
+
priority TINYINT UNSIGNED NOT NULL DEFAULT 50,
|
|
29
|
+
scheduled_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
30
|
+
status ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending',
|
|
31
|
+
attempts TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
|
32
|
+
max_attempts TINYINT UNSIGNED NOT NULL DEFAULT 5,
|
|
33
|
+
worker_token CHAR(36) NULL,
|
|
34
|
+
last_error VARCHAR(255) NULL,
|
|
35
|
+
locked_at TIMESTAMP NULL DEFAULT NULL,
|
|
36
|
+
processed_at TIMESTAMP NULL DEFAULT NULL,
|
|
37
|
+
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
38
|
+
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
39
|
+
INDEX idx_sticker_worker_task_type_status_schedule (task_type, status, scheduled_at, priority),
|
|
40
|
+
INDEX idx_sticker_worker_task_status_schedule (status, scheduled_at, priority),
|
|
41
|
+
INDEX idx_sticker_worker_task_worker_token (worker_token)
|
|
42
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
ALTER TABLE sticker_pack
|
|
2
|
+
ADD COLUMN IF NOT EXISTS pack_status ENUM('building', 'ready', 'archived')
|
|
3
|
+
NOT NULL DEFAULT 'ready'
|
|
4
|
+
AFTER status,
|
|
5
|
+
ADD COLUMN IF NOT EXISTS pack_theme_key VARCHAR(96) NULL
|
|
6
|
+
AFTER pack_status,
|
|
7
|
+
ADD COLUMN IF NOT EXISTS pack_volume INT UNSIGNED NULL
|
|
8
|
+
AFTER pack_theme_key,
|
|
9
|
+
ADD COLUMN IF NOT EXISTS is_auto_pack TINYINT(1) NOT NULL DEFAULT 0
|
|
10
|
+
AFTER pack_volume,
|
|
11
|
+
ADD COLUMN IF NOT EXISTS last_rebalanced_at TIMESTAMP NULL DEFAULT NULL
|
|
12
|
+
AFTER is_auto_pack;
|
|
13
|
+
|
|
14
|
+
CREATE INDEX idx_sticker_pack_auto_theme_status
|
|
15
|
+
ON sticker_pack (is_auto_pack, pack_theme_key, pack_status, pack_volume);
|
|
16
|
+
|
|
17
|
+
CREATE INDEX idx_sticker_pack_auto_owner_status
|
|
18
|
+
ON sticker_pack (owner_jid, is_auto_pack, pack_status, updated_at);
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_web_google_user (
|
|
2
|
+
google_sub VARCHAR(80) PRIMARY KEY,
|
|
3
|
+
owner_jid VARCHAR(120) NOT NULL,
|
|
4
|
+
email VARCHAR(255) NULL,
|
|
5
|
+
name VARCHAR(120) NULL,
|
|
6
|
+
picture_url VARCHAR(1024) NULL,
|
|
7
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
8
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
9
|
+
last_login_at TIMESTAMP NULL DEFAULT NULL,
|
|
10
|
+
last_seen_at TIMESTAMP NULL DEFAULT NULL,
|
|
11
|
+
UNIQUE KEY uq_sticker_web_google_user_owner_jid (owner_jid),
|
|
12
|
+
INDEX idx_sticker_web_google_user_email (email)
|
|
13
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
14
|
+
|
|
15
|
+
CREATE TABLE IF NOT EXISTS sticker_web_google_session (
|
|
16
|
+
session_token CHAR(36) PRIMARY KEY,
|
|
17
|
+
google_sub VARCHAR(80) NOT NULL,
|
|
18
|
+
owner_jid VARCHAR(120) NOT NULL,
|
|
19
|
+
email VARCHAR(255) NULL,
|
|
20
|
+
name VARCHAR(120) NULL,
|
|
21
|
+
picture_url VARCHAR(1024) NULL,
|
|
22
|
+
expires_at TIMESTAMP NOT NULL,
|
|
23
|
+
revoked_at TIMESTAMP NULL DEFAULT NULL,
|
|
24
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
25
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
26
|
+
last_seen_at TIMESTAMP NULL DEFAULT NULL,
|
|
27
|
+
INDEX idx_sticker_web_google_session_google_sub (google_sub),
|
|
28
|
+
INDEX idx_sticker_web_google_session_owner_jid (owner_jid),
|
|
29
|
+
INDEX idx_sticker_web_google_session_expires_at (expires_at),
|
|
30
|
+
INDEX idx_sticker_web_google_session_revoked_expires (revoked_at, expires_at),
|
|
31
|
+
CONSTRAINT fk_sticker_web_google_session_user
|
|
32
|
+
FOREIGN KEY (google_sub) REFERENCES sticker_web_google_user(google_sub)
|
|
33
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
34
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_web_admin_ban (
|
|
2
|
+
id CHAR(36) PRIMARY KEY,
|
|
3
|
+
google_sub VARCHAR(80) NULL,
|
|
4
|
+
email VARCHAR(255) NULL,
|
|
5
|
+
owner_jid VARCHAR(255) NULL,
|
|
6
|
+
reason VARCHAR(255) NULL,
|
|
7
|
+
created_by_google_sub VARCHAR(80) NULL,
|
|
8
|
+
created_by_email VARCHAR(255) NULL,
|
|
9
|
+
revoked_at TIMESTAMP NULL DEFAULT NULL,
|
|
10
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
11
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
12
|
+
CONSTRAINT chk_sticker_web_admin_ban_identity
|
|
13
|
+
CHECK (
|
|
14
|
+
google_sub IS NOT NULL
|
|
15
|
+
OR email IS NOT NULL
|
|
16
|
+
OR owner_jid IS NOT NULL
|
|
17
|
+
),
|
|
18
|
+
INDEX idx_sticker_web_admin_ban_google_sub (google_sub, revoked_at, created_at),
|
|
19
|
+
INDEX idx_sticker_web_admin_ban_email (email, revoked_at, created_at),
|
|
20
|
+
INDEX idx_sticker_web_admin_ban_owner_jid (owner_jid, revoked_at, created_at),
|
|
21
|
+
INDEX idx_sticker_web_admin_ban_revoked_created (revoked_at, created_at)
|
|
22
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS sticker_web_admin_moderator (
|
|
2
|
+
google_sub VARCHAR(80) PRIMARY KEY,
|
|
3
|
+
owner_jid VARCHAR(255) NOT NULL,
|
|
4
|
+
email VARCHAR(255) NOT NULL,
|
|
5
|
+
name VARCHAR(120) NULL,
|
|
6
|
+
password_hash VARCHAR(255) NOT NULL,
|
|
7
|
+
created_by_google_sub VARCHAR(80) NULL,
|
|
8
|
+
created_by_email VARCHAR(255) NULL,
|
|
9
|
+
updated_by_google_sub VARCHAR(80) NULL,
|
|
10
|
+
updated_by_email VARCHAR(255) NULL,
|
|
11
|
+
last_login_at TIMESTAMP NULL DEFAULT NULL,
|
|
12
|
+
revoked_at TIMESTAMP NULL DEFAULT NULL,
|
|
13
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
14
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
15
|
+
INDEX idx_sticker_web_admin_moderator_email (email),
|
|
16
|
+
INDEX idx_sticker_web_admin_moderator_owner_jid (owner_jid),
|
|
17
|
+
INDEX idx_sticker_web_admin_moderator_revoked_updated (revoked_at, updated_at)
|
|
18
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
ALTER TABLE sticker_asset_classification
|
|
2
|
+
ADD COLUMN IF NOT EXISTS entropy DECIMAL(8,6) NULL AFTER confidence,
|
|
3
|
+
ADD COLUMN IF NOT EXISTS confidence_margin DECIMAL(8,6) NULL AFTER entropy,
|
|
4
|
+
ADD COLUMN IF NOT EXISTS top_labels JSON NULL AFTER all_scores,
|
|
5
|
+
ADD COLUMN IF NOT EXISTS affinity_weight DECIMAL(8,6) NULL AFTER top_labels,
|
|
6
|
+
ADD COLUMN IF NOT EXISTS image_hash CHAR(64) NULL AFTER affinity_weight,
|
|
7
|
+
ADD COLUMN IF NOT EXISTS ambiguous TINYINT(1) NOT NULL DEFAULT 0 AFTER image_hash,
|
|
8
|
+
ADD COLUMN IF NOT EXISTS llm_subtags JSON NULL AFTER ambiguous,
|
|
9
|
+
ADD COLUMN IF NOT EXISTS llm_style_traits JSON NULL AFTER llm_subtags,
|
|
10
|
+
ADD COLUMN IF NOT EXISTS llm_emotions JSON NULL AFTER llm_style_traits,
|
|
11
|
+
ADD COLUMN IF NOT EXISTS llm_pack_suggestions JSON NULL AFTER llm_emotions,
|
|
12
|
+
ADD COLUMN IF NOT EXISTS similar_images JSON NULL AFTER llm_pack_suggestions;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS semantic_theme_clusters (
|
|
2
|
+
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
3
|
+
canonical_slug VARCHAR(255) NOT NULL,
|
|
4
|
+
embedding_dim SMALLINT UNSIGNED NOT NULL,
|
|
5
|
+
embedding MEDIUMBLOB NOT NULL,
|
|
6
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
7
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
8
|
+
INDEX idx_semantic_theme_clusters_slug (canonical_slug),
|
|
9
|
+
INDEX idx_semantic_theme_clusters_created (created_at)
|
|
10
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
11
|
+
|
|
12
|
+
CREATE TABLE IF NOT EXISTS semantic_theme_suggestion_cache (
|
|
13
|
+
suggestion_hash CHAR(64) PRIMARY KEY,
|
|
14
|
+
suggestion_text VARCHAR(512) NOT NULL,
|
|
15
|
+
normalized_text VARCHAR(512) NOT NULL,
|
|
16
|
+
semantic_cluster_id BIGINT UNSIGNED NOT NULL,
|
|
17
|
+
canonical_slug VARCHAR(255) NOT NULL,
|
|
18
|
+
embedding_dim SMALLINT UNSIGNED NOT NULL,
|
|
19
|
+
embedding MEDIUMBLOB NOT NULL,
|
|
20
|
+
last_similarity DECIMAL(8,6) NULL,
|
|
21
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
22
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
23
|
+
UNIQUE KEY uq_semantic_theme_cache_normalized (normalized_text),
|
|
24
|
+
INDEX idx_semantic_theme_cache_cluster (semantic_cluster_id),
|
|
25
|
+
CONSTRAINT fk_semantic_theme_cache_cluster
|
|
26
|
+
FOREIGN KEY (semantic_cluster_id) REFERENCES semantic_theme_clusters(id)
|
|
27
|
+
ON DELETE CASCADE ON UPDATE CASCADE
|
|
28
|
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
29
|
+
|
|
30
|
+
ALTER TABLE sticker_asset_classification
|
|
31
|
+
ADD COLUMN IF NOT EXISTS semantic_cluster_id BIGINT UNSIGNED NULL AFTER llm_pack_suggestions,
|
|
32
|
+
ADD COLUMN IF NOT EXISTS semantic_cluster_slug VARCHAR(255) NULL AFTER semantic_cluster_id;
|
|
33
|
+
|
|
34
|
+
ALTER TABLE sticker_asset_classification
|
|
35
|
+
ADD INDEX idx_sticker_asset_classification_semantic_cluster (semantic_cluster_id);
|