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 }