Mercurial > gemma
comparison pkg/controllers/importqueue.go @ 1193:58acc343b1b6
Implemented the db stuff of the review process. Needs testing.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Fri, 16 Nov 2018 18:35:09 +0100 |
parents | 3afa71405b87 |
children | 7db850de0952 |
comparison
equal
deleted
inserted
replaced
1192:3afa71405b87 | 1193:58acc343b1b6 |
---|---|
290 return | 290 return |
291 } | 291 } |
292 | 292 |
293 const ( | 293 const ( |
294 isPendingSQL = ` | 294 isPendingSQL = ` |
295 SELECT state = 'pending'::waterway.import_state WHERE id = $1` | 295 SELECT state = 'pending'::waterway.import_state, kind WHERE id = $1` |
296 | |
297 reviewSQL = ` | |
298 UPDATE waterway.imports SET state = $1::waterway.import_state | |
299 WHERE id = $2` | |
300 | |
301 deleteImportDataSQL = `SELECT waterway.del_import($1)` | |
302 | |
303 deleteImportTrackSQL = ` | |
304 DELETE FROM waterway.track_imports WHERE import_id = $1` | |
296 ) | 305 ) |
297 | 306 |
298 func reviewImport( | 307 func reviewImport( |
299 _ interface{}, | 308 _ interface{}, |
300 req *http.Request, | 309 req *http.Request, |
311 return | 320 return |
312 } | 321 } |
313 defer tx.Rollback() | 322 defer tx.Rollback() |
314 | 323 |
315 var pending bool | 324 var pending bool |
316 | 325 var kind string |
317 err = tx.QueryRowContext(ctx, isPendingSQL, id).Scan(&pending) | 326 |
327 err = tx.QueryRowContext(ctx, isPendingSQL, id).Scan(&pending, &kind) | |
318 switch { | 328 switch { |
319 case err == sql.ErrNoRows: | 329 case err == sql.ErrNoRows: |
320 err = JSONError{ | 330 err = JSONError{ |
321 Code: http.StatusNotFound, | 331 Code: http.StatusNotFound, |
322 Message: fmt.Sprintf("Cannot find import #%d.", id), | 332 Message: fmt.Sprintf("Cannot find import #%d.", id), |
331 } | 341 } |
332 return | 342 return |
333 } | 343 } |
334 | 344 |
335 if state == "accepted" { | 345 if state == "accepted" { |
336 // TODO: Call a stored procedure to do the grunt stuff | 346 if jc := imports.FindJobCreator(imports.JobKind(kind)); jc != nil { |
337 // inside the database. | 347 if err = jc.StageDone(tx, ctx, id); err != nil { |
348 return | |
349 } | |
350 } | |
351 | |
352 if _, err = tx.ExecContext(ctx, deleteImportTrackSQL, id); err != nil { | |
353 return | |
354 } | |
338 } else { | 355 } else { |
356 if _, err = tx.ExecContext(ctx, deleteImportDataSQL, id); err != nil { | |
357 return | |
358 } | |
359 } | |
360 | |
361 if _, err = tx.ExecContext(ctx, reviewSQL, state, id); err != nil { | |
362 return | |
339 } | 363 } |
340 | 364 |
341 if err = tx.Commit(); err != nil { | 365 if err = tx.Commit(); err != nil { |
342 return | 366 return |
343 } | 367 } |