Skip to content

Commit 4854f60

Browse files
committed
feat(sda-validator-orchestrator): fix db message null values and null scaning, add user_id validation in admin/validate api, fix file_validation_job.finished_at column type
1 parent fef81c0 commit 4854f60

File tree

3 files changed

+59
-24
lines changed

3 files changed

+59
-24
lines changed

sda-validator/orchestrator/api/api.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ func (api *validatorAPIImpl) AdminValidatePost(c *gin.Context) {
141141

142142
return
143143
}
144-
userID := token.(jwt.Token).Subject()
144+
adminID := token.(jwt.Token).Subject()
145145
request := new(openapi.AdminValidateRequest)
146146
if err := c.ShouldBindJSON(request); err != nil {
147147
log.Errorf("failed to bind request to json error: %v", err)
@@ -150,7 +150,13 @@ func (api *validatorAPIImpl) AdminValidatePost(c *gin.Context) {
150150
return
151151
}
152152

153-
api.validate(c, request.UserId, userID, request.FilePaths, request.Validators)
153+
if request.UserId == "" {
154+
c.AbortWithStatus(http.StatusBadRequest)
155+
156+
return
157+
}
158+
159+
api.validate(c, request.UserId, adminID, request.FilePaths, request.Validators)
154160
}
155161

156162
// ValidatePost handles the POST /validate

sda-validator/orchestrator/database/postgres/db_functions.go

Lines changed: 50 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ AND finished_at IS NULL`,
5252

5353
updateAllValidationJobFilesOnErrorQuery: `
5454
UPDATE file_validation_job SET
55-
finished_at = $1, file_result = "error", validator_messages = $2, validator_result = "error"
55+
finished_at = $1, file_result = 'error', validator_messages = $2, validator_result = 'error'
5656
WHERE validation_id = $3`,
5757
}
5858

@@ -68,10 +68,12 @@ func (db *pgDb) readValidationResult(ctx context.Context, stmt *sql.Stmt, valida
6868
validatorResults := make(map[string]*model.ValidatorResult)
6969

7070
for rows.Next() {
71-
var validatorMessages, fileMessages, startedAt, finishedAt string
71+
var startedAt string
7272
fileResult := new(model.FileResult)
7373
validatorResult := new(model.ValidatorResult)
7474

75+
var validatorMessages, fileMessages, finishedAt sql.NullString
76+
7577
if err := rows.Scan(
7678
&validatorResult.ValidatorID,
7779
&validatorResult.Result,
@@ -84,8 +86,10 @@ func (db *pgDb) readValidationResult(ctx context.Context, stmt *sql.Stmt, valida
8486
return nil, err
8587
}
8688

87-
if err := json.Unmarshal([]byte(fileMessages), &fileResult.Messages); err != nil {
88-
return nil, fmt.Errorf("failed to unmarshal file messages: %v", err)
89+
if fileMessages.Valid {
90+
if err := json.Unmarshal([]byte(fileMessages.String), &fileResult.Messages); err != nil {
91+
return nil, fmt.Errorf("failed to unmarshal file messages: %v", err)
92+
}
8993
}
9094

9195
if readValidatorResult, ok := validatorResults[validatorResult.ValidatorID]; ok {
@@ -94,17 +98,21 @@ func (db *pgDb) readValidationResult(ctx context.Context, stmt *sql.Stmt, valida
9498
continue
9599
}
96100

97-
if err := json.Unmarshal([]byte(validatorMessages), &validatorResult.Messages); err != nil {
98-
return nil, fmt.Errorf("failed to unmarshal file messages: %v", err)
101+
if validatorMessages.Valid {
102+
if err := json.Unmarshal([]byte(validatorMessages.String), &validatorResult.Messages); err != nil {
103+
return nil, fmt.Errorf("failed to unmarshal file messages: %v", err)
104+
}
99105
}
100106

101107
validatorResult.StartedAt, err = time.Parse(time.RFC3339, startedAt)
102108
if err != nil {
103109
return nil, fmt.Errorf("failed to parse started at: %v", err)
104110
}
105-
validatorResult.FinishedAt, err = time.Parse(time.RFC3339, startedAt)
106-
if err != nil {
107-
return nil, fmt.Errorf("failed to parse started at: %v", err)
111+
if finishedAt.Valid {
112+
validatorResult.FinishedAt, err = time.Parse(time.RFC3339, finishedAt.String)
113+
if err != nil {
114+
return nil, fmt.Errorf("failed to parse started at: %v", err)
115+
}
108116
}
109117
validatorResult.Files = append(validatorResult.Files, fileResult)
110118
validatorResults[validatorResult.ValidatorID] = validatorResult
@@ -180,20 +188,34 @@ func (db *pgDb) readValidationInformation(ctx context.Context, stmt *sql.Stmt, v
180188
}
181189

182190
func (db *pgDb) updateFileValidationJob(ctx context.Context, stmt *sql.Stmt, params *model.UpdateFileValidationJobParameters) error {
183-
fileMessagesJSON, err := json.Marshal(params.FileMessages)
184-
if err != nil {
185-
return fmt.Errorf("failed to marshal file messages: %v", err)
191+
192+
fileMessages := sql.NullString{}
193+
if len(params.FileMessages) > 0 {
194+
fileMessagesJSON, err := json.Marshal(params.FileMessages)
195+
if err != nil {
196+
return fmt.Errorf("failed to marshal file messages: %v", err)
197+
}
198+
199+
fileMessages.Valid = true
200+
fileMessages.String = string(fileMessagesJSON)
186201
}
187-
validatorMessagesJSON, err := json.Marshal(params.ValidatorMessages)
188-
if err != nil {
189-
return fmt.Errorf("failed to marshal validator messages: %v", err)
202+
203+
validatorMessages := sql.NullString{}
204+
if len(params.ValidatorMessages) > 0 {
205+
validatorMessagesJSON, err := json.Marshal(params.ValidatorMessages)
206+
if err != nil {
207+
return fmt.Errorf("failed to marshal validator messages: %v", err)
208+
}
209+
210+
validatorMessages.Valid = true
211+
validatorMessages.String = string(validatorMessagesJSON)
190212
}
191213

192214
if _, err := stmt.ExecContext(ctx,
193215
params.FinishedAt.Format(time.RFC3339),
194216
params.FileResult,
195-
validatorMessagesJSON,
196-
fileMessagesJSON,
217+
validatorMessages,
218+
fileMessages,
197219
params.ValidatorResult,
198220
params.FileID,
199221
params.ValidatorID,
@@ -236,14 +258,21 @@ func (db *pgDb) insertFileValidationJob(ctx context.Context, stmt *sql.Stmt, par
236258
}
237259

238260
func (db *pgDb) updateAllValidationJobFilesOnError(ctx context.Context, stmt *sql.Stmt, validationId string, validatorMessage *model.Message) error {
239-
validatorMessagesJSON, err := json.Marshal([]*model.Message{validatorMessage})
240-
if err != nil {
241-
return fmt.Errorf("failed to marshal validator message: %v", err)
261+
262+
validatorMessages := &sql.NullString{}
263+
if validatorMessage != nil {
264+
validatorMessagesJSON, err := json.Marshal([]*model.Message{validatorMessage})
265+
if err != nil {
266+
return fmt.Errorf("failed to marshal validator messages: %v", err)
267+
}
268+
269+
validatorMessages.Valid = true
270+
validatorMessages.String = string(validatorMessagesJSON)
242271
}
243272

244273
if _, err := stmt.ExecContext(ctx,
245274
time.Now().Format(time.RFC3339),
246-
validatorMessagesJSON,
275+
validatorMessages,
247276
validationId); err != nil {
248277
return err
249278
}

sda-validator/orchestrator/database/postgres/initdb.d/01_create_table_file_validation_job.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ CREATE TABLE IF NOT EXISTS file_validation_job
1010
triggered_by TEXT,
1111
file_result TEXT DEFAULT 'pending',
1212
started_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT clock_timestamp(),
13-
finished_at TIMESTAMP,
13+
finished_at TIMESTAMP WITH TIME ZONE,
1414
file_messages JSON,
1515
validator_messages JSON,
1616
validator_result TEXT DEFAULT 'pending',

0 commit comments

Comments
 (0)