Files

76 lines
1.8 KiB
Go

package repository
import (
"time"
"zeromesh/internal/database"
"zeromesh/internal/model"
)
type NodeRepo struct {
db *database.DB
}
func NewNodeRepo(db *database.DB) *NodeRepo {
return &NodeRepo{db: db}
}
func (r *NodeRepo) Create(node *model.Node) error {
return r.db.Create(node).Error
}
func (r *NodeRepo) FindByNodeID(nodeID string) (*model.Node, error) {
var node model.Node
err := r.db.Where("node_id = ?", nodeID).First(&node).Error
if err != nil {
return nil, err
}
return &node, nil
}
func (r *NodeRepo) Upsert(node *model.Node) error {
var existing model.Node
result := r.db.Where("node_id = ?", node.NodeID).First(&existing)
if result.Error != nil {
return r.db.Create(node).Error
}
existing.PublicKey = node.PublicKey
existing.Name = node.Name
existing.IPAddress = node.IPAddress
existing.Port = node.Port
existing.Version = node.Version
return r.db.Save(&existing).Error
}
func (r *NodeRepo) SetOnline(nodeID string, online bool) error {
now := time.Now()
return r.db.Model(&model.Node{}).Where("node_id = ?", nodeID).Updates(map[string]interface{}{
"online": online,
"last_seen": now,
}).Error
}
func (r *NodeRepo) List() ([]model.Node, error) {
var nodes []model.Node
err := r.db.Order("id desc").Find(&nodes).Error
return nodes, err
}
func (r *NodeRepo) ListByUser(userID uint) ([]model.Node, error) {
var nodes []model.Node
err := r.db.Where("user_id = ?", userID).Order("id desc").Find(&nodes).Error
return nodes, err
}
func (r *NodeRepo) CountByUser(userID uint) (int64, error) {
var count int64
err := r.db.Model(&model.Node{}).Where("user_id = ?", userID).Count(&count).Error
return count, err
}
func (r *NodeRepo) ListOnline() ([]model.Node, error) {
var nodes []model.Node
err := r.db.Where("online = ?", true).Find(&nodes).Error
return nodes, err
}