view pkg/models/import.go @ 4078:80bdcd137a1d timezone

Parse timezones from time inputs and send timezones in results.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 25 Jul 2019 15:43:13 +0200
parents 386ff766dfcd
children 948e312e87bc
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 models

import (
	"encoding/json"
	"errors"
	"time"

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

type (
	ImportTime struct{ time.Time }

	Import struct {
		ID       int64      `json:"id"`
		State    string     `json:"state"`
		Enqueued ImportTime `json:"enqueued"`
		Kind     string     `json:"kind"`
		User     string     `json:"user"`
		Signer   string     `json:"signer,omitempty"`
		Summary  bool       `json:"summary,omitempty"`
		Warnings bool       `json:"warnings,omitempty"`
	}

	ImportLogEntry struct {
		Time    ImportTime `json:"time"`
		Kind    string     `json:"kind"`
		Message string     `json:"message"`
	}

	ReviewState string

	Review struct {
		ID    int64       `json:"id"`
		State ReviewState `json:"state"`
	}
)

var errInvalidReviewState = errors.New("state is wether 'accepted' nor 'declined'")

func (rs *ReviewState) UnmarshalJSON(data []byte) error {
	var s string
	if err := json.Unmarshal(data, &s); err != nil {
		return err
	}
	if s != "accepted" && s != "declined" {
		return errInvalidReviewState
	}
	*rs = ReviewState(s)
	return nil
}

func (it ImportTime) MarshalJSON() ([]byte, error) {
	return json.Marshal(it.Format(common.TimeFormatMicro))
}

func (it *ImportTime) Scan(x interface{}) error {
	t, ok := x.(time.Time)
	if !ok {
		*it = ImportTime{}
	} else {
		*it = ImportTime{t}
	}
	return nil
}