package cheat;
import org.apache.commons.lang3.tuple.Pair;

import entity.Appeal;
public interface CheatInterfnterface{
    public Pair<String,String>[] GetFeakSeed();//返回做假种的列表，<seedid,userid>
    public void DetectFeakSeed();//检测所有种子是否为假种，并将检测结果写入数据表
    public void DetectTrans();//检测所有种子是存在伪造上传量下载量
    public boolean DetectTransSeed(String seedid);//检测单个种子是否存在伪造上传量下载量
    public boolean DetectFeakSeed(String seedid);//检测单个用户是否存在假种
    public void PunishUser();//扫描数据库中的可疑表，标记可疑用户
    public boolean DetectUser(String userid);//检测单个用户是否存在可疑行为,每次登录的时候进行检查
    public String[] GetPunishedUserList();//获取所有可疑用户的列表

    public boolean AddAppeal(Appeal appeal);//数据库中写入一个申诉请求
    public Appeal GetAppeal(String appealid);//获取某个申诉
    public Appeal[] GetAppealList();//获取所有申诉列表

    public boolean RevokePunish(String userid);//撤销某个用户的惩罚

}
