view pkg/models/gauge.go @ 1646:a0982c38eac0

Import queue: Implemented email notifications.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 20 Dec 2018 15:33:29 +0100
parents 334d13e63342
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)
}