package cn.iocoder.yudao.framework.common.exception.enums;

import cn.iocoder.yudao.framework.common.exception.ErrorCode;

/**
 * 全局错误码枚举
 * 0-999 系统异常编码保留
 * 一般情况下，使用 HTTP 响应状态码 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status
 * 虽然说，HTTP 响应状态码作为业务使用表达能力偏弱，但是使用在系统层面还是非常不错的
 * 比较特殊的是，因为之前一直使用 0 作为成功，就不使用 200 啦。
 * @author 捷道源码
 */
public interface GlobalErrorCodeConstants {
    /***  成功 ***/
    ErrorCode SUCCESS = new ErrorCode(0, "common.success");

    /***  客户端错误段 ***/
    ErrorCode BAD_REQUEST = new ErrorCode(400, "common.request.parameter.error");
    ErrorCode UNAUTHORIZED = new ErrorCode(401, "common.no.login");
    ErrorCode FORBIDDEN = new ErrorCode(403, "common.no.auth");
    ErrorCode NOT_FOUND = new ErrorCode(404, "common.request.not.found");
    ErrorCode METHOD_NOT_ALLOWED = new ErrorCode(405, "common.request.method.error");
    ErrorCode LOCKED = new ErrorCode(423, "common.request.error");
    ErrorCode TOO_MANY_REQUESTS = new ErrorCode(429, "common.request.too.much");
    ErrorCode DATA_REPEAT = new ErrorCode(430, "common.request.data.repeat");
    ErrorCode CMS_ERR = new ErrorCode(700, "cms.exception");

    /*** 服务端错误段 ***/
    ErrorCode INTERNAL_SERVER_ERROR = new ErrorCode(500, "common.internal.exception");

    /*** 自定义错误段  ***/
    ErrorCode REPEATED_REQUESTS = new ErrorCode(900, "common.request.repeat");
    ErrorCode DEMO_DENY = new ErrorCode(901, "演示模式，禁止写操作");

    ErrorCode UNKNOWN = new ErrorCode(999, "common.request.unknown ");

    /***
     * 匹配
     * @param code
     * @return
     */
    static boolean isMatch(Integer code) {
        return code != null && code >= SUCCESS.getCode() && code <= UNKNOWN.getCode();
    }
}
