generated from broadinstitute/golang-project-template
-
Notifications
You must be signed in to change notification settings - Fork 0
/
allocation_pools.go
63 lines (50 loc) · 2.6 KB
/
allocation_pools.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package v1controllers
// allocation_pools.go defines pools of environments, where environments can be
// checked out as being in-use or released back into the pool
import (
"errors"
"github.com/broadinstitute/sherlock/internal/models/v1models"
"gorm.io/gorm"
)
// AllocationPoolController is the management layer for AllocationPools
type AllocationPoolController struct {
store v1models.AllocationPoolStore
}
// NewAllocationPoolController accepts a gorm DB connection and returns a new instance
// of the allocationPool controller
func NewAllocationPoolController(dbConn *gorm.DB) *AllocationPoolController {
allocationPoolStore := v1models.NewAllocationPoolStore(dbConn)
return &AllocationPoolController{
store: allocationPoolStore,
}
}
// DoesAllocationPoolExist is a helper method to check if a allocationPool with the given name
// already exists in sherlock's data storage
func (allocationPoolController AllocationPoolController) DoesAllocationPoolExist(name string) (int, bool) {
allocationPool, err := allocationPoolController.GetByName(name)
if errors.Is(err, v1models.ErrAllocationPoolNotFound) {
return 0, false
}
return allocationPool.ID, true
}
// CreateNew is the public api on the allocationPoolController for persisting a new service entity to
// the data store
func (allocationPoolController *AllocationPoolController) CreateNew(newAllocationPool v1models.CreateAllocationPoolRequest) (v1models.AllocationPool, error) {
return allocationPoolController.store.CreateNew(newAllocationPool)
}
// ListAll is the public api for listing out all AllocationPools tracked by sherlock
func (allocationPoolController *AllocationPoolController) ListAll() ([]v1models.AllocationPool, error) {
return allocationPoolController.store.ListAll()
}
// GetByName is the public API for looking up a allocationPool from the data store by name
func (allocationPoolController *AllocationPoolController) GetByName(name string) (v1models.AllocationPool, error) {
return allocationPoolController.store.GetByName(name)
}
// GetByID is the public API for looking up a allocationPool from the data store by name
func (allocationPoolController *AllocationPoolController) GetByID(id int) (v1models.AllocationPool, error) {
return allocationPoolController.store.GetByID(id)
}
// AddEnvironmentByID takes a AllocationPoolObject and associates an existing environment to it.
func (allocationPoolController *AllocationPoolController) AddEnvironmentByID(currentAllocationPool v1models.AllocationPool, environmentID int) (v1models.AllocationPool, error) {
return allocationPoolController.store.AddEnvironmentByID(currentAllocationPool, environmentID)
}