// 自动生成模板SysOperationRecord
package dao

import (
	"time"

	"server/global"
)

// 如果含有time.Time 请自行import time包
type SysOperationRecord struct {
	global.GVA_MODEL
	Ip           string        `json:"ip" form:"ip" gorm:"column:ip;comment:请求ip"`                                   // 请求ip
	Method       string        `json:"method" form:"method" gorm:"column:method;comment:请求方法"`                       // 请求方法
	Path         string        `json:"path" form:"path" gorm:"column:path;comment:请求路径"`                             // 请求路径
	Status       int           `json:"status" form:"status" gorm:"column:status;comment:请求状态"`                       // 请求状态
	Latency      time.Duration `json:"latency" form:"latency" gorm:"column:latency;comment:延迟" swaggertype:"string"` // 延迟
	Agent        string        `json:"agent" form:"agent" gorm:"type:text;column:agent;comment:代理"`                  // 代理
	ErrorMessage string        `json:"error_message" form:"error_message" gorm:"column:error_message;comment:错误信息"`  // 错误信息
	Body         string        `json:"body" form:"body" gorm:"type:text;column:body;comment:请求Body"`                 // 请求Body
	Resp         string        `json:"resp" form:"resp" gorm:"type:text;column:resp;comment:响应Body"`                 // 响应Body
	UserID       int           `json:"user_id" form:"user_id" gorm:"column:user_id;comment:用户id"`                    // 用户id
	User         SysUser       `json:"user"`
}

// TODO:操作查询

// GetSysOperationRecord 根据id获取单条操作记录
func GetSysOperationRecord(id uint) (sysOperationRecord SysOperationRecord, err error) {
	err = global.GVA_DB.Where("id = ?", id).First(&sysOperationRecord).Error
	return
}

// GetSysOperationRecordInfoList 分页获取操作记录列表
func (sor SysOperationRecord) GetSysOperationRecordInfoList(limit, offset int) (sysOperationRecords []SysOperationRecord, total int64, err error) {
	// 创建db
	db := global.GVA_DB.Model(&SysOperationRecord{})
	// 如果有条件搜索 下方会自动创建搜索语句
	if sor.Method != "" {
		db = db.Where("method = ?", sor.Method)
	}
	if sor.Path != "" {
		db = db.Where("path LIKE ?", "%"+sor.Path+"%")
	}
	if sor.Status != 0 {
		db = db.Where("status = ?", sor.Status)
	}
	err = db.Count(&total).Error
	if err != nil {
		return
	}
	err = db.Order("id desc").Limit(limit).Offset(offset).Preload("User").Find(&sysOperationRecords).Error
	return sysOperationRecords, total, err
}

// TODO:操作新增

func (sor SysOperationRecord) CreateSysOperationRecord() error {
	return global.GVA_DB.Create(&sor).Error
}

// TODO:操作修改

// TODO:操作删除

// DeleteSysOperationRecordByIds 删除操作记录按id
func DeleteSysOperationRecordByIds(ids []int) (err error) {
	err = global.GVA_DB.Delete(&[]SysOperationRecord{}, "id in (?)", ids).Error
	return err
}

// DeleteSysOperationRecord 删除操作记录
func (sor SysOperationRecord) DeleteSysOperationRecord() (err error) {
	err = global.GVA_DB.Delete(&sor).Error
	return err
}
