view pkg/models/gauge.go @ 1677:53304db85888

Waterway axis import: Added route for manual import.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 26 Dec 2018 10:46:17 +0100
parents a0982c38eac0
children 49e047c2106e
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):
//  * Raimund Renkert <raimund.renkert@intevation.de>

package models

import (
	"errors"
	"fmt"
	"strconv"
	"time"
)

// GaugeMeasurementImport contains data used to define the endpoint
type GaugeMeasurementImport struct {
	URL       string `json:"url"`
	Insecure  bool   `json:"insecure"`
	SendEmail bool   `json:"send-email"`
}

// GaugeMeasurement holds information about a gauge and the latest measurement
type GaugeMeasurement struct {
	Gauge           Isrs
	LatestDateIssue time.Time
}

// Isrs represents the gauge identification data structure
type Isrs struct {
	CountryCode    string
	LoCode         string
	FairwaySection string
	Orc            string
	Hectometre     int
}

// IsrsFromString converts string representation of isrs code to type Isrs
func IsrsFromString(isrsCode string) (*Isrs, error) {
	if len(isrsCode) < 20 {
		return nil, errors.New("ISRS code too short")
	}
	hm, err := strconv.Atoi(isrsCode[15:20])
	if err != nil {
		return nil, err
	}
	isrs := Isrs{
		CountryCode:    isrsCode[0:2],
		LoCode:         isrsCode[2:5],
		FairwaySection: isrsCode[5:10],
		Orc:            isrsCode[10:15],
		Hectometre:     hm,
	}
	return &isrs, nil
}

// String creates a isrs code string from Isrs
func (isrs *Isrs) String() string {
	return fmt.Sprintf("%s%s%s%s%05d",
		isrs.CountryCode,
		isrs.LoCode,
		isrs.FairwaySection,
		isrs.Orc,
		isrs.Hectometre)
}