Skip to content

Commit

Permalink
Present relationships in a generic manner
Browse files Browse the repository at this point in the history
Co-authored-by: Georgi Sabev <[email protected]>
  • Loading branch information
danail-branekov and georgethebeatle committed Sep 3, 2024
1 parent 7e6c7cd commit b3bafbe
Show file tree
Hide file tree
Showing 37 changed files with 276 additions and 223 deletions.
41 changes: 17 additions & 24 deletions api/presenter/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

const (
Expand All @@ -15,12 +16,12 @@ type AppResponse struct {
GUID string `json:"guid"`
State string `json:"state"`

CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Relationships Relationships `json:"relationships"`
Lifecycle Lifecycle `json:"lifecycle"`
Metadata Metadata `json:"metadata"`
Links AppLinks `json:"links"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Relationships map[string]model.ToOneRelationship `json:"relationships"`
Lifecycle Lifecycle `json:"lifecycle"`
Metadata Metadata `json:"metadata"`
Links AppLinks `json:"links"`
}

type AppLinks struct {
Expand All @@ -41,18 +42,12 @@ type AppLinks struct {

func ForApp(responseApp repositories.AppRecord, baseURL url.URL) AppResponse {
return AppResponse{
Name: responseApp.Name,
GUID: responseApp.GUID,
State: string(responseApp.State),
CreatedAt: formatTimestamp(&responseApp.CreatedAt),
UpdatedAt: formatTimestamp(responseApp.UpdatedAt),
Relationships: Relationships{
"space": Relationship{
Data: &RelationshipData{
GUID: responseApp.SpaceGUID,
},
},
},
Name: responseApp.Name,
GUID: responseApp.GUID,
State: string(responseApp.State),
CreatedAt: formatTimestamp(&responseApp.CreatedAt),
UpdatedAt: formatTimestamp(responseApp.UpdatedAt),
Relationships: ForRelationships(responseApp.Relationships()),
Lifecycle: Lifecycle{
Type: responseApp.Lifecycle.Type,
Data: LifecycleData{
Expand Down Expand Up @@ -111,8 +106,8 @@ func ForApp(responseApp repositories.AppRecord, baseURL url.URL) AppResponse {
}

type CurrentDropletResponse struct {
Relationship `json:",inline"`
Links CurrentDropletLinks `json:"links"`
Data RelationshipData `json:"data"`
Links CurrentDropletLinks `json:"links"`
}

type CurrentDropletLinks struct {
Expand All @@ -122,10 +117,8 @@ type CurrentDropletLinks struct {

func ForCurrentDroplet(record repositories.CurrentDropletRecord, baseURL url.URL) CurrentDropletResponse {
return CurrentDropletResponse{
Relationship: Relationship{
Data: &RelationshipData{
GUID: record.DropletGUID,
},
Data: RelationshipData{
GUID: record.DropletGUID,
},
Links: CurrentDropletLinks{
Self: Link{
Expand Down
39 changes: 17 additions & 22 deletions api/presenter/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

const (
Expand All @@ -12,20 +13,20 @@ const (
)

type BuildResponse struct {
GUID string `json:"guid"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
CreatedBy map[string]interface{} `json:"created_by"`
State string `json:"state"`
StagingMemoryMB int `json:"staging_memory_in_mb"`
StagingDiskMB int `json:"staging_disk_in_mb"`
Error *string `json:"error"`
Lifecycle Lifecycle `json:"lifecycle"`
Package RelationshipData `json:"package"`
Droplet *RelationshipData `json:"droplet"`
Relationships Relationships `json:"relationships"`
Metadata Metadata `json:"metadata"`
Links map[string]Link `json:"links"`
GUID string `json:"guid"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
CreatedBy map[string]interface{} `json:"created_by"`
State string `json:"state"`
StagingMemoryMB int `json:"staging_memory_in_mb"`
StagingDiskMB int `json:"staging_disk_in_mb"`
Error *string `json:"error"`
Lifecycle Lifecycle `json:"lifecycle"`
Package RelationshipData `json:"package"`
Droplet *RelationshipData `json:"droplet"`
Relationships map[string]model.ToOneRelationship `json:"relationships"`
Metadata Metadata `json:"metadata"`
Links map[string]Link `json:"links"`
}

func ForBuild(buildRecord repositories.BuildRecord, baseURL url.URL) BuildResponse {
Expand All @@ -47,14 +48,8 @@ func ForBuild(buildRecord repositories.BuildRecord, baseURL url.URL) BuildRespon
Package: RelationshipData{
GUID: buildRecord.PackageGUID,
},
Droplet: nil,
Relationships: Relationships{
"app": Relationship{
Data: &RelationshipData{
GUID: buildRecord.AppGUID,
},
},
},
Droplet: nil,
Relationships: ForRelationships(buildRecord.Relationships()),
Metadata: Metadata{
Labels: emptyMapIfNil(buildRecord.Labels),
Annotations: emptyMapIfNil(buildRecord.Annotations),
Expand Down
19 changes: 7 additions & 12 deletions api/presenter/deployment.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

const (
Expand All @@ -19,11 +20,11 @@ type DropletGUID struct {
Guid string `json:"guid"`
}
type DeploymentResponse struct {
GUID string `json:"guid"`
Status DeploymentStatus `json:"status"`
Droplet DropletGUID `json:"droplet"`
Relationships Relationships `json:"relationships"`
Links DeploymentLinks `json:"links"`
GUID string `json:"guid"`
Status DeploymentStatus `json:"status"`
Droplet DropletGUID `json:"droplet"`
Relationships map[string]model.ToOneRelationship `json:"relationships"`
Links DeploymentLinks `json:"links"`
}

type DeploymentLinks struct {
Expand All @@ -41,13 +42,7 @@ func ForDeployment(responseDeployment repositories.DeploymentRecord, baseURL url
Droplet: DropletGUID{
Guid: responseDeployment.DropletGUID,
},
Relationships: map[string]Relationship{
"app": {
Data: &RelationshipData{
GUID: responseDeployment.GUID,
},
},
},
Relationships: ForRelationships(responseDeployment.Relationships()),
Links: DeploymentLinks{
Self: Link{
HRef: buildURL(baseURL).appendPath(deploymentsBase, responseDeployment.GUID).build(),
Expand Down
39 changes: 17 additions & 22 deletions api/presenter/droplet.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,25 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

type DropletResponse struct {
GUID string `json:"guid"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
State string `json:"state"`
Error *string `json:"error"`
Lifecycle Lifecycle `json:"lifecycle"`
ExecutionMetadata string `json:"execution_metadata"`
Checksum *ChecksumData `json:"checksum"`
Buildpacks []BuildpackData `json:"buildpacks"`
ProcessTypes map[string]string `json:"process_types"`
Stack string `json:"stack"`
Image *string `json:"image"`
Relationships Relationships `json:"relationships"`
Metadata Metadata `json:"metadata"`
Links map[string]*Link `json:"links"`
GUID string `json:"guid"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
State string `json:"state"`
Error *string `json:"error"`
Lifecycle Lifecycle `json:"lifecycle"`
ExecutionMetadata string `json:"execution_metadata"`
Checksum *ChecksumData `json:"checksum"`
Buildpacks []BuildpackData `json:"buildpacks"`
ProcessTypes map[string]string `json:"process_types"`
Stack string `json:"stack"`
Image *string `json:"image"`
Relationships map[string]model.ToOneRelationship `json:"relationships"`
Metadata Metadata `json:"metadata"`
Links map[string]*Link `json:"links"`
}

type ChecksumData struct {
Expand Down Expand Up @@ -53,13 +54,7 @@ func ForDroplet(dropletRecord repositories.DropletRecord, baseURL url.URL) Dropl
Buildpacks: []BuildpackData{},
ProcessTypes: dropletRecord.ProcessTypes,
Stack: dropletRecord.Stack,
Relationships: Relationships{
"app": Relationship{
Data: &RelationshipData{
GUID: dropletRecord.AppGUID,
},
},
},
Relationships: ForRelationships(dropletRecord.Relationships()),
Metadata: Metadata{
Labels: emptyMapIfNil(dropletRecord.Labels),
Annotations: emptyMapIfNil(dropletRecord.Annotations),
Expand Down
14 changes: 7 additions & 7 deletions api/presenter/org.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

const (
Expand All @@ -15,12 +16,12 @@ type OrgResponse struct {
Name string `json:"name"`
GUID string `json:"guid"`

CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Suspended bool `json:"suspended"`
Relationships Relationships `json:"relationships"`
Metadata Metadata `json:"metadata"`
Links OrgLinks `json:"links"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Suspended bool `json:"suspended"`
Relationships map[string]model.ToOneRelationship `json:"relationships,omitempty"`
Metadata Metadata `json:"metadata"`
Links OrgLinks `json:"links"`
}

type OrgLinks struct {
Expand All @@ -41,7 +42,6 @@ func ForOrg(org repositories.OrgRecord, apiBaseURL url.URL) OrgResponse {
Labels: emptyMapIfNil(org.Labels),
Annotations: emptyMapIfNil(org.Annotations),
},
Relationships: Relationships{},
Links: OrgLinks{
Self: &Link{
HRef: buildURL(apiBaseURL).appendPath(orgsBase, org.GUID).build(),
Expand Down
1 change: 0 additions & 1 deletion api/presenter/org_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ var _ = Describe("Org", func() {
"annotation-key": "annotation-val"
}
},
"relationships": {},
"links": {
"self": {
"href": "https://api.example.org/v3/organizations/org-guid"
Expand Down
37 changes: 16 additions & 21 deletions api/presenter/package.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,23 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

const (
packagesBase = "/v3/packages"
)

type PackageResponse struct {
GUID string `json:"guid"`
Type string `json:"type"`
Data PackageData `json:"data"`
State string `json:"state"`
Relationships Relationships `json:"relationships"`
Links PackageLinks `json:"links"`
Metadata Metadata `json:"metadata"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
GUID string `json:"guid"`
Type string `json:"type"`
Data PackageData `json:"data"`
State string `json:"state"`
Relationships map[string]model.ToOneRelationship `json:"relationships"`
Links PackageLinks `json:"links"`
Metadata Metadata `json:"metadata"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}

type PackageData struct {
Expand All @@ -35,18 +36,12 @@ type PackageLinks struct {

func ForPackage(record repositories.PackageRecord, baseURL url.URL) PackageResponse {
return PackageResponse{
GUID: record.GUID,
Type: record.Type,
State: record.State,
CreatedAt: formatTimestamp(&record.CreatedAt),
UpdatedAt: formatTimestamp(record.UpdatedAt),
Relationships: Relationships{
"app": Relationship{
Data: &RelationshipData{
GUID: record.AppGUID,
},
},
},
GUID: record.GUID,
Type: record.Type,
State: record.State,
CreatedAt: formatTimestamp(&record.CreatedAt),
UpdatedAt: formatTimestamp(record.UpdatedAt),
Relationships: ForRelationships(record.Relationships()),
Links: PackageLinks{
Self: Link{
HRef: buildURL(baseURL).appendPath(packagesBase, record.GUID).build(),
Expand Down
33 changes: 14 additions & 19 deletions api/presenter/process.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,25 +6,26 @@ import (
"net/url"

"code.cloudfoundry.org/korifi/api/repositories"
"code.cloudfoundry.org/korifi/model"
)

const (
processesBase = "/v3/processes"
)

type ProcessResponse struct {
GUID string `json:"guid"`
Type string `json:"type"`
Command string `json:"command"`
Instances int `json:"instances"`
MemoryMB int64 `json:"memory_in_mb"`
DiskQuotaMB int64 `json:"disk_in_mb"`
HealthCheck ProcessResponseHealthCheck `json:"health_check"`
Relationships Relationships `json:"relationships"`
Metadata Metadata `json:"metadata"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Links ProcessLinks `json:"links"`
GUID string `json:"guid"`
Type string `json:"type"`
Command string `json:"command"`
Instances int `json:"instances"`
MemoryMB int64 `json:"memory_in_mb"`
DiskQuotaMB int64 `json:"disk_in_mb"`
HealthCheck ProcessResponseHealthCheck `json:"health_check"`
Relationships map[string]model.ToOneRelationship `json:"relationships"`
Metadata Metadata `json:"metadata"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
Links ProcessLinks `json:"links"`
}

type ProcessLinks struct {
Expand Down Expand Up @@ -113,13 +114,7 @@ func ForProcess(responseProcess repositories.ProcessRecord, baseURL url.URL) Pro
HTTPEndpoint: responseProcess.HealthCheck.Data.HTTPEndpoint,
},
},
Relationships: map[string]Relationship{
"app": {
Data: &RelationshipData{
GUID: responseProcess.AppGUID,
},
},
},
Relationships: ForRelationships(responseProcess.Relationships()),
Metadata: Metadata{
Labels: responseProcess.Labels,
Annotations: responseProcess.Annotations,
Expand Down
Loading

0 comments on commit b3bafbe

Please sign in to comment.