{{- if .IsAdd}}
// 在 {{.StructName}}Search 结构体中新增如下字段
{{- range .Fields}}
	{{- if .FieldSearchType}}
{{ GenerateSearchField . }}
	{{- end}}
{{- end}}

// 在 {{.StructName}}ListRequest 结构体中新增如下字段
{{- range .Fields}}
	{{- if .FieldSearchType}}
{{ GenerateSearchField . }}
	{{- end}}
{{- end}}

// 在 {{.StructName}}Request 结构体中新增如下字段
{{- range .Fields}}
	{{- if not .PrimaryKey}}
{{.FieldName}} {{.FieldType}} `json:"{{.FieldJson}}"{{if .Require}} binding:"required"{{end}}` // {{.FieldDesc}}
	{{- end}}
{{- end}}

// 在 To{{.StructName}}() 方法中新增如下字段映射
{{- range .Fields}}
	{{- if not .PrimaryKey}}
// {{.FieldName}}: r.{{.FieldName}},
	{{- end}}
{{- end}}

// 在 From{{.StructName}}() 函数中新增如下字段映射
{{- range .Fields}}
	{{- if not .PrimaryKey}}
// {{.FieldName}}: m.{{.FieldName}},
	{{- end}}
{{- end}}

{{- else}}
package request

import (
	{{- if .HasTimer }}
	"time"
	{{- end }}
	{{- if .NeedJSON }}
	"gorm.io/datatypes"
	{{- end }}
	model "{{.Module}}/internal/data/model/{{.Package}}"
	"{{.Module}}/internal/service/types/common"
)

// {{.StructName}}Request {{.Description}}创建/更新请求
type {{.StructName}}Request struct {
	{{- if .GvaModel }}
	ID        uint   `json:"id"`                                    // 主键ID
	{{- else }}
	{{.PrimaryField.FieldName}} {{.PrimaryField.FieldType}} `json:"{{.PrimaryField.FieldJson}}"` // {{.PrimaryField.FieldDesc}}
	{{- end }}
	{{- range .Fields}}
	{{- if not .PrimaryKey}}
	{{.FieldName}} {{.FieldType}} `json:"{{.FieldJson}}"{{if .Require}} binding:"required"{{end}}` // {{.FieldDesc}}
	{{- end}}
	{{- end}}
	{{- if .AutoCreateResource }}
	CreatedBy uint `json:"createdBy"` // 创建者
	UpdatedBy uint `json:"updatedBy"` // 更新者
	{{- end }}
}

// To{{.StructName}} 将请求转换为{{.Description}}模型
// 用于 Service 层进行请求类型转换
func (r *{{.StructName}}Request) To{{.StructName}}() *model.{{.StructName}} {
	return &model.{{.StructName}}{
		{{- if .GvaModel }}
		KRA_MODEL: model.KRA_MODEL{ID: r.ID},
		{{- else }}
		{{.PrimaryField.FieldName}}: r.{{.PrimaryField.FieldName}},
		{{- end }}
		{{- range .Fields}}
		{{- if not .PrimaryKey}}
		{{.FieldName}}: r.{{.FieldName}},
		{{- end}}
		{{- end}}
		{{- if .AutoCreateResource }}
		CreatedBy: r.CreatedBy,
		UpdatedBy: r.UpdatedBy,
		{{- end }}
	}
}

// From{{.StructName}} 从{{.Description}}模型创建请求
// 用于编辑场景，将数据库模型转换为请求格式
func From{{.StructName}}(m *model.{{.StructName}}) *{{.StructName}}Request {
	if m == nil {
		return nil
	}
	return &{{.StructName}}Request{
		{{- if .GvaModel }}
		ID: m.ID,
		{{- else }}
		{{.PrimaryField.FieldName}}: m.{{.PrimaryField.FieldName}},
		{{- end }}
		{{- range .Fields}}
		{{- if not .PrimaryKey}}
		{{.FieldName}}: m.{{.FieldName}},
		{{- end}}
		{{- end}}
		{{- if .AutoCreateResource }}
		CreatedBy: m.CreatedBy,
		UpdatedBy: m.UpdatedBy,
		{{- end }}
	}
}

// {{.StructName}}IDRequest {{.Description}}ID请求
type {{.StructName}}IDRequest struct {
	{{- if .GvaModel }}
	ID int `json:"id" form:"id" binding:"required"` // 主键ID
	{{- else }}
	{{.PrimaryField.FieldName}} {{.PrimaryField.FieldType}} `json:"{{.PrimaryField.FieldJson}}" form:"{{.PrimaryField.FieldJson}}" binding:"required"` // {{.PrimaryField.FieldDesc}}
	{{- end }}
}

// Uint 转换为uint类型
// 用于与数据库操作兼容
func (r *{{.StructName}}IDRequest) Uint() uint {
	{{- if .GvaModel }}
	return uint(r.ID)
	{{- else }}
	return uint(r.{{.PrimaryField.FieldName}})
	{{- end }}
}

// {{.StructName}}IdsRequest {{.Description}}批量ID请求
type {{.StructName}}IdsRequest struct {
	{{- if .GvaModel }}
	Ids []int `json:"ids" form:"ids" binding:"required"` // 主键ID列表
	{{- else }}
	{{.PrimaryField.FieldName}}s []{{.PrimaryField.FieldType}} `json:"{{.PrimaryField.FieldJson}}s" form:"{{.PrimaryField.FieldJson}}s" binding:"required"` // {{.PrimaryField.FieldDesc}}列表
	{{- end }}
}

// Uints 转换为[]uint类型
// 用于与数据库批量操作兼容
func (r *{{.StructName}}IdsRequest) Uints() []uint {
	{{- if .GvaModel }}
	result := make([]uint, len(r.Ids))
	for i, id := range r.Ids {
		result[i] = uint(id)
	}
	return result
	{{- else }}
	result := make([]uint, len(r.{{.PrimaryField.FieldName}}s))
	for i, id := range r.{{.PrimaryField.FieldName}}s {
		result[i] = uint(id)
	}
	return result
	{{- end }}
}

// {{.StructName}}Search {{.Description}}搜索条件
// Deprecated: 请使用 {{.StructName}}ListRequest
type {{.StructName}}Search struct {
	common.PageInfo
	{{- if .GvaModel }}
	CreatedAtRange []time.Time `json:"createdAtRange" form:"createdAtRange[]"` // 创建时间范围
	{{- end }}
	{{- range .Fields}}
		{{- if .FieldSearchType}}
	{{ GenerateSearchField . }}
		{{- end}}
	{{- end}}
	{{- if .NeedSort}}
	Sort  string `json:"sort" form:"sort"`   // 排序字段
	Order string `json:"order" form:"order"` // 排序方式
	{{- end}}
}

// {{.StructName}}ListRequest {{.Description}}列表请求（含分页）
type {{.StructName}}ListRequest struct {
	common.PageInfo
	{{- if .GvaModel }}
	CreatedAtRange []time.Time `json:"createdAtRange" form:"createdAtRange[]"` // 创建时间范围
	{{- end }}
	{{- range .Fields}}
		{{- if .FieldSearchType}}
	{{ GenerateSearchField . }}
		{{- end}}
	{{- end}}
	{{- if .NeedSort}}
	Sort  string `json:"sort" form:"sort"`   // 排序字段
	Order string `json:"order" form:"order"` // 排序方式
	{{- end}}
}

// To{{.StructName}}Search 将列表请求转换为搜索条件
// 用于向后兼容
func (r *{{.StructName}}ListRequest) To{{.StructName}}Search() *{{.StructName}}Search {
	return &{{.StructName}}Search{
		PageInfo: r.PageInfo,
		{{- if .GvaModel }}
		CreatedAtRange: r.CreatedAtRange,
		{{- end }}
		{{- range .Fields}}
		{{- if .FieldSearchType}}
		{{.FieldName}}: r.{{.FieldName}},
		{{- end}}
		{{- end}}
		{{- if .NeedSort}}
		Sort:  r.Sort,
		Order: r.Order,
		{{- end}}
	}
}
{{- end }}
