view pkg/controllers/scheduler.go @ 1583:caedd9b176f2

Added GET to /api/imports/scheduler.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 13 Dec 2018 18:37:35 +0100
parents dc727824183a
children e0bd82f6ee14
line wrap: on
line source

// 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"

	"gemma.intevation.de/gemma/pkg/models"
)

const (
	selectImportConfigurationSQL = `
SELECT
  id,
  username,
  kind,
  send_email,
  auto_accept,
  cron,
  url
FROM waterway.import_configuration
ORDER by id`
)

func listScheduler(
	_ interface{},
	req *http.Request,
	conn *sql.Conn,
) (jr JSONResult, err error) {

	ctx := req.Context()
	var rows *sql.Rows

	if rows, err = conn.QueryContext(ctx, selectImportConfigurationSQL); err != nil {
		return
	}
	defer rows.Close()

	list := []*models.IDImportConfig{}

	for rows.Next() {
		var (
			entry models.IDImportConfig
			kind  string
			cron  sql.NullString
			url   sql.NullString
		)
		if err = rows.Scan(
			&entry.ID,
			&kind,
			&entry.SendEMail,
			&entry.AutoAccept,
			&cron,
		); err != nil {
			return
		}
		entry.Kind = models.ImportKind(kind)
		if cron.Valid {
			cs := models.CronSpec(cron.String)
			entry.Cron = &cs
		}
		if url.Valid {
			entry.URL = &url.String
		}
		list = append(list, &entry)
	}

	if err = rows.Err(); err != nil {
		return
	}

	jr = JSONResult{Result: list}
	return
}