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 }