package cn.iocoder.yudao.module.conf.controller.admin;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.module.conf.service.BaseTypeService;
import cn.iocoder.yudao.module.conf.vo.BaseTypeListReqVO;
import cn.iocoder.yudao.module.conf.vo.BaseTypeRespVO;
import cn.iocoder.yudao.module.conf.vo.BaseTypeSaveReqVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;
import java.util.List;

import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

@Tag(name = "管理后台 - 账目配置类型")
@RestController
@RequestMapping("/conf/baseType")
@Validated
public class BaseTypeController {

    @Resource
    private BaseTypeService baseTypeService;

    /**
     * 新增账目配置类型
     *
     * @param createReqVO BaseTypeSaveReqVO实体
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<java.lang.String>
     * @author PQZ
     * @date 11:21 2024/9/10
     **/
    @PostMapping("/create")
    @Operation(summary = "创建配置类型")
    public CommonResult<Boolean> createBaseType(@Valid @RequestBody BaseTypeSaveReqVO createReqVO) {
        baseTypeService.saveBaseType(createReqVO);
        return success(true);
    }

    /**
     * 编辑账目配置类型
     *
     * @param updateReqVO BaseTypeSaveReqVO实体
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<java.lang.Boolean>
     * @author PQZ
     * @date 14:25 2024/9/10
     **/
    @PutMapping("/update")
    @Operation(summary = "更新配置类型")
    public CommonResult<Boolean> updateBaseType(@Valid @RequestBody BaseTypeSaveReqVO updateReqVO) {
        baseTypeService.saveBaseType(updateReqVO);
        return success(true);
    }

    /**
     * 删除配置类型
     *
     * @param id 类型id
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<java.lang.Boolean>
     * @author PQZ
     * @date 14:25 2024/9/10
     **/
    @DeleteMapping("/delete")
    @Operation(summary = "删除配置类型")
    @Parameter(name = "id", description = "编号", required = true)
    public CommonResult<Boolean> deleteBaseType(@RequestParam("id") String id) {
        baseTypeService.deleteBaseType(id);
        return success(true);
    }

    /**
     * 根据id获取配置类型
     *
     * @param id 配置类型id
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<cn.iocoder.yudao.module.conf.vo.BaseTypeRespVO>
     * @author PQZ
     * @date 14:26 2024/9/10
     **/
    @GetMapping("/get")
    @Operation(summary = "获得配置类型")
    @Parameter(name = "id", description = "编号", required = true, example = "1024")
    public CommonResult<BaseTypeRespVO> getBaseType(@RequestParam("id") String id) {
        return success(baseTypeService.getBaseType(id));
    }

    /**
     * 配置类型列表
     *
     * @param listReqVO BaseTypeListReqVO 实体
     * @return cn.iocoder.yudao.framework.common.pojo.CommonResult<java.util.List < cn.iocoder.yudao.module.conf.vo.BaseTypeRespVO>>
     * @author PQZ
     * @date 14:26 2024/9/10
     **/
    @GetMapping("/list")
    @Operation(summary = "获得配置类型列表")
    public CommonResult<List<BaseTypeRespVO>> getBaseTypeList(@Valid BaseTypeListReqVO listReqVO) {
        return success(baseTypeService.getBaseTypeList(listReqVO));
    }


}