// 数据操作底层模型
// 秒寻科技
// zt 2024-01-04

package mysqlmodel

import (
	"time"
)

// BaseModel 数据库模型的基础结构体（用于返回响应数据时的简单模型）
type BaseModel struct {
	ID      int `json:"id"` //记录ID
	OwnerID int `json:"owner_id,omitempty"`
}

// BaseModelDB 数据库模型的基础结构体
type BaseModelDB struct {
	CompanyID int       `json:"company_id" gorm:"size:32;index"` //公司ID
	ProjectID int       `json:"project_id" gorm:"default:0"`     //项目ID（项目编号由由后台维护，前端可读不可写）
	ID        int       `json:"id" gorm:"primary_key"`           //记录的ID
	CreatedAt time.Time `json:"created_at,omitempty"`            //记录的创建时间
	UpdatedAt time.Time `json:"updated_at"`                      //记录的更新时间
	Status    uint8     `json:"status" gorm:"default:1"`         //记录的状态
	IsActive  uint8     `json:"is_active" gorm:"default:1"`      //是否是有效记录，0：无效数据（已删除的数据标记为无效数据） 1：有效数据
	OwnerID   int       `json:"owner_id"`                        //记录的所属者
	SourceID  int8      `json:"source_id" gorm:"-"`              //数据来源，1：管理端，2：移动端，3：GUI网管
}

// query参数
type QueryParam struct {
	Key  string      `json:"key"`
	Opt  string      `json:"opt"`
	Data interface{} `json:"data"`
}

// 查询参数
type ListParam struct {
	CompanyID int                    `json:"company_id"` //公司ID
	ProjectID int                    `json:"project_id"` //项目ID（项目编号由由后台维护，前端可读不可写）
	OwnerID   int                    `json:"user_id"`    //用户ID
	Search    map[string]interface{} `json:"search"`
	Query     []QueryParam           `json:"query"`
	OrderBy   string                 `json:"order_by"` //排序
}

// 查询分页参数
type PageListParam struct {
	CompanyID int `json:"company_id" form:"company_id"` //公司ID
	//ProjectID string                 `json:"project_id"`                   //项目ID（项目编号由由后台维护，前端可读不可写）
	ProjectID int                    `json:"project_id"`                 //项目ID（项目编号由由后台维护，前端可读不可写）
	OwnerID   int                    `json:"user_id" form:"user_id"`     //用户ID
	PageNum   int                    `json:"page_num" form:"page_num"`   //页码
	PageSize  int                    `json:"page_size" form:"page_size"` //每页记录数
	Search    map[string]interface{} `json:"search" form:"search"`
	Query     []QueryParam           `json:"query" form:"query"`
	OrderBy   string                 `json:"order_by" form:"order_by"` //获得分页数据时的SQL排序字段，默认为id
}

// PageListData 分页列表数据结构
type PageListData struct {
	PageNum    int         `json:"page_num"`    //分页数据的页码
	PageSize   int         `json:"page_size"`   //每页的记录条数
	TotalCount int         `json:"total_count"` //数据总条数
	Items      interface{} `json:"items"`       //当前页的列表数据
}
