Mercurial > gemma
view pkg/controllers/wpimports.go @ 2411:27d3e9eda8b6
client: table component: fade transition for adding/removing items
author | Markus Kottlaender <markus@intevation.de> |
---|---|
date | Thu, 28 Feb 2019 12:16:27 +0100 |
parents | 4d6979dedb11 |
children |
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 ( "fmt" "log" "net/http" "strconv" "time" "gemma.intevation.de/gemma/pkg/auth" "gemma.intevation.de/gemma/pkg/common" "gemma.intevation.de/gemma/pkg/imports" "gemma.intevation.de/gemma/pkg/misc" ) const ( maxWaterwayProfilesSize = 25 * 1024 * 1024 waterwayProfilesName = "wp" ) func importWaterwayProfiles(rw http.ResponseWriter, req *http.Request) { url := req.FormValue("url") if url == "" { http.Error(rw, "missing 'url' parameter", http.StatusBadRequest) return } featureType := req.FormValue("feature-type") if featureType == "" { http.Error(rw, "missing 'feature-type' parameter", http.StatusBadRequest) return } dir, err := misc.StoreUploadedFile( req, waterwayProfilesName, "wp.csv", maxWaterwayProfilesSize) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } sortBy := req.FormValue("sort-by") var precision *float64 if p := req.FormValue("precision"); p != "" { if v, err := strconv.ParseFloat(p, 64); err != nil { http.Error(rw, fmt.Sprintf("Invalid 'precision' parameter: %v", err), http.StatusBadRequest) return } else { precision = &v } } wp := &imports.WaterwayProfiles{ Dir: dir, URL: url, FeatureType: featureType, SortBy: sortBy, Precision: precision, } serialized, err := common.ToJSONString(wp) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } session, _ := auth.GetSession(req) sendEmail := req.FormValue("email") != "" jobID, err := imports.AddJob( imports.WPJobKind, time.Time{}, // due nil, // trys nil, // wait retry session.User, sendEmail, serialized) if err != nil { log.Printf("error: %v\n", err) http.Error(rw, "error: "+err.Error(), http.StatusInternalServerError) return } log.Printf("info: added import #%d to queue\n", jobID) result := struct { ID int64 `json:"id"` }{ ID: jobID, } SendJSON(rw, http.StatusCreated, &result) }