-- =============================================================================
-- R-001：用户主档字段级变更审计（与《用户主档与薪酬考勤改造记录》R-001 详细设计一致）
-- 说明：
--   1. 主键 F_Id 须由应用层 YitIdHelper.NextId().ToString() 生成，勿在 MySQL 内调用 C#。
--   2. 与 BASE_USER 更新同事务插入；敏感字段禁止明文写入 F_OldValue/F_NewValue。
--   3. 多租户：与 BASE_USER 一致走 SqlSugar Tenant。
-- =============================================================================

CREATE TABLE IF NOT EXISTS `lq_user_profile_audit` (
  `F_Id` varchar(50) NOT NULL COMMENT '主键',
  `F_TargetUserId` varchar(50) NOT NULL COMMENT '被变更用户 BASE_USER.F_Id',
  `F_OperatorUserId` varchar(64) DEFAULT NULL COMMENT '操作人用户ID',
  `F_OperatorUserName` varchar(128) DEFAULT NULL COMMENT '操作人姓名（冗余）',
  `F_OperateTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
  `F_Action` varchar(64) NOT NULL COMMENT '操作类型，见改造文档枚举：PROFILE_UPDATE/PROFILE_CREATE/PROFILE_DELETE_SOFT/ENABLE_TOGGLE/ADMIN_RESET_PASSWORD/CURRENT_MODIFY_PASSWORD/CURRENT_BASE_INFO/CURRENT_THEME/CURRENT_LANGUAGE/CURRENT_AVATAR/RELATION_BATCH_POSITION/RELATION_BATCH_ROLE 等',
  `F_BatchId` varchar(50) DEFAULT NULL COMMENT '同一次请求批次ID（UUID），多字段同一保存共用',
  `F_FieldKey` varchar(64) NOT NULL COMMENT '属性名（与 UserEntity 一致），如 Mdid、OrganizeId、Gw；密码行为 Password；元事件可用 __META__',
  `F_FieldLabel` varchar(64) DEFAULT NULL COMMENT '中文展示名',
  `F_OldValue` text COMMENT '变更前原始值（敏感字段脱敏或占位符）',
  `F_NewValue` text COMMENT '变更后',
  `F_Source` varchar(32) NOT NULL DEFAULT 'API' COMMENT 'API/OAUTH/RELATION_SERVICE/PORTAL/BATCH_IMPORT/SYSTEM',
  `F_ClientIp` varchar(64) DEFAULT NULL COMMENT '客户端 IP（可选）',
  `F_UserAgent` varchar(500) DEFAULT NULL COMMENT 'UA（可选，截断）',
  `F_Remark` varchar(500) DEFAULT NULL COMMENT '备注（如失败回滚说明、导入批次号）',
  PRIMARY KEY (`F_Id`),
  KEY `IX_lq_user_profile_audit_Target_Time` (`F_TargetUserId`,`F_OperateTime`),
  KEY `IX_lq_user_profile_audit_Batch` (`F_BatchId`),
  KEY `IX_lq_user_profile_audit_Operator_Time` (`F_OperatorUserId`,`F_OperateTime`),
  KEY `IX_lq_user_profile_audit_Action_Time` (`F_Action`,`F_OperateTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户主档字段级变更审计';

-- -----------------------------------------------------------------------------
-- 若线上已按旧版脚本建表（无 F_Action/F_ClientIp 等），可手工执行（列已存在则跳过）：
-- ALTER TABLE `lq_user_profile_audit` ADD COLUMN `F_Action` varchar(64) NOT NULL DEFAULT 'PROFILE_UPDATE' COMMENT '操作类型' AFTER `F_OperateTime`;
-- ……按详细设计逐列补充并调整 NOT NULL 默认值策略。
-- -----------------------------------------------------------------------------
-- 可选方案 B：复用 lq_business_operation_log（不写本表），见改造文档「方案 B」。
-- ALTER TABLE `lq_business_operation_log`
--   ADD KEY `IX_lq_business_operation_log_Biz_Time` (`F_BizType`,`F_BizId`,`F_OperateTime`);
