Skip to content
Snippets Groups Projects
pndService.go 1.78 KiB
Newer Older
  • Learn to ignore specific revisions
  • 	"code.fbi.h-da.de/danet/gosdn/controller/interfaces/networkdomain"
    	"code.fbi.h-da.de/danet/gosdn/controller/store"
    	"github.com/google/uuid"
    )
    
    // PndService provides a PND service implementation.
    type PndService struct {
    	pndStore networkdomain.PndStore
    }
    
    // NewPndService creates a PND service.
    func NewPndService(pndStore networkdomain.PndStore) networkdomain.Service {
    	pndService := &PndService{
    		pndStore: pndStore,
    	}
    
    	return pndService
    }
    
    // Add adds a PND to the PND store.
    func (p *PndService) Add(pndToAdd networkdomain.NetworkDomain) error {
    
    	ctx := context.Background()
    	err := p.pndStore.Add(ctx, pndToAdd)
    
    	if err != nil {
    		return err
    	}
    
    	return nil
    }
    
    // Delete deletes a PND from the PND store.
    func (p *PndService) Delete(pndToDelete networkdomain.NetworkDomain) error {
    
    	ctx := context.Background()
    	err := p.pndStore.Delete(ctx, pndToDelete)
    
    	if err != nil {
    		return err
    	}
    
    	return nil
    }
    
    // Get takes a PND's UUID or name and returns the PND.
    func (p *PndService) Get(query store.Query) (networkdomain.NetworkDomain, error) {
    
    	ctx := context.Background()
    	loadedPnd, err := p.pndStore.Get(ctx, query)
    
    	if err != nil {
    		return nil, err
    	}
    
    	return p.createPndFromStore(loadedPnd), nil
    }
    
    // GetAll returns all stores PNDs.
    func (p *PndService) GetAll() ([]networkdomain.NetworkDomain, error) {
    	var pnds []networkdomain.NetworkDomain
    
    	ctx := context.Background()
    
    	loadedPnds, err := p.pndStore.GetAll(ctx)
    
    	if err != nil {
    		return nil, err
    	}
    
    	for _, loadedPnd := range loadedPnds {
    		pnds = append(pnds, p.createPndFromStore(loadedPnd))
    	}
    
    	return pnds, nil
    }
    
    func (p *PndService) createPndFromStore(loadedPnd networkdomain.LoadedPnd) networkdomain.NetworkDomain {
    	return NewPND(uuid.MustParse(loadedPnd.ID), loadedPnd.Name, loadedPnd.Description)
    }