package admin

import (
	"ulink-admin/frame"
	"ulink-admin/modules/{{.ModuleName}}/models/req"
	"ulink-admin/modules/{{.ModuleName}}/models/model"
		"ulink-admin/modules/{{.ModuleName}}/models/response"
    "ulink-admin/modules/{{.ModuleName}}/service"
	"ulink-admin/pkg/page"
	"ulink-admin/pkg/excels"
	"ulink-admin/pkg/file"
	"ulink-admin/utils"
)

type {{.ClassNameUpper}}Api struct {
	{{.ClassNameUpper}}Service     *service.{{.ClassNameUpper}}Service  `inject:""`
}

// List 查询{{.FunctionName}}分页数据
// @Summary 分页查询{{.FunctionName}}数据接口
// @Description 分页查询{{.FunctionName}}数据接口
// @Tags {{.FunctionName}}相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param object query req.{{.ClassNameUpper}}Query false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=page.Page{list=model.{{.ClassNameUpper}}},msg=string} "分页获取{{.FunctionName}}列表,返回包括列表,总数,页码,每页数量"
// @Router /{{toLower .ClassNameLower}}/page [get]
func (this {{.ClassNameUpper}}Api) Page(c *frame.Context) {
	query := &req.{{.ClassNameUpper}}Query{}
	c.ValidteError(c.ShouldBind(query), query)
    list := make([]response.{{.ClassNameUpper}}Response, 0)
	i := this.{{.ClassNameUpper}}Service.Page(query,&list)
	c.Ok(page.Page{List: list, Total: i, Size: query.PageSize})
}

// List 查询{{.FunctionName}}所有数据
// @Summary 查询全部数据{{.FunctionName}}数据接口
// @Description 查询全部数据{{.FunctionName}}数据接口
// @Tags {{.FunctionName}}相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param object query req.{{.ClassNameUpper}}Query false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=model.{{.ClassNameUpper}},msg=string} "分页获取{{.FunctionName}}列表,返回包括列表,总数,页码,每页数量"
// @Router /{{toLower .ClassNameLower}}/list [get]
func (this {{.ClassNameUpper}}Api) List(c *frame.Context) {
	query := &req.{{.ClassNameUpper}}Query{}
	list := make([]response.{{.ClassNameUpper}}Response, 0)
	c.ValidteError(c.ShouldBind(query), query)
	this.{{.ClassNameUpper}}Service.List(query,&list)
	c.Ok(list)
}


// Get 根据{{.FunctionName}}Id获取详细信息
// @Summary {{.FunctionName}}详情查询接口
// @Description {{.FunctionName}}详情查询接口
// @Tags {{.FunctionName}}相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param id query   int true "id" id
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=model.{{.ClassNameUpper}},msg=string} "返回{{.FunctionName}}详情查询"
// @Router /{{toLower .ClassNameLower}} [get]
func (this {{.ClassNameUpper}}Api) Get(c *frame.Context) {
	var req struct {
		Id int64 `form:"id" binding:"required"  msg:"id不存在" ` //id
	}
	c.ValidteError(c.ShouldBind(&req), &req)
	c.Ok(this.{{.ClassNameUpper}}Service.Get(req.Id))
}

// Add 新增{{.FunctionName}}
// @Summary 新增{{.FunctionName}}接口
// @Description 新增{{.FunctionName}}接口
// @Tags {{.FunctionName}}相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param  data body model.{{.ClassNameUpper}} true "{{.FunctionName}}实体对象"
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /{{toLower .ClassNameLower}}/add [post]
func (this {{.ClassNameUpper}}Api) Add(c *frame.Context) {
	params,{{.ClassNameCamel}} := &req.{{.ClassNameUpper}}Add{},&model.{{.ClassNameUpper}}{}
	c.ValidteError(c.ShouldBind(params), params)
	utils.CopyFields({{.ClassNameCamel}},params)
	this.{{.ClassNameUpper}}Service.Insert({{.ClassNameCamel}})
}

// Edit 修改{{.FunctionName}}数据接口
// @Summary 修改{{.FunctionName}}接口
// @Description 新增{{.FunctionName}}接口
// @Tags {{.FunctionName}}相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param  data body model.{{.ClassNameUpper}} true "{{.FunctionName}}实体对象"
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /{{toLower .ClassNameLower}}/edit [put]
func (this {{.ClassNameUpper}}Api) Edit(c *frame.Context) {
	params,{{.ClassNameCamel}}:= &req.{{.ClassNameUpper}}Edit{},&model.{{.ClassNameUpper}}{}
	c.ValidteError(c.ShouldBind(params), params)
	utils.CopyFields({{.ClassNameCamel}},params)
	this.{{.ClassNameUpper}}Service.Edit({{.ClassNameCamel}}, c.Cols())
}


// Delete 删除{{.FunctionName}}数据
// @Summary 删除{{.FunctionName}}接口
// @Description 删除{{.FunctionName}}接口
// @Tags {{.FunctionName}}相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param id path   int true "id" id
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /{{toLower .ClassNameLower}} [delete]
func (a {{.ClassNameUpper}}Api) Delete(c *frame.Context) {
	var req struct {
		Ids []int64 `form:"ids" binding:"required"  msg:"ids不存在"` //ids
	}
	c.ValidteError(c.ShouldBind(&req), &req)
	a.{{.ClassNameUpper}}Service.Delete(req.Ids)
}

// Export 导出excel
func (this {{.ClassNameUpper}}Api) Export(c *frame.Context) {
	query := &req.{{.ClassNameUpper}}Query{}
    list := make([]model.{{.ClassNameUpper}}, 0)
	c.ValidteError(c.ShouldBind(query), query)
	this.{{.ClassNameUpper}}Service.List(query,list)
	excelList := make([]interface{}, 0)
	for _, {{.ClassNameCamel}} := range list {
		excelList = append(excelList, {{.ClassNameCamel}})
	}
	_, files := excels.ExportExcel(excelList, "{{.FunctionName}}数据表")
	file.DownloadExcel(c, files)
}