113_normalize_legacy_wechat_provider_key.sql 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. UPDATE auth_identities AS ai
  2. SET
  3. provider_key = 'wechat-main',
  4. metadata = COALESCE(ai.metadata, '{}'::jsonb) || jsonb_build_object(
  5. 'legacy_provider_key', 'wechat',
  6. 'normalized_by_migration', '113_normalize_legacy_wechat_provider_key'
  7. ),
  8. updated_at = NOW()
  9. WHERE ai.provider_type = 'wechat'
  10. AND ai.provider_key = 'wechat'
  11. AND NOT EXISTS (
  12. SELECT 1
  13. FROM auth_identities AS canon
  14. WHERE canon.provider_type = 'wechat'
  15. AND canon.provider_key = 'wechat-main'
  16. AND canon.provider_subject = ai.provider_subject
  17. );
  18. UPDATE auth_identity_channels AS channel
  19. SET
  20. provider_key = 'wechat-main',
  21. metadata = COALESCE(channel.metadata, '{}'::jsonb) || jsonb_build_object(
  22. 'legacy_provider_key', 'wechat',
  23. 'normalized_by_migration', '113_normalize_legacy_wechat_provider_key'
  24. ),
  25. updated_at = NOW()
  26. WHERE channel.provider_type = 'wechat'
  27. AND channel.provider_key = 'wechat'
  28. AND NOT EXISTS (
  29. SELECT 1
  30. FROM auth_identity_channels AS canon
  31. WHERE canon.provider_type = 'wechat'
  32. AND canon.provider_key = 'wechat-main'
  33. AND canon.channel = channel.channel
  34. AND canon.channel_app_id = channel.channel_app_id
  35. AND canon.channel_subject = channel.channel_subject
  36. );
  37. INSERT INTO auth_identity_migration_reports (report_type, report_key, details)
  38. SELECT
  39. 'wechat_provider_key_conflict',
  40. CAST(ai.id AS TEXT),
  41. jsonb_build_object(
  42. 'legacy_identity_id', ai.id,
  43. 'legacy_user_id', ai.user_id,
  44. 'provider_subject', ai.provider_subject,
  45. 'canonical_identity_id', canon.id,
  46. 'canonical_user_id', canon.user_id,
  47. 'same_user', canon.user_id = ai.user_id,
  48. 'migration', '113_normalize_legacy_wechat_provider_key'
  49. )
  50. FROM auth_identities AS ai
  51. JOIN auth_identities AS canon
  52. ON canon.provider_type = 'wechat'
  53. AND canon.provider_key = 'wechat-main'
  54. AND canon.provider_subject = ai.provider_subject
  55. WHERE ai.provider_type = 'wechat'
  56. AND ai.provider_key = 'wechat'
  57. ON CONFLICT (report_type, report_key) DO NOTHING;
  58. INSERT INTO auth_identity_migration_reports (report_type, report_key, details)
  59. SELECT
  60. 'wechat_channel_provider_key_conflict',
  61. CAST(channel.id AS TEXT),
  62. jsonb_build_object(
  63. 'legacy_channel_id', channel.id,
  64. 'legacy_identity_id', channel.identity_id,
  65. 'canonical_channel_id', canon.id,
  66. 'canonical_identity_id', canon.identity_id,
  67. 'channel', channel.channel,
  68. 'channel_app_id', channel.channel_app_id,
  69. 'channel_subject', channel.channel_subject,
  70. 'same_user', COALESCE(legacy_identity.user_id = canonical_identity.user_id, FALSE),
  71. 'migration', '113_normalize_legacy_wechat_provider_key'
  72. )
  73. FROM auth_identity_channels AS channel
  74. JOIN auth_identity_channels AS canon
  75. ON canon.provider_type = 'wechat'
  76. AND canon.provider_key = 'wechat-main'
  77. AND canon.channel = channel.channel
  78. AND canon.channel_app_id = channel.channel_app_id
  79. AND canon.channel_subject = channel.channel_subject
  80. LEFT JOIN auth_identities AS legacy_identity
  81. ON legacy_identity.id = channel.identity_id
  82. LEFT JOIN auth_identities AS canonical_identity
  83. ON canonical_identity.id = canon.identity_id
  84. WHERE channel.provider_type = 'wechat'
  85. AND channel.provider_key = 'wechat'
  86. ON CONFLICT (report_type, report_key) DO NOTHING;