package cn.reghao.oss.console.account.model.po;

import cn.reghao.oss.console.util.db.BaseEntity;
import lombok.*;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.*;

/**
 * Layui 菜单, 作为 RBAC 中的 resource
 *
 * @author reghao
 * @date 2021-04-04 22:42:14
 */
@NoArgsConstructor
@Setter
@Getter
@Table(name = "sys_menu")
@Entity
public class Menu extends BaseEntity {
    // Menu 类型
    @NotBlank(message = "菜单类型不能为空白字符串")
    private String type;
    @NotBlank(message = "菜单名不能为空白字符串")
    private String name;
    @NotBlank(message = "URL 地址不能为空白字符串，目录类型使用可使用 # 字符")
    private String url;
    @NotNull(message = "菜单图标不能为 NULL")
    private String icon;
    // 父级菜单 ID
    @NotNull(message = "父级菜单不能为 NULL")
    private Integer pid;
    // 在同一个 pid 组内的位置，作为排序使用
    @NotNull
    private Integer pos;
    private Boolean enabled;
    // Menu 拥有的所有子 Menu(按排序顺序, 不持久化)
    @Transient
    private Map<Integer, Menu> children;
    @ManyToMany(mappedBy = "menus", fetch = FetchType.EAGER)
    @NotNull(message = "角色不能为 NULL")
    private Set<Role> roles;
    @Transient
    private String remark;

    public Menu(int id, String name) {
        this.id = id;
        this.name = name;
    }
}
