2017-11-20 06:10:04 +01:00
|
|
|
// Copyright 2017 Frédéric Guillot. All rights reserved.
|
|
|
|
// Use of this source code is governed by the Apache 2.0
|
|
|
|
// license that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package model
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"time"
|
|
|
|
)
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// Entry statuses
|
2017-11-20 06:10:04 +01:00
|
|
|
const (
|
|
|
|
EntryStatusUnread = "unread"
|
|
|
|
EntryStatusRead = "read"
|
|
|
|
EntryStatusRemoved = "removed"
|
|
|
|
DefaultSortingOrder = "published_at"
|
|
|
|
DefaultSortingDirection = "desc"
|
|
|
|
)
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// Entry represents a feed item in the system.
|
2017-11-20 06:10:04 +01:00
|
|
|
type Entry struct {
|
|
|
|
ID int64 `json:"id"`
|
|
|
|
UserID int64 `json:"user_id"`
|
|
|
|
FeedID int64 `json:"feed_id"`
|
|
|
|
Status string `json:"status"`
|
|
|
|
Hash string `json:"hash"`
|
|
|
|
Title string `json:"title"`
|
|
|
|
URL string `json:"url"`
|
|
|
|
Date time.Time `json:"published_at"`
|
|
|
|
Content string `json:"content"`
|
|
|
|
Author string `json:"author"`
|
|
|
|
Enclosures EnclosureList `json:"enclosures,omitempty"`
|
|
|
|
Feed *Feed `json:"feed,omitempty"`
|
|
|
|
Category *Category `json:"category,omitempty"`
|
|
|
|
}
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// Entries represents a list of entries.
|
2017-11-20 06:10:04 +01:00
|
|
|
type Entries []*Entry
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// ValidateEntryStatus makes sure the entry status is valid.
|
2017-11-20 06:10:04 +01:00
|
|
|
func ValidateEntryStatus(status string) error {
|
|
|
|
switch status {
|
|
|
|
case EntryStatusRead, EntryStatusUnread, EntryStatusRemoved:
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Errorf(`Invalid entry status, valid status values are: "%s", "%s" and "%s"`, EntryStatusRead, EntryStatusUnread, EntryStatusRemoved)
|
|
|
|
}
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// ValidateEntryOrder makes sure the sorting order is valid.
|
2017-11-20 06:10:04 +01:00
|
|
|
func ValidateEntryOrder(order string) error {
|
|
|
|
switch order {
|
|
|
|
case "id", "status", "published_at", "category_title", "category_id":
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Errorf(`Invalid entry order, valid order values are: "id", "status", "published_at", "category_title", "category_id"`)
|
|
|
|
}
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// ValidateDirection makes sure the sorting direction is valid.
|
2017-11-20 06:10:04 +01:00
|
|
|
func ValidateDirection(direction string) error {
|
|
|
|
switch direction {
|
|
|
|
case "asc", "desc":
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
return fmt.Errorf(`Invalid direction, valid direction values are: "asc" or "desc"`)
|
|
|
|
}
|
|
|
|
|
2017-11-22 00:46:59 +01:00
|
|
|
// GetOppositeDirection returns the opposite sorting direction.
|
2017-11-20 06:10:04 +01:00
|
|
|
func GetOppositeDirection(direction string) string {
|
|
|
|
if direction == "asc" {
|
|
|
|
return "desc"
|
|
|
|
}
|
|
|
|
|
|
|
|
return "asc"
|
|
|
|
}
|