Skip to content

Commit 32d4b0a

Browse files
authored
fix(api): missing data when loading environments (#5200)
1 parent 3ea5529 commit 32d4b0a

File tree

3 files changed

+45
-40
lines changed

3 files changed

+45
-40
lines changed

engine/api/environment/environment.go

Lines changed: 41 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package environment
33
import (
44
"database/sql"
55
"fmt"
6-
"time"
76

87
"github.com/go-gorp/gorp"
98
"github.com/lib/pq"
@@ -16,11 +15,14 @@ import (
1615
func LoadAllByIDs(db gorp.SqlExecutor, ids []int64) ([]sdk.Environment, error) {
1716
var envs []sdk.Environment
1817

19-
query := `SELECT environment.id, environment.name, environment.last_modified, environment.from_repository, project.projectkey
20-
FROM environment
21-
JOIN project ON project.id = environment.project_id
22-
WHERE environment.id = ANY($1)
23-
ORDER by environment.name`
18+
query := `
19+
SELECT environment.id, environment.name, environment.project_id, environment.created,
20+
environment.last_modified, environment.from_repository, project.projectkey
21+
FROM environment
22+
JOIN project ON project.id = environment.project_id
23+
WHERE environment.id = ANY($1)
24+
ORDER by environment.name
25+
`
2426
rows, err := db.Query(query, pq.Int64Array(ids))
2527
if err != nil {
2628
if err == sql.ErrNoRows {
@@ -32,13 +34,10 @@ func LoadAllByIDs(db gorp.SqlExecutor, ids []int64) ([]sdk.Environment, error) {
3234

3335
for rows.Next() {
3436
var env sdk.Environment
35-
var lastModified time.Time
36-
var projectKey string
37-
if err := rows.Scan(&env.ID, &env.Name, &lastModified, &env.FromRepository, &projectKey); err != nil {
37+
if err := rows.Scan(&env.ID, &env.Name, &env.ProjectID, &env.Created,
38+
&env.LastModified, &env.FromRepository, &env.ProjectKey); err != nil {
3839
return envs, sdk.WithStack(err)
3940
}
40-
env.LastModified = lastModified.Unix()
41-
env.ProjectKey = projectKey
4241
envs = append(envs, env)
4342
}
4443
rows.Close()
@@ -55,28 +54,29 @@ func LoadAllByIDs(db gorp.SqlExecutor, ids []int64) ([]sdk.Environment, error) {
5554
func LoadEnvironments(db gorp.SqlExecutor, projectKey string) ([]sdk.Environment, error) {
5655
var envs []sdk.Environment
5756

58-
query := `SELECT environment.id, environment.name, environment.last_modified, environment.from_repository
59-
FROM environment
60-
JOIN project ON project.id = environment.project_id
61-
WHERE project.projectKey = $1
62-
ORDER by environment.name`
57+
query := `
58+
SELECT environment.id, environment.name, environment.project_id, environment.created,
59+
environment.last_modified, environment.from_repository, project.projectkey
60+
FROM environment
61+
JOIN project ON project.id = environment.project_id
62+
WHERE project.projectKey = $1
63+
ORDER by environment.name
64+
`
6365
rows, err := db.Query(query, projectKey)
6466
if err != nil {
6567
if err == sql.ErrNoRows {
66-
return envs, sdk.ErrNoEnvironment
68+
return envs, sdk.WithStack(sdk.ErrNoEnvironment)
6769
}
6870
return envs, sdk.WithStack(err)
6971
}
7072
defer rows.Close()
7173

7274
for rows.Next() {
7375
var env sdk.Environment
74-
var lastModified time.Time
75-
if err := rows.Scan(&env.ID, &env.Name, &lastModified, &env.FromRepository); err != nil {
76+
if err := rows.Scan(&env.ID, &env.Name, &env.ProjectID, &env.Created,
77+
&env.LastModified, &env.FromRepository, &env.ProjectKey); err != nil {
7678
return envs, sdk.WithStack(err)
7779
}
78-
env.LastModified = lastModified.Unix()
79-
env.ProjectKey = projectKey
8080
envs = append(envs, env)
8181
}
8282
rows.Close()
@@ -112,10 +112,15 @@ func LoadEnvironmentByID(db gorp.SqlExecutor, ID int64) (*sdk.Environment, error
112112
return &sdk.DefaultEnv, nil
113113
}
114114
var env sdk.Environment
115-
query := `SELECT environment.id, environment.name, environment.project_id, environment.from_repository
116-
FROM environment
117-
WHERE id = $1`
118-
if err := db.QueryRow(query, ID).Scan(&env.ID, &env.Name, &env.ProjectID, &env.FromRepository); err != nil {
115+
query := `
116+
SELECT environment.id, environment.name, environment.project_id, environment.created,
117+
environment.last_modified, environment.from_repository, project.projectkey
118+
FROM environment
119+
JOIN project ON project.id = environment.project_id
120+
WHERE environment.id = $1
121+
`
122+
if err := db.QueryRow(query, ID).Scan(&env.ID, &env.Name, &env.ProjectID, &env.Created,
123+
&env.LastModified, &env.FromRepository, &env.ProjectKey); err != nil {
119124
if err == sql.ErrNoRows {
120125
return nil, sdk.WithStack(sdk.ErrEnvironmentNotFound)
121126
}
@@ -131,19 +136,20 @@ func LoadEnvironmentByName(db gorp.SqlExecutor, projectKey, envName string) (*sd
131136
}
132137

133138
var env sdk.Environment
134-
query := `SELECT environment.id, environment.name, environment.project_id, environment.from_repository, environment.last_modified
135-
FROM environment
136-
JOIN project ON project.id = environment.project_id
137-
WHERE project.projectKey = $1 AND environment.name = $2`
138-
var lastModified time.Time
139-
if err := db.QueryRow(query, projectKey, envName).Scan(&env.ID, &env.Name, &env.ProjectID, &env.FromRepository, &lastModified); err != nil {
139+
query := `
140+
SELECT environment.id, environment.name, environment.project_id, environment.created,
141+
environment.last_modified, environment.from_repository, project.projectkey
142+
FROM environment
143+
JOIN project ON project.id = environment.project_id
144+
WHERE project.projectKey = $1 AND environment.name = $2
145+
`
146+
if err := db.QueryRow(query, projectKey, envName).Scan(&env.ID, &env.Name, &env.ProjectID, &env.Created,
147+
&env.LastModified, &env.FromRepository, &env.ProjectKey); err != nil {
140148
if err == sql.ErrNoRows {
141149
return nil, sdk.WithData(sdk.ErrEnvironmentNotFound, envName)
142150
}
143151
return nil, sdk.WithStack(err)
144152
}
145-
env.LastModified = lastModified.Unix()
146-
env.ProjectKey = projectKey
147153
return &env, sdk.WithStack(loadDependencies(db, &env))
148154
}
149155

@@ -220,15 +226,14 @@ func loadDependencies(db gorp.SqlExecutor, env *sdk.Environment) error {
220226

221227
// InsertEnvironment Insert new environment
222228
func InsertEnvironment(db gorp.SqlExecutor, env *sdk.Environment) error {
223-
query := `INSERT INTO environment (name, project_id, from_repository) VALUES($1, $2, $3) RETURNING id, last_modified`
229+
query := `INSERT INTO environment (name, project_id, from_repository) VALUES($1, $2, $3) RETURNING id, created, last_modified`
224230

225231
rx := sdk.NamePatternRegex
226232
if !rx.MatchString(env.Name) {
227233
return sdk.NewError(sdk.ErrInvalidName, fmt.Errorf("Invalid environment name. It should match %s", sdk.NamePattern))
228234
}
229235

230-
var lastModified time.Time
231-
err := db.QueryRow(query, env.Name, env.ProjectID, env.FromRepository).Scan(&env.ID, &lastModified)
236+
err := db.QueryRow(query, env.Name, env.ProjectID, env.FromRepository).Scan(&env.ID, &env.Created, &env.LastModified)
232237
if err != nil {
233238
pqerr, ok := err.(*pq.Error)
234239
if ok {
@@ -238,7 +243,6 @@ func InsertEnvironment(db gorp.SqlExecutor, env *sdk.Environment) error {
238243
}
239244
return err
240245
}
241-
env.LastModified = lastModified.Unix()
242246
return nil
243247
}
244248

engine/api/environment/environment_exporter.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ func ExportEnvironment(db gorp.SqlExecutor, env sdk.Environment, encryptFunc sdk
4545
case sdk.SecretVariable:
4646
content, err := encryptFunc(db, env.ProjectID, fmt.Sprintf("envID:%d:%s", env.ID, v.Name), v.Value)
4747
if err != nil {
48-
return exportentities.Environment{}, sdk.WrapError(err, "Unknown key type")
48+
return exportentities.Environment{}, sdk.WrapError(err, "unable to encrypt var for env %d in project %d", env.ID, env.ProjectID)
4949
}
5050
v.Value = content
5151
envvars = append(envvars, v)
@@ -59,7 +59,7 @@ func ExportEnvironment(db gorp.SqlExecutor, env sdk.Environment, encryptFunc sdk
5959
for _, k := range env.Keys {
6060
content, err := encryptFunc(db, env.ProjectID, fmt.Sprintf("envID:%d:%s", env.ID, k.Name), k.Private)
6161
if err != nil {
62-
return exportentities.Environment{}, sdk.WrapError(err, "Unable to encrypt key")
62+
return exportentities.Environment{}, sdk.WrapError(err, "unable to encrypt key for env %d in project %d", env.ID, env.ProjectID)
6363
}
6464
ek := exportentities.EncryptedKey{
6565
Type: string(k.Type),

sdk/environment.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ type Environment struct {
1111
Variables []Variable `json:"variables,omitempty" yaml:"variables"`
1212
ProjectID int64 `json:"-" yaml:"-"`
1313
ProjectKey string `json:"project_key" yaml:"-"`
14-
LastModified int64 `json:"last_modified"`
14+
Created time.Time `json:"created"`
15+
LastModified time.Time `json:"last_modified"`
1516
Keys []EnvironmentKey `json:"keys"`
1617
Usage *Usage `json:"usage,omitempty"`
1718
FromRepository string `json:"from_repository,omitempty"`

0 commit comments

Comments
 (0)