package com.rj.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.rj.tenant.TenantContextHolder;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

/**
 * MyBatis-Plus 公共字段自动填充处理器
 *
 * <p>
 * 仅负责在插入时为带有 tenantId 字段的实体自动填充当前租户ID，<br/>
 * 更新时不修改 tenantId，确保租户ID一旦写入不可被业务层随意修改。
 * </p>
 */
@Component
public class MybatisPlusMetaObjectHandler implements MetaObjectHandler {

    private static final String TENANT_FIELD = "tenantId";

    @Override
    public void insertFill(MetaObject metaObject) {
        // 仅在实体中存在 tenantId 字段且当前值为空时进行填充
        if (metaObject.hasSetter(TENANT_FIELD)) {
            Object currentValue = getFieldValByName(TENANT_FIELD, metaObject);
            if (currentValue == null) {
                String tenantId = TenantContextHolder.getTenantId();
                if (tenantId != null) {
                    this.strictInsertFill(metaObject, TENANT_FIELD, String.class, tenantId);
                }
            }
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        // 不自动更新 tenantId，保持租户ID稳定
    }
}


