| event_payload |
{"ref":"refs/heads/main","befo {"ref":"refs/heads/main","before":"2186d56d658fcaab3ff5ca5880742254dc8c4545","after":"79d594dd776b47b40e6329ed3f6cf53c2b18251f","compare_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/compare/2186d56d658fcaab3ff5ca5880742254dc8c4545...79d594dd776b47b40e6329ed3f6cf53c2b18251f","commits":[{"id":"79d594dd776b47b40e6329ed3f6cf53c2b18251f","message":"fix(migrations): 修复7个迁移文件确保 shadow DB 全量回放零错误\n\n修复内容:\n1. 20260125000001_enable_pgvector_and_agent_groups\n - 移除重复/冲突的索引定义,消除 shadow DB 回放时的语法冲突\n\n2. 20260126000000_sync_indexes_and_constraints\n - 对索引创建语句进行幂等性保护(IF NOT EXISTS)\n - 修复约束名称冲突问题\n\n3. 20260126000001_add_foreign_keys\n - 将外键添加操作包裹在 DO 块内\n - 检查列是否存在(如 parent_task_id)再添加外键,防止\"列不存在\"错误\n\n4. 20260214000002_expand_serial_number_sn_code_length\n - 先 DROP 依赖视图 v_entitlements_expiring\n - 执行 ALTER COLUMN sn_code TYPE VARCHAR(100)\n - 重建视图,解决\"列被视图使用不能修改类型\"错误\n\n5. 20260215000003_migrate_bank_accounts_from_json\n - 将迁移逻辑包裹在 DO 块内\n - 检查 config_key 列是否存在后再执行,兼容 baseline 和 live DB 的列名差异\n\n6. 20260219000000_add_agent_audit_tables\n - 在 CREATE TABLE agent_audit_logs 前添加条件 DROP\n - 检查旧表标记列 action_type 存在时 DROP CASCADE,解决旧表无 status 列的问题\n\n7. 20260223000000_add_performance_indexes\n - 将 idx_groupbuy_campaign_products_tenant_id_status 索引创建\n 包裹在 DO 块内,检查 status 列存在后再创建\n - groupbuy_campaign_products 建表时未含 status 列,条件跳过\n\n验证:migrate deploy 在空数据库全量回放成功,\"All migrations have been successfully applied.\"\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/79d594dd776b47b40e6329ed3f6cf53c2b18251f","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-02-28T08:55:53+08:00","added":[],"removed":[],"modified":["backend/prisma/migrations/20260125000001_enable_pgvector_and_agent_groups/migration.sql","backend/prisma/migrations/20260126000000_sync_indexes_and_constraints/migration.sql","backend/prisma/migrations/20260126000001_add_foreign_keys/migration.sql","backend/prisma/migrations/20260214000002_expand_serial_number_sn_code_length/migration.sql","backend/prisma/migrations/20260215000003_migrate_bank_accounts_from_json/migration.sql","backend/prisma/migrations/20260219000000_add_agent_audit_tables/migration.sql","backend/prisma/migrations/20260223000000_add_performance_indexes/migration.sql"]}],"total_commits":0,"head_commit":{"id":"79d594dd776b47b40e6329ed3f6cf53c2b18251f","message":"fix(migrations): 修复7个迁移文件确保 shadow DB 全量回放零错误\n\n修复内容:\n1. 20260125000001_enable_pgvector_and_agent_groups\n - 移除重复/冲突的索引定义,消除 shadow DB 回放时的语法冲突\n\n2. 20260126000000_sync_indexes_and_constraints\n - 对索引创建语句进行幂等性保护(IF NOT EXISTS)\n - 修复约束名称冲突问题\n\n3. 20260126000001_add_foreign_keys\n - 将外键添加操作包裹在 DO 块内\n - 检查列是否存在(如 parent_task_id)再添加外键,防止\"列不存在\"错误\n\n4. 20260214000002_expand_serial_number_sn_code_length\n - 先 DROP 依赖视图 v_entitlements_expiring\n - 执行 ALTER COLUMN sn_code TYPE VARCHAR(100)\n - 重建视图,解决\"列被视图使用不能修改类型\"错误\n\n5. 20260215000003_migrate_bank_accounts_from_json\n - 将迁移逻辑包裹在 DO 块内\n - 检查 config_key 列是否存在后再执行,兼容 baseline 和 live DB 的列名差异\n\n6. 20260219000000_add_agent_audit_tables\n - 在 CREATE TABLE agent_audit_logs 前添加条件 DROP\n - 检查旧表标记列 action_type 存在时 DROP CASCADE,解决旧表无 status 列的问题\n\n7. 20260223000000_add_performance_indexes\n - 将 idx_groupbuy_campaign_products_tenant_id_status 索引创建\n 包裹在 DO 块内,检查 status 列存在后再创建\n - groupbuy_campaign_products 建表时未含 status 列,条件跳过\n\n验证:migrate deploy 在空数据库全量回放成功,\"All migrations have been successfully applied.\"\n","url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub/commit/79d594dd776b47b40e6329ed3f6cf53c2b18251f","author":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"committer":{"name":"laoluojuhai","email":"laoluojuhai@users.noreply.github.com","username":""},"verification":null,"timestamp":"2026-02-28T08:55:53+08:00","added":[],"removed":[],"modified":["backend/prisma/migrations/20260125000001_enable_pgvector_and_agent_groups/migration.sql","backend/prisma/migrations/20260126000000_sync_indexes_and_constraints/migration.sql","backend/prisma/migrations/20260126000001_add_foreign_keys/migration.sql","backend/prisma/migrations/20260214000002_expand_serial_number_sn_code_length/migration.sql","backend/prisma/migrations/20260215000003_migrate_bank_accounts_from_json/migration.sql","backend/prisma/migrations/20260219000000_add_agent_audit_tables/migration.sql","backend/prisma/migrations/20260223000000_add_performance_indexes/migration.sql"]},"repository":{"id":6,"owner":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"law@g-hi.com","avatar_url":"https://gitea.g-hi.com/avatars/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"name":"juhi-omni-knowledge-hub","full_name":"luoanwu/juhi-omni-knowledge-hub","description":"巨嗨全域智库 - B2B RevOps 全生命周期平台","empty":false,"private":false,"fork":false,"template":false,"parent":null,"mirror":false,"size":481311,"language":"","languages_url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub/languages","html_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub","url":"https://gitea.g-hi.com/api/v1/repos/luoanwu/juhi-omni-knowledge-hub","link":"","ssh_url":"git@gitea.g-hi.com:luoanwu/juhi-omni-knowledge-hub.git","clone_url":"https://gitea.g-hi.com/luoanwu/juhi-omni-knowledge-hub.git","original_url":"https://github.com/laoluojuhai/juhi-omni-knowledge-hub.git","website":"","stars_count":0,"forks_count":0,"watchers_count":1,"open_issues_count":0,"open_pr_counter":0,"release_counter":0,"default_branch":"main","archived":false,"created_at":"2026-02-23T23:57:52+08:00","updated_at":"2026-02-28T08:55:14+08:00","archived_at":"1970-01-01T08:00:00+08:00","permissions":{"admin":true,"push":true,"pull":true},"has_issues":true,"internal_tracker":{"enable_time_tracker":true,"allow_only_contributors_to_track_time":true,"enable_issue_dependencies":true},"has_wiki":true,"has_pull_requests":true,"has_projects":true,"projects_mode":"all","has_releases":true,"has_packages":true,"has_actions":true,"ignore_whitespace_conflicts":false,"allow_merge_commits":true,"allow_rebase":true,"allow_rebase_explicit":true,"allow_squash_merge":true,"allow_fast_forward_only_merge":true,"allow_rebase_update":true,"default_delete_branch_after_merge":false,"default_merge_style":"merge","default_allow_maintainer_edit":false,"avatar_url":"","internal":false,"mirror_interval":"","object_format_name":"sha1","mirror_updated":"0001-01-01T00:00:00Z","repo_transfer":null},"pusher":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"},"sender":{"id":5,"login":"luoanwu","login_name":"","source_id":0,"full_name":"","email":"luoanwu@noreply.localhost","avatar_url":"https://gitea.g-hi.com/avatars/627574a890388a2aadc80ab38d22f3a0","html_url":"https://gitea.g-hi.com/luoanwu","language":"","is_admin":false,"last_login":"0001-01-01T00:00:00Z","created":"2026-01-30T16:28:30+08:00","restricted":false,"active":false,"prohibit_login":false,"location":"","website":"","description":"","visibility":"public","followers_count":0,"following_count":0,"starred_repos_count":0,"username":"luoanwu"}}... |