package com.boman.web.core.controller;

import com.alibaba.fastjson.JSONObject;
import com.boman.domain.dto.*;
import com.boman.web.core.domain.RowResult;
import com.boman.web.core.service.common.ICommonService;
import org.springframework.web.bind.annotation.*;

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

/**
 * @author shiqian
 * @date 2021年04月15日 16:25
 **/
@RestController
@RequestMapping("common/")
public class CommonController {

    @Resource
    private ICommonService commonService;

    /**
     * 功能描述: 根据表名和id查找
     *
     * @param tableName tableName
     * @param id        id
     * @return com.boman.domain.dto.AjaxResult
     */
    @GetMapping("/tableName/{tableName}/id/{id}")
    public AjaxResult getById(@PathVariable("tableName") String tableName, @PathVariable("id") Long id) {
        return AjaxResult.success(commonService.getById(tableName, id));
    }

    /**
     * 功能描述: 根据表名和自定义字段查找
     *
     * @param dto dto
     * @return com.boman.domain.dto.AjaxResult
     */
    @PostMapping
    public AjaxResult getByMap(@RequestBody FormDataDto dto) {
        return AjaxResult.success(commonService.getByMap(dto.getTable(), dto.getFixedData()));
    }

    /**
     * 功能描述: 根据表名和自定义字段查找
     *
     * @param dto dto
     * @return com.boman.domain.dto.AjaxResult
     */
    @PostMapping("/one/map")
    public JSONObject getOneByMap(@RequestBody FormDataDto dto) {
        return commonService.getOneByMap(dto.getTable(), dto.getFixedData());
    }

    /**
     * 功能描述: getMaxId
     *
     * @param tableName tableName
     * @param pkName        pkName
     * @return com.boman.domain.dto.AjaxResult
     */
    @GetMapping("tableName/{tableName}/pkName/{pkName}")
    public Long getMaxId(@PathVariable("tableName") String tableName, @PathVariable("pkName") String pkName) {
        return commonService.getMaxId(tableName, pkName);
    }

    /**
     * 功能描述: count
     *
     * @param dto dto
     * @return com.boman.domain.dto.AjaxResult
     */
    @PostMapping("count")
    public int count(@RequestBody FormDataDto dto) {
        return commonService.count(dto);
    }

    /**
     * 功能描述: 获取最新的一条数据 create_time desc
     *
     * @param tableName tableName
     * @return com.boman.domain.dto.AjaxResult
     */
    @GetMapping("newest/{tableName}")
    public JSONObject getNewest(@PathVariable("tableName") String tableName) {
        return commonService.getNewest(tableName);
    }


    /**
     * 功能描述: 批量插入数据 仅此是关联表的批量插入，不处理多余的字段
     *
     * @param dto dto
     * @return int
     */
    @PostMapping("/insertRelList")
    public int insertRelList(@RequestBody InsertListDto dto) {
        return commonService.insertRelList(dto);
    }

    /**
     * 功能描述: 通用删除数据
     *
     * @param dto dto
     * @return int
     */
    @PostMapping("delete")
    public int delete(@RequestBody DeleteDto dto) {
        return commonService.delete(dto);
    }


    /**
     * 功能描述: 通用修改数据
     *
     * @param dto dto
     * @return int
     */
    @PostMapping("update")
    public int update(@RequestBody UpdateDto dto) {
        return commonService.update(dto);
    }

    /**
     * 功能描述: 通用修改数据
     *
     * @param dto dto
     * @return int
     */
    @PostMapping("insertList")
    public List<RowResult> insertList(@RequestBody InsertListDto dto) {
        return commonService.insertList(dto);
    }

    /**
     * 功能描述: 获取幂等性的标识
     *
     * @param tableName tableName
     * @param username  username
     * @return com.boman.domain.dto.AjaxResult
     */
    @GetMapping("genSubmitToken/{tableName}/{username}")
    public AjaxResult genSubmitToken(@PathVariable("tableName") String tableName, @PathVariable("username") String username) {
        return commonService.genSubmitToken(tableName, username);
    }
}
