Files
bridge/internal/metal/providers/emgql/mapping.go
Adam Mohammed ae8f4f4269 graphql testin'
2023-07-27 09:37:38 -04:00

86 lines
1.9 KiB
Go

package emgql
import "go.equinixmetal.net/infra9-metal-bridge/internal/metal/models"
type organization struct {
ID string `json:"id"`
Name string `json:"name"`
Projects []project `json:"projects"`
Users []user `json:"users"`
}
func (o organization) ToOrganizationDetails() models.OrganizationDetails {
orgDetails := models.OrganizationDetails{
ID: o.ID,
Name: o.Name,
}
memberships := []*models.Membership[models.OrganizationDetails]{}
for _, u := range o.Users {
m := u.ToOrganizationMembership()
memberships = append(memberships, &m)
}
pDetails := []*models.ProjectDetails{}
for _, p := range o.Projects {
details := p.ToProjectDetails()
details.Organization = &orgDetails
pDetails = append(pDetails, &details)
}
orgDetails.Memberships = memberships
orgDetails.Projects = pDetails
return orgDetails
}
type project struct {
ID string `json:"id"`
Name string `json:"name"`
Users []user `json:"users"`
Organization struct {
ID string `json:"id"`
} `json:"organization"`
}
func (p project) ToProjectDetails() models.ProjectDetails {
memberships := []*models.Membership[models.ProjectDetails]{}
for _, u := range p.Users {
m := u.ToProjectMembership()
memberships = append(memberships, &m)
}
return models.ProjectDetails{
ID: p.ID,
Name: p.Name,
Memberships: memberships,
Organization: &models.OrganizationDetails{
ID: p.Organization.ID,
},
}
}
type user struct {
ID string `json:"id"`
Roles []string `json:"roles"`
}
func (u user) ToOrganizationMembership() models.Membership[models.OrganizationDetails] {
return models.Membership[models.OrganizationDetails]{
User: &models.UserDetails{
ID: u.ID,
},
Roles: u.Roles,
}
}
func (u user) ToProjectMembership() models.Membership[models.ProjectDetails] {
return models.Membership[models.ProjectDetails]{
User: &models.UserDetails{
ID: u.ID,
},
Roles: u.Roles,
}
}