graphql testin'
This commit is contained in:
85
internal/metal/providers/emgql/mapping.go
Normal file
85
internal/metal/providers/emgql/mapping.go
Normal file
@@ -0,0 +1,85 @@
|
||||
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,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user