package com.qiaoba.module.tenant.service;

import com.qiaoba.api.tenant.entity.SysTenant;
import com.qiaoba.api.tenant.entity.dto.SysTenantDto;
import com.qiaoba.api.tenant.entity.param.SysTenantParam;
import com.qiaoba.api.tenant.service.SysTenantApiService;
import com.qiaoba.common.database.entity.PageQuery;
import com.qiaoba.common.database.entity.TableDataInfo;
import com.qiaoba.module.tenant.entity.dto.TenantSettingDto;

/**
 * 租户管理 服务层
 *
 * @author ailanyin
 * @version 1.0
 * @since 2023/5/30 10:55
 */
public interface SysTenantService extends SysTenantApiService {

    /**
     * 新增租户
     *
     * @param dto 租户信息
     * @return 结果
     */
    int insert(SysTenantDto dto);

    /**
     * 修改租户
     *
     * @param dto 租户信息
     * @return 结果
     */
    int update(SysTenantDto dto);

    /**
     * 获取租户列表
     *
     * @param param     param
     * @param pageQuery 分页参数
     * @return list
     */
    TableDataInfo<SysTenant> selectPageList(SysTenantParam param, PageQuery pageQuery);

    /**
     * 查询详情
     *
     * @param tenantId tenantId
     * @return info
     */
    SysTenant selectById(String tenantId);

    /**
     * 查询租户信息
     *
     * @param tenantId  租户ID
     * @param allowNull 是否允许为空
     * @return 租户信息
     */
    SysTenant selectById(String tenantId, Boolean allowNull);

    /**
     * 在缓存中查询详情
     *
     * @param tenantId tenantId
     * @return info
     */
    SysTenant selectFromCache(String tenantId);

    /**
     * 更改状态
     *
     * @param tenantId tenantId
     * @param status   status
     */
    void updateStatus(String tenantId, String status);

    /**
     * 更新缓存
     */
    void resetCache();

    /**
     * 修改模式
     *
     * @param dto dto
     * @return 结果
     */
    int updateMode(TenantSettingDto dto);

    /**
     * 完成初始化
     *
     * @param tenantId 租户ID
     */
    int initCompleted(String tenantId);
}
