package com.njcn.rdms.module.system.dal.dataobject.user;

import com.baomidou.mybatisplus.annotation.FieldStrategy;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.njcn.rdms.framework.mybatis.core.dataobject.BaseDO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.Map;

/**
 * 用户偏好配置 DO
 */
@TableName(value = "system_user_preference", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserPreferenceDO extends BaseDO {

    /**
     * 主键 ID
     *
     * 由当前项目 MyBatis Plus 的 ASSIGN_ID 策略生成，不要求数据库自增。
     */
    @TableId
    private Long id;

    /**
     * 用户 ID
     *
     * 数据库层面对该字段有唯一约束，保证每个用户至多一条偏好记录。
     */
    private Long userId;

    /**
     * 用户主题配置覆盖项
     *
     * 使用 updateStrategy = ALWAYS，保证重置时可以将 JSON 字段更新为 null。
     * 这里只保存用户覆盖项，不保存前端完整默认主题配置。
     */
    @TableField(typeHandler = JacksonTypeHandler.class, updateStrategy = FieldStrategy.ALWAYS)
    private Map<String, Object> themeSettingsJson;

}
