initial commit

This commit is contained in:
Mike Mason
2023-07-01 00:04:52 +00:00
commit 80fb879ef6
65 changed files with 3544 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
package service
import (
"go.infratographer.com/x/gidx"
"go.equinixmetal.net/infra9-metal-bridge/internal/metal/models"
)
const (
RelateOwner RelationshipType = "owner"
RelateParent RelationshipType = "parent"
)
type RelationshipType string
type IDPrefixableResource interface {
PrefixedID() gidx.PrefixedID
}
type Relationships struct {
Relationships []Relationship
Memberships []ResourceMemberships
}
func (r Relationships) DeDupe() Relationships {
rels := make(map[string]bool)
mems := make(map[string]bool)
var results Relationships
for _, rel := range r.Relationships {
key := rel.Resource.PrefixedID().String() + "/" + string(rel.Relation) + "/" + rel.RelatedResource.PrefixedID().String()
if _, ok := rels[key]; !ok {
rels[key] = true
results.Relationships = append(results.Relationships, rel)
}
}
for _, member := range r.Memberships {
key := member.Resource.PrefixedID().String() + "/" + member.Role + "/" + member.Member.PrefixedID().String()
if _, ok := mems[key]; !ok {
mems[key] = true
results.Memberships = append(results.Memberships, member)
}
}
return results
}
type Relationship struct {
Resource IDPrefixableResource
Relation RelationshipType
RelatedResource IDPrefixableResource
}
type ResourceMemberships struct {
Resource IDPrefixableResource
Role string
Member *models.UserDetails
}