
package com.tmerclub.cloud.rbac.service;

import com.tmerclub.cloud.rbac.model.Menu;
import com.tmerclub.cloud.rbac.vo.MenuSimpleVO;
import com.tmerclub.cloud.rbac.vo.MenuVO;

import java.util.List;

/**
 * 菜单管理
 *
 * @author tmerclub
 * @date 2020-09-14 16:27:55
 */
public interface MenuService {

    /**
     * 根据菜单管理id获取菜单管理
     *
     * @param menuId 菜单管理id
     * @return 菜单管理
     */
    MenuVO getByMenuId(Long menuId);

    /**
     * 保存菜单管理
     *
     * @param menu 菜单管理
     */
    void save(Menu menu);

    /**
     * 更新菜单管理
     *
     * @param menu 菜单管理
     */
    void update(Menu menu);

    /**
     * 根据菜单管理id删除菜单管理
     *
     * @param menuId  菜单id
     * @param sysType 系统类型
     */
    void deleteById(Long menuId, Integer sysType);

    /**
     * 根据系统类型获取该系统的菜单列表
     *
     * @param sysType 系统类型
     * @return 菜单列表
     */
    List<Menu> listBySysType(Integer sysType);

    /**
     * 根据系统类型获取该系统的菜单列表 + 菜单下的权限列表
     *
     * @param sysType 系统类型
     * @param userId  用户id
     * @param isAdmin 是否为管理员
     * @return 菜单列表 + 菜单下的权限列表
     */
    List<MenuSimpleVO> listWithPermissions(Integer sysType, Long userId, Integer isAdmin);

    /**
     * 获取当前用户可见的菜单ids
     *
     * @param userId 用户id
     * @return 菜单列表
     */
    List<Long> listMenuIds(Long userId);
}
