package com.jy.log.dao;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jy.framework.model.base.BaseDao;
import com.jy.log.mapper.LogExceptionMapper;
import com.jy.log.model.dto.LogExceptionSelectDto;
import com.jy.log.model.entity.LogException;
import com.jy.log.model.table.LogExceptionTable;
import com.jy.log.model.vo.LogExceptionVo;
import com.jy.system.model.table.SysUserTable;
import org.springframework.stereotype.Service;

@Service
public class LogExceptionDao extends BaseDao<LogExceptionMapper, LogException> {

    /**
     * 异常日志分页
     */
    public Page<LogExceptionVo> getPage(LogExceptionSelectDto dto) {
        LogExceptionTable le = LogExceptionTable.le;
        SysUserTable su = SysUserTable.su;

        return sql(LogExceptionVo.class)
                .select(
                        le.id,
                        le.method,
                        le.bestMatching,
                        le.createTime,
                        le.errorMsg,
                        su.nickname,
                        su.username
                )
                .from(le)
                .leftJoin(su).on(le.createUser.eq(su.id))
                .where(
                        le.method.eq(dto.getMethod()),
                        le.bestMatching.like(dto.getBestMatching()),
                        su.username.like(dto.getUsername()),
                        le.createUser.eq(dto.getCreateUser()),
                        le.createTime.between(dto.getCreateTime())
                )
                .orderBy(le.id.desc())
                .page(dto.getPage());
    }

    /**
     * 异常日志明细
     */
    public LogExceptionVo getDetail(Long id) {
        LogExceptionTable le = LogExceptionTable.le;

        return sql(LogExceptionVo.class)
                .select(
                        le.id,
                        le.method,
                        le.bestMatching,
                        le.requestAttribute,
                        le.requestParam,
                        le.requestBody,
                        le.errorMsg,
                        le.errorDetail
                )
                .from(le)
                .where(le.id.eq(id))
                .one();
    }

}
