package com.casic.missiles.handler;

import com.casic.missiles.dto.ReturnUtil;
import com.casic.missiles.enums.BusinessExceptionEnum;
import com.casic.missiles.exception.BusinessException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Description: 全局异常处理
 * @Author: wangpeng
 * @Date: 2022/11/24 8:50
 */
@Slf4j
@Order(1)
@ControllerAdvice
public class GlobalExceptionHandler {

    /**
     * 业务异常捕获处理
     */
    @ResponseBody
    @ExceptionHandler({BusinessException.class})
    public Object handleError(BusinessException exception) {
        return ReturnUtil.failed(exception.getCode(), exception.getMessage());
    }

    /**
     * 编号重复异常捕获处理
     */
    @ResponseBody
    @ExceptionHandler({DuplicateKeyException.class})
    public Object handleDuplicateKeyException() {
        return ReturnUtil.failed(BusinessExceptionEnum.DUPLICATE_NUMBER.getCode(), BusinessExceptionEnum.DUPLICATE_NUMBER.getMessage());
    }

    /**
     * 参数校验失败异常
     */
    @ResponseBody
    @ExceptionHandler({MethodArgumentNotValidException.class})
    public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException exception) {
        return ReturnUtil.failed(BusinessExceptionEnum.PARAM_INVALID.getCode(), exception.getFieldError().getDefaultMessage());
    }
}
