declare namespace Api {
  /**
   * namespace SystemLog
   *
   * backend api module: "system/*-log"
   */
  namespace SystemLog {
    namespace Common {
      interface PageParams {
        pageNo: number;
        pageSize: number;
      }

      interface PageResult<T = any> {
        total: number;
        list: T[];
      }
    }

    namespace Login {
      interface Log {
        id: string;
        logType: number;
        userId?: string | null;
        userType?: number | null;
        traceId?: string | null;
        username: string;
        result: number;
        userIp: string;
        userAgent?: string | null;
        createTime: string;
      }

      type SearchParams = CommonType.RecordNullable<
        Common.PageParams & {
          userIp: string;
          username: string;
          status: boolean;
          createTime: string[];
        }
      >;
    }

    namespace Operate {
      interface Log {
        id: string;
        traceId?: string | null;
        userId: string;
        userName: string;
        userType: number;
        type: string;
        subType: string;
        bizId?: string | null;
        action?: string | null;
        extra?: string | null;
        requestMethod: string;
        requestUrl: string;
        userIp: string;
        userAgent: string;
        createTime: string;
      }

      type SearchParams = CommonType.RecordNullable<
        Common.PageParams & {
          userId: string;
          type: string;
          requestMethod: string;
          subType: string;
          action: string;
          createTime: string[];
        }
      >;
    }

    namespace ApiAccess {
      interface Log {
        id: string;
        traceId?: string | null;
        userId: string;
        userNickname?: string | null;
        userType: number;
        applicationName: string;
        requestMethod: string;
        requestUrl: string;
        requestParams?: string | null;
        responseBody?: string | null;
        userIp: string;
        userAgent: string;
        operateModule?: string | null;
        operateName?: string | null;
        operateType?: number | null;
        beginTime: string;
        endTime: string;
        duration: number;
        resultCode: number;
        resultMsg?: string | null;
        createTime: string;
      }

      type SearchParams = CommonType.RecordNullable<
        Common.PageParams & {
          userId: string;
          userType: number;
          applicationName: string;
          requestUrl: string;
          beginTime: string[];
          duration: number;
          resultCode: number;
        }
      >;
    }

    namespace ApiError {
      interface Log {
        id: string;
        traceId?: string | null;
        userId: string;
        userNickname?: string | null;
        userType: number;
        applicationName: string;
        requestMethod: string;
        requestUrl: string;
        requestParams?: string | null;
        userIp: string;
        userAgent: string;
        exceptionTime: string;
        exceptionName: string;
        exceptionMessage: string;
        exceptionRootCauseMessage?: string | null;
        exceptionStackTrace?: string | null;
        exceptionClassName?: string | null;
        exceptionFileName?: string | null;
        exceptionMethodName?: string | null;
        exceptionLineNumber?: number | null;
        processStatus: number;
        processTime?: string | null;
        processUserId?: string | null;
        createTime: string;
      }

      type SearchParams = CommonType.RecordNullable<
        Common.PageParams & {
          userId: string;
          userType: number;
          applicationName: string;
          requestUrl: string;
          exceptionTime: string[];
          processStatus: number;
        }
      >;
    }
  }
}
