package cn.axzo.msg.center.domain.entity;

import cn.axzo.msg.center.service.enums.GeneralMessageStateEnum;
import cn.axzo.msg.center.service.enums.OrganizationTypeEnum;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
import java.util.Date;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * 消息通知记录
 *
 * @author syl
 * @date 2024/01/10
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Accessors(chain = true)
@TableName(value = "common_message_record", autoResultMap = true)
public class CommonMessageRecord {

    /**
     * 消息的唯一标识
     */
    @TableField("identity_code")
    private String identityCode;
    /**
     * 发送者自然人 ID
     */
    @TableField("sender_person_id")
    private Long senderPersonId;
    /**
     * 接收者自然人 ID
     */
    @TableField("receiver_person_id")
    private Long receiverPersonId;

    /**
     * 业务事件code
     */
    @TableField("biz_event_code")
    private String bizEventCode;
    /**
     * 模板编码
     */
    private String templateCode;
    /**
     * 消息标题
     */
    private String title;
    /**
     * 消息内容
     */
    private String content;
    /**
     * 消息所属组织类型
     */
    private OrganizationTypeEnum orgType;
    /**
     * 项目部ID
     */
    @TableField("workspace_id")
    private Long workspaceId;
    /**
     * 企业ID
     */
    @TableField("ou_id")
    private Long ouId;
    /**
     * 消息状态
     */
    private GeneralMessageStateEnum state;
    /**
     * 关联业务主键
     */
    private String bizCode;
    /**
     * 路由参数（留存）
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject routerParams;
    /**
     * 业务扩展参数
     */
    @TableField(typeHandler = FastjsonTypeHandler.class)
    private JSONObject bizExtParams;
    /**
     * 推送重试次数
     */
    private Integer retryCount;
    /**
     * 推送最终失败原因
     */
    private String failCause;

    /**
     * id
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 创建时间
     */
    private Date createAt;

    /**
     * 修改时间
     */
    private Date updateAt;

    /**
     * 是否删除 正常-0，删除-主键ID
     */
    private Long isDelete;

}
