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

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.Data;
import lombok.EqualsAndHashCode;

import java.util.List;

/**
 * 用户数据可见性配置 DO
 *
 * 每个用户至多一条记录（user_id 有唯一索引），记录该用户在数据可见性维度的配置。
 */
@TableName(value = "system_user_visibility_config", autoResultMap = true)
@Data
@EqualsAndHashCode(callSuper = true)
public class UserVisibilityConfigDO extends BaseDO {

    /**
     * 主键 ID
     */
    @TableId
    private Long id;

    /**
     * 用户 ID
     *
     * 唯一约束，每个用户至多一条可见性配置。
     */
    private Long userId;

    /**
     * 可见性类型
     *
     * 取值：all（全部可见）/ directions（按方向）/ projects（按项目）
     */
    private String visibilityType;

    /**
     * 可见的方向 ID 列表（JSON 存储）
     *
     * visibilityType = "directions" 时有效，存储用户有权查看的方向 ID 集合。
     * autoResultMap = true 已在 @TableName 上声明，typeHandler 才能正常反序列化。
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<Long> visibleDirectionIds;

    /**
     * 可见的项目 ID 列表（JSON 存储）
     *
     * visibilityType = "projects" 时有效，存储用户有权查看的项目 ID 集合。
     * 业务暂未消费，预留字段。
     */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private List<Long> visibleProjectIds;

    /**
     * 备注
     */
    private String remark;

}
