Mercurial > gemma
diff pkg/controllers/importqueue.go @ 1023:337a7f4c8a16
Add endpoint to list all or some import jobs.
Unpaged path: /api/imports
Paged path: /api/imports?offset=[0-9+]&limit=[0-9]+
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 24 Oct 2018 12:24:26 +0200 |
parents | |
children | 3de54d7b7d30 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pkg/controllers/importqueue.go Wed Oct 24 12:24:26 2018 +0200 @@ -0,0 +1,95 @@ +// This is Free Software under GNU Affero General Public License v >= 3.0 +// without warranty, see README.md and license for details. +// +// SPDX-License-Identifier: AGPL-3.0-or-later +// License-Filename: LICENSES/AGPL-3.0.txt +// +// Copyright (C) 2018 by via donau +// – Österreichische Wasserstraßen-Gesellschaft mbH +// Software engineering by Intevation GmbH +// +// Author(s): +// * Sascha L. Teichmann <sascha.teichmann@intevation.de> + +package controllers + +import ( + "database/sql" + "net/http" + "strconv" + + "gemma.intevation.de/gemma/pkg/models" + "github.com/gorilla/mux" +) + +const ( + selectImportsUnpagedSQL = ` +SELECT + id, + state::varchar, + enqueued, + kind, + username +FROM waterway.imports +ORDER BY id` + + selectImportPagedSQL = selectImportsUnpagedSQL + ` +LIMIT $1 OFFSET $2` +) + +func listImports( + _ interface{}, + req *http.Request, + conn *sql.Conn, +) (jr JSONResult, err error) { + vars := mux.Vars(req) + + off, of := vars["offset"] + lim, lf := vars["limit"] + + var rows *sql.Rows + + if of && lf { + offset, _ := strconv.ParseInt(off, 10, 64) + limit, _ := strconv.ParseInt(lim, 10, 64) + rows, err = conn.QueryContext( + req.Context(), selectImportPagedSQL, limit, offset) + } else { + rows, err = conn.QueryContext( + req.Context(), selectImportsUnpagedSQL) + } + if err != nil { + return + } + defer rows.Close() + + imports := make([]*models.Import, 0, 20) + + for rows.Next() { + var it models.Import + if err = rows.Scan( + &it.ID, + &it.State, + &it.Enqueued, + &it.Kind, + &it.User, + ); err != nil { + return + } + imports = append(imports, &it) + } + + if err = rows.Err(); err != nil { + return + } + + jr = JSONResult{ + Result: struct { + Imports []*models.Import `json:"imports"` + }{ + Imports: imports, + }, + } + + return +}