103 lines
3.0 KiB
Go
103 lines
3.0 KiB
Go
package dao
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"github.com/sirupsen/logrus"
|
|
"gorm.io/gorm"
|
|
"hy2xs-admin/model/constant"
|
|
"hy2xs-admin/model/dto"
|
|
"hy2xs-admin/model/entity"
|
|
"time"
|
|
)
|
|
|
|
func SavePeer(peer entity.Peer) (int64, error) {
|
|
if tx := sqliteDB.Save(&peer); tx.Error != nil {
|
|
logrus.Errorf("%v", tx.Error)
|
|
return 0, errors.New(constant.SysError)
|
|
}
|
|
return *peer.Id, nil
|
|
}
|
|
|
|
func DeletePeer(ids []int64) error {
|
|
if tx := sqliteDB.Where("id in ?", ids).Delete(&entity.Peer{}); tx.Error != nil {
|
|
logrus.Errorf("%v", tx.Error)
|
|
return errors.New(constant.SysError)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func UpdatePeer(ids []int64, updates map[string]interface{}) error {
|
|
if len(updates) == 0 {
|
|
return nil
|
|
}
|
|
updates["update_time"] = time.Now().Format("2006-01-02 15:04:05")
|
|
if tx := sqliteDB.Model(&entity.Peer{}).Where("id in ?", ids).Updates(updates); tx.Error != nil {
|
|
logrus.Errorf("%v", tx.Error)
|
|
return errors.New(constant.SysError)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func GetPeer(query interface{}, args ...interface{}) (entity.Peer, error) {
|
|
var peer entity.Peer
|
|
if tx := sqliteDB.Model(&entity.Peer{}).Where(query, args...).First(&peer); tx.Error != nil {
|
|
if tx.Error == gorm.ErrRecordNotFound {
|
|
return peer, errors.New(constant.WrongPassword)
|
|
}
|
|
logrus.Errorf("%v", tx.Error)
|
|
return peer, errors.New(constant.SysError)
|
|
}
|
|
return peer, nil
|
|
}
|
|
|
|
func ListPeer(query interface{}, args ...interface{}) ([]entity.Peer, error) {
|
|
var peers []entity.Peer
|
|
if tx := sqliteDB.Model(&entity.Peer{}).Where(query, args...).Order("create_time desc").Find(&peers); tx.Error != nil {
|
|
logrus.Errorf("%v", tx.Error)
|
|
return peers, errors.New(constant.SysError)
|
|
}
|
|
return peers, nil
|
|
}
|
|
|
|
func PagePeer(peerPageDto dto.PeerPageDto) ([]entity.Peer, int64, error) {
|
|
var peers []entity.Peer
|
|
var total int64
|
|
tx := sqliteDB.Model(&entity.Peer{})
|
|
if peerPageDto.Username != nil && *peerPageDto.Username != "" {
|
|
tx.Where("name like ?", fmt.Sprintf("%%%s%%", *peerPageDto.Username))
|
|
}
|
|
if peerPageDto.Deleted != nil {
|
|
tx.Where("disabled = ?", *peerPageDto.Deleted)
|
|
}
|
|
if peerPageDto.Remark != nil && *peerPageDto.Remark != "" {
|
|
tx.Where("remark like ?", fmt.Sprintf("%%%s%%", *peerPageDto.Remark))
|
|
}
|
|
tx.Count(&total)
|
|
if tx.Scopes(Paginate(peerPageDto.PageNum, peerPageDto.PageSize)).Order("create_time desc").Find(&peers); tx.Error != nil {
|
|
logrus.Errorf("%v", tx.Error)
|
|
return peers, 0, errors.New(constant.SysError)
|
|
}
|
|
return peers, total, nil
|
|
}
|
|
|
|
func UpdatePeerTraffic(name string, download int64, upload int64) error {
|
|
if upload == 0 && download == 0 {
|
|
return nil
|
|
}
|
|
updates := map[string]interface{}{}
|
|
if download != 0 {
|
|
updates["download_bytes"] = gorm.Expr("download_bytes + ?", download)
|
|
}
|
|
if upload != 0 {
|
|
updates["upload_bytes"] = gorm.Expr("upload_bytes + ?", upload)
|
|
}
|
|
updates["update_time"] = time.Now().Format("2006-01-02 15:04:05")
|
|
if tx := sqliteDB.Model(&entity.Peer{}).Where("name = ?", name).Updates(updates); tx.Error != nil {
|
|
logrus.Errorf("%v", tx.Error)
|
|
return errors.New(constant.SysError)
|
|
}
|
|
return nil
|
|
}
|
|
|