Skip to content
Snippets Groups Projects
nodeService.go 1.54 KiB
Newer Older
  • Learn to ignore specific revisions
  • package nodes
    
    import (
    
    	"code.fbi.h-da.de/danet/gosdn/controller/topology/store"
    
    	"github.com/google/uuid"
    )
    
    // Service defines a interface for a NodeService
    type Service interface {
    	EnsureExists(Node) (Node, error)
    	Update(Node) error
    	Delete(Node) error
    	Get(store.Query) (Node, error)
    	GetAll() ([]Node, error)
    }
    
    // NodeService is a NodeService
    type NodeService struct {
    	store Store
    }
    
    // NewNodeService creates a NodeService
    func NewNodeService(store Store) Service {
    	return &NodeService{
    		store: store,
    	}
    }
    
    // EnsureExists either creates a new node or returns an already existing node
    func (p *NodeService) EnsureExists(node Node) (Node, error) {
    	if node.ID == uuid.Nil {
    		node.ID = uuid.New()
    		err := p.store.Add(node)
    		if err != nil {
    			return node, err
    		}
    
    		return node, nil
    	}
    
    	node, err := p.Get(store.Query{ID: node.ID})
    	if err != nil {
    		return node, err
    	}
    
    	return node, nil
    }
    
    // Update updates an existing node
    func (p *NodeService) Update(node Node) error {
    	err := p.store.Update(node)
    	if err != nil {
    		return err
    	}
    
    	return nil
    }
    
    // Delete deletes a node
    func (p *NodeService) Delete(node Node) error {
    	err := p.store.Delete(node)
    	if err != nil {
    		return err
    	}
    
    	return nil
    }
    
    // Get gets a node
    func (p *NodeService) Get(query store.Query) (Node, error) {
    	node, err := p.store.Get(query)
    	if err != nil {
    		return node, err
    	}
    
    	return node, nil
    }
    
    // GetAll gets all existing nodes
    func (p *NodeService) GetAll() ([]Node, error) {
    	nodes, err := p.store.GetAll()
    	if err != nil {
    		return nodes, err
    	}
    	return nodes, nil
    }