Skip to content

Commit 264ca9e

Browse files
committed
feat: add workspaceId to Environment schema and update related components
1 parent e26cf19 commit 264ca9e

34 files changed

+1461
-819
lines changed

apps/workspace-engine/oapi/openapi.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,13 +538,17 @@
538538
},
539539
"resourceSelector": {
540540
"$ref": "#/components/schemas/Selector"
541+
},
542+
"workspaceId": {
543+
"type": "string"
541544
}
542545
},
543546
"required": [
544547
"id",
545548
"name",
546549
"createdAt",
547-
"metadata"
550+
"metadata",
551+
"workspaceId"
548552
],
549553
"type": "object"
550554
},

apps/workspace-engine/oapi/spec/schemas/environments.jsonnet

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,15 @@ local openapi = import '../lib/openapi.libsonnet';
33
{
44
Environment: {
55
type: 'object',
6-
required: ['id', 'name', 'createdAt', 'metadata'],
6+
required: ['id', 'name', 'createdAt', 'metadata', 'workspaceId'],
77
properties: {
88
id: { type: 'string' },
99
name: { type: 'string' },
1010
description: { type: 'string' },
1111
resourceSelector: openapi.schemaRef('Selector'),
1212
createdAt: { type: 'string', format: 'date-time' },
1313
metadata: { type: 'object', additionalProperties: { type: 'string' } },
14+
workspaceId: { type: 'string' },
1415
},
1516
},
1617

apps/workspace-engine/svc/controllers/desiredrelease/convert/convert.go renamed to apps/workspace-engine/pkg/db/convert.go

Lines changed: 98 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
1-
package convert
1+
package db
22

33
import (
44
"encoding/json"
55

6-
"workspace-engine/pkg/db"
76
"workspace-engine/pkg/oapi"
87

98
"github.com/google/uuid"
109
)
1110

12-
func Deployment(row db.Deployment) *oapi.Deployment {
11+
func ToOapiDeployment(row Deployment) *oapi.Deployment {
1312
d := &oapi.Deployment{
1413
Id: row.ID.String(),
1514
Name: row.Name,
@@ -26,7 +25,7 @@ func Deployment(row db.Deployment) *oapi.Deployment {
2625
return d
2726
}
2827

29-
func Environment(row db.Environment) *oapi.Environment {
28+
func ToOapiEnvironment(row Environment) *oapi.Environment {
3029
e := &oapi.Environment{
3130
Id: row.ID.String(),
3231
Name: row.Name,
@@ -41,7 +40,7 @@ func Environment(row db.Environment) *oapi.Environment {
4140
return e
4241
}
4342

44-
func Resource(row db.GetResourceByIDRow) *oapi.Resource {
43+
func ToOapiResource(row GetResourceByIDRow) *oapi.Resource {
4544
r := &oapi.Resource{
4645
Id: row.ID.String(),
4746
Name: row.Name,
@@ -70,7 +69,7 @@ func Resource(row db.GetResourceByIDRow) *oapi.Resource {
7069
return r
7170
}
7271

73-
func Policy(row db.Policy) *oapi.Policy {
72+
func ToOapiPolicy(row Policy) *oapi.Policy {
7473
p := &oapi.Policy{
7574
Id: row.ID.String(),
7675
Name: row.Name,
@@ -89,7 +88,7 @@ func Policy(row db.Policy) *oapi.Policy {
8988
return p
9089
}
9190

92-
func UserApprovalRecord(row db.UserApprovalRecord) *oapi.UserApprovalRecord {
91+
func ToOapiUserApprovalRecord(row UserApprovalRecord) *oapi.UserApprovalRecord {
9392
r := &oapi.UserApprovalRecord{
9493
VersionId: row.VersionID.String(),
9594
UserId: row.UserID.String(),
@@ -105,7 +104,7 @@ func UserApprovalRecord(row db.UserApprovalRecord) *oapi.UserApprovalRecord {
105104
return r
106105
}
107106

108-
func PolicySkip(row db.PolicySkip) *oapi.PolicySkip {
107+
func ToOapiPolicySkip(row PolicySkip) *oapi.PolicySkip {
109108
s := &oapi.PolicySkip{
110109
Id: row.ID.String(),
111110
CreatedBy: row.CreatedBy,
@@ -131,7 +130,7 @@ func PolicySkip(row db.PolicySkip) *oapi.PolicySkip {
131130
return s
132131
}
133132

134-
func DeploymentVariable(row db.DeploymentVariable) oapi.DeploymentVariable {
133+
func ToOapiDeploymentVariable(row DeploymentVariable) oapi.DeploymentVariable {
135134
v := oapi.DeploymentVariable{
136135
Id: row.ID.String(),
137136
DeploymentId: row.DeploymentID.String(),
@@ -149,7 +148,7 @@ func DeploymentVariable(row db.DeploymentVariable) oapi.DeploymentVariable {
149148
return v
150149
}
151150

152-
func DeploymentVariableValue(row db.DeploymentVariableValue) oapi.DeploymentVariableValue {
151+
func ToOapiDeploymentVariableValue(row DeploymentVariableValue) oapi.DeploymentVariableValue {
153152
v := oapi.DeploymentVariableValue{
154153
Id: row.ID.String(),
155154
DeploymentVariableId: row.DeploymentVariableID.String(),
@@ -167,7 +166,7 @@ func DeploymentVariableValue(row db.DeploymentVariableValue) oapi.DeploymentVari
167166
return v
168167
}
169168

170-
func ResourceVariable(row db.ResourceVariable) oapi.ResourceVariable {
169+
func ToOapiResourceVariable(row ResourceVariable) oapi.ResourceVariable {
171170
v := oapi.ResourceVariable{
172171
ResourceId: row.ResourceID.String(),
173172
Key: row.Key,
@@ -178,7 +177,37 @@ func ResourceVariable(row db.ResourceVariable) oapi.ResourceVariable {
178177
return v
179178
}
180179

181-
func DeploymentVersion(row db.DeploymentVersion) *oapi.DeploymentVersion {
180+
func ToOapiSystem(row System) *oapi.System {
181+
s := &oapi.System{
182+
Id: row.ID.String(),
183+
Name: row.Name,
184+
WorkspaceId: row.WorkspaceID.String(),
185+
}
186+
if row.Description != "" {
187+
s.Description = &row.Description
188+
}
189+
return s
190+
}
191+
192+
func ToOapiRelease(row Release) *oapi.Release {
193+
var createdAt string
194+
if row.CreatedAt.Valid {
195+
createdAt = row.CreatedAt.Time.Format("2006-01-02T15:04:05Z07:00")
196+
}
197+
return &oapi.Release{
198+
Id: row.ID,
199+
CreatedAt: createdAt,
200+
ReleaseTarget: oapi.ReleaseTarget{
201+
ResourceId: row.ResourceID.String(),
202+
EnvironmentId: row.EnvironmentID.String(),
203+
DeploymentId: row.DeploymentID.String(),
204+
},
205+
EncryptedVariables: []string{},
206+
Variables: map[string]oapi.LiteralValue{},
207+
}
208+
}
209+
210+
func ToOapiDeploymentVersion(row DeploymentVersion) *oapi.DeploymentVersion {
182211
v := &oapi.DeploymentVersion{
183212
Id: row.ID.String(),
184213
Name: row.Name,
@@ -197,3 +226,60 @@ func DeploymentVersion(row db.DeploymentVersion) *oapi.DeploymentVersion {
197226
}
198227
return v
199228
}
229+
230+
func ToOapiJob(row ListJobsByReleaseIDRow) *oapi.Job {
231+
j := &oapi.Job{
232+
Id: row.ID.String(),
233+
Status: oapi.JobStatus(row.Status),
234+
ReleaseId: row.ReleaseID.String(),
235+
}
236+
if row.CreatedAt.Valid {
237+
j.CreatedAt = row.CreatedAt.Time
238+
}
239+
if row.CompletedAt.Valid {
240+
t := row.CompletedAt.Time
241+
j.CompletedAt = &t
242+
}
243+
if row.StartedAt.Valid {
244+
t := row.StartedAt.Time
245+
j.StartedAt = &t
246+
}
247+
if row.UpdatedAt.Valid {
248+
j.UpdatedAt = row.UpdatedAt.Time
249+
}
250+
if row.ExternalID.Valid {
251+
j.ExternalId = &row.ExternalID.String
252+
}
253+
if row.Message.Valid {
254+
j.Message = &row.Message.String
255+
}
256+
if row.JobAgentID.Valid {
257+
j.JobAgentId = uuid.UUID(row.JobAgentID.Bytes).String()
258+
}
259+
if len(row.JobAgentConfig) > 0 {
260+
var cfg oapi.JobAgentConfig
261+
if err := json.Unmarshal(row.JobAgentConfig, &cfg); err == nil {
262+
j.JobAgentConfig = cfg
263+
}
264+
}
265+
j.Metadata = parseJobMetadata(row.Metadata)
266+
return j
267+
}
268+
269+
func parseJobMetadata(raw []byte) map[string]string {
270+
if len(raw) == 0 {
271+
return map[string]string{}
272+
}
273+
var items []struct {
274+
Key string `json:"key"`
275+
Value string `json:"value"`
276+
}
277+
if err := json.Unmarshal(raw, &items); err != nil {
278+
return map[string]string{}
279+
}
280+
result := make(map[string]string, len(items))
281+
for _, item := range items {
282+
result[item.Key] = item.Value
283+
}
284+
return result
285+
}

apps/workspace-engine/pkg/oapi/oapi.gen.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package store
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"workspace-engine/pkg/db"
7+
"workspace-engine/pkg/oapi"
8+
legacystore "workspace-engine/pkg/workspace/store"
9+
10+
"github.com/google/uuid"
11+
)
12+
13+
type DeploymentGetter interface {
14+
GetDeployment(ctx context.Context, deploymentID string) (*oapi.Deployment, error)
15+
}
16+
17+
var _ DeploymentGetter = (*PostgresDeploymentGetter)(nil)
18+
19+
type PostgresDeploymentGetter struct {
20+
queries *db.Queries
21+
}
22+
23+
func NewPostgresDeploymentGetter(queries *db.Queries) *PostgresDeploymentGetter {
24+
return &PostgresDeploymentGetter{queries: queries}
25+
}
26+
27+
func (g *PostgresDeploymentGetter) GetDeployment(ctx context.Context, deploymentID string) (*oapi.Deployment, error) {
28+
deployment, err := g.queries.GetDeploymentByID(ctx, uuid.MustParse(deploymentID))
29+
if err != nil {
30+
return nil, err
31+
}
32+
return db.ToOapiDeployment(deployment), nil
33+
}
34+
35+
type StoreDeploymentGetter struct {
36+
store *legacystore.Store
37+
}
38+
39+
func NewStoreDeploymentGetter(store *legacystore.Store) *StoreDeploymentGetter {
40+
return &StoreDeploymentGetter{store: store}
41+
}
42+
43+
func (s *StoreDeploymentGetter) GetDeployment(ctx context.Context, deploymentID string) (*oapi.Deployment, error) {
44+
deployment, ok := s.store.Deployments.Get(deploymentID)
45+
if !ok {
46+
return nil, fmt.Errorf("deployment not found")
47+
}
48+
return deployment, nil
49+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package store
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"workspace-engine/pkg/db"
7+
"workspace-engine/pkg/oapi"
8+
legacystore "workspace-engine/pkg/workspace/store"
9+
10+
"github.com/google/uuid"
11+
)
12+
13+
type EnvironmentGetter interface {
14+
GetEnvironment(ctx context.Context, environmentID string) (*oapi.Environment, error)
15+
GetAllEnvironments(ctx context.Context, workspaceID string) (map[string]*oapi.Environment, error)
16+
}
17+
18+
var _ EnvironmentGetter = (*PostgresEnvironmentGetter)(nil)
19+
20+
type PostgresEnvironmentGetter struct {
21+
queries *db.Queries
22+
}
23+
24+
func NewPostgresEnvironmentGetter(queries *db.Queries) *PostgresEnvironmentGetter {
25+
return &PostgresEnvironmentGetter{queries: queries}
26+
}
27+
28+
func (g *PostgresEnvironmentGetter) GetEnvironment(ctx context.Context, environmentID string) (*oapi.Environment, error) {
29+
env, err := g.queries.GetEnvironmentByID(ctx, uuid.MustParse(environmentID))
30+
if err != nil {
31+
return nil, err
32+
}
33+
return db.ToOapiEnvironment(env), nil
34+
}
35+
36+
func (g *PostgresEnvironmentGetter) GetAllEnvironments(ctx context.Context, workspaceID string) (map[string]*oapi.Environment, error) {
37+
envs, err := g.queries.ListEnvironmentsByWorkspaceID(ctx, db.ListEnvironmentsByWorkspaceIDParams{
38+
WorkspaceID: uuid.MustParse(workspaceID),
39+
})
40+
if err != nil {
41+
return nil, err
42+
}
43+
result := make(map[string]*oapi.Environment, len(envs))
44+
for _, env := range envs {
45+
result[env.ID.String()] = db.ToOapiEnvironment(env)
46+
}
47+
return result, nil
48+
}
49+
50+
var _ EnvironmentGetter = (*StoreEnvironmentGetter)(nil)
51+
52+
type StoreEnvironmentGetter struct {
53+
store *legacystore.Store
54+
}
55+
56+
func NewStoreEnvironmentGetter(store *legacystore.Store) EnvironmentGetter {
57+
return &StoreEnvironmentGetter{store: store}
58+
}
59+
60+
func (s *StoreEnvironmentGetter) GetEnvironment(ctx context.Context, environmentID string) (*oapi.Environment, error) {
61+
env, ok := s.store.Environments.Get(environmentID)
62+
if !ok {
63+
return nil, fmt.Errorf("environment not found")
64+
}
65+
return env, nil
66+
}
67+
68+
func (s *StoreEnvironmentGetter) GetAllEnvironments(ctx context.Context, _ string) (map[string]*oapi.Environment, error) {
69+
envs := s.store.Environments.Items()
70+
return envs, nil
71+
}

0 commit comments

Comments
 (0)