feedvault.se/models.go
2024-02-04 01:53:49 +01:00

157 lines
6.8 KiB
Go

package main
import (
"time"
"gorm.io/gorm"
)
type Feed struct {
gorm.Model
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Link string `json:"link,omitempty"`
FeedLink string `json:"feedLink,omitempty"`
Links []string `gorm:"type:text[]" json:"links,omitempty"`
Updated string `json:"updated,omitempty"`
UpdatedParsed *time.Time `json:"updatedParsed,omitempty"`
Published string `json:"published,omitempty"`
PublishedParsed *time.Time `json:"publishedParsed,omitempty"`
Authors []*Person `gorm:"many2many:feed_authors;" json:"authors,omitempty"`
Language string `json:"language,omitempty"`
Image *Image `gorm:"foreignKey:ID" json:"image,omitempty"`
Copyright string `json:"copyright,omitempty"`
Generator string `json:"generator,omitempty"`
Categories []string `gorm:"type:text[]" json:"categories,omitempty"`
DublinCoreExt *DublinCoreExtension `gorm:"foreignKey:ID" json:"dcExt,omitempty"`
ITunesExt *ITunesFeedExtension `gorm:"foreignKey:ID" json:"itunesExt,omitempty"`
Extensions Extensions `gorm:"type:json" json:"extensions,omitempty"`
Custom map[string]string `gorm:"type:json" json:"custom,omitempty"`
Items []*Item `gorm:"foreignKey:ID" json:"items,omitempty"`
FeedType string `json:"feedType"`
FeedVersion string `json:"feedVersion"`
}
type Item struct {
gorm.Model
Title string `json:"title,omitempty"`
Description string `json:"description,omitempty"`
Content string `json:"content,omitempty"`
Link string `json:"link,omitempty"`
Links []string `gorm:"type:text[]" json:"links,omitempty"`
Updated string `json:"updated,omitempty"`
UpdatedParsed *time.Time `json:"updatedParsed,omitempty"`
Published string `json:"published,omitempty"`
PublishedParsed *time.Time `json:"publishedParsed,omitempty"`
Authors []*Person `gorm:"many2many:item_authors;" json:"authors,omitempty"`
GUID string `json:"guid,omitempty"`
Image *Image `gorm:"foreignKey:ID" json:"image,omitempty"`
Categories []string `gorm:"type:text[]" json:"categories,omitempty"`
Enclosures []*Enclosure `gorm:"foreignKey:ID" json:"enclosures,omitempty"`
DublinCoreExt *DublinCoreExtension `gorm:"foreignKey:ID" json:"dcExt,omitempty"`
ITunesExt *ITunesFeedExtension `gorm:"foreignKey:ID" json:"itunesExt,omitempty"`
Extensions Extensions `gorm:"type:json" json:"extensions,omitempty"`
Custom map[string]string `gorm:"type:json" json:"custom,omitempty"`
}
type Person struct {
gorm.Model
Name string `json:"name,omitempty"`
Email string `json:"email,omitempty"`
}
func (Person) TableName() string {
return "feed_authors"
}
type Image struct {
gorm.Model
URL string `json:"url,omitempty"`
Title string `json:"title,omitempty"`
}
type Enclosure struct {
gorm.Model
URL string `json:"url,omitempty"`
Length string `json:"length,omitempty"`
Type string `json:"type,omitempty"`
}
type DublinCoreExtension struct {
gorm.Model
Title []string `gorm:"type:text[]" json:"title,omitempty"`
Creator []string `gorm:"type:text[]" json:"creator,omitempty"`
Author []string `gorm:"type:text[]" json:"author,omitempty"`
Subject []string `gorm:"type:text[]" json:"subject,omitempty"`
Description []string `gorm:"type:text[]" json:"description,omitempty"`
Publisher []string `gorm:"type:text[]" json:"publisher,omitempty"`
Contributor []string `gorm:"type:text[]" json:"contributor,omitempty"`
Date []string `gorm:"type:text[]" json:"date,omitempty"`
Type []string `gorm:"type:text[]" json:"type,omitempty"`
Format []string `gorm:"type:text[]" json:"format,omitempty"`
Identifier []string `gorm:"type:text[]" json:"identifier,omitempty"`
Source []string `gorm:"type:text[]" json:"source,omitempty"`
Language []string `gorm:"type:text[]" json:"language,omitempty"`
Relation []string `gorm:"type:text[]" json:"relation,omitempty"`
Coverage []string `gorm:"type:text[]" json:"coverage,omitempty"`
Rights []string `gorm:"type:text[]" json:"rights,omitempty"`
}
type ITunesFeedExtension struct {
gorm.Model
Author string `json:"author,omitempty"`
Block string `json:"block,omitempty"`
Categories []*ITunesCategory `gorm:"many2many:feed_itunes_categories;" json:"categories,omitempty"`
Explicit string `json:"explicit,omitempty"`
Keywords string `json:"keywords,omitempty"`
Owner *ITunesOwner `gorm:"foreignKey:ID" json:"owner,omitempty"`
Subtitle string `json:"subtitle,omitempty"`
Summary string `json:"summary,omitempty"`
Image string `json:"image,omitempty"`
Complete string `json:"complete,omitempty"`
NewFeedURL string `json:"newFeedUrl,omitempty"`
Type string `json:"type,omitempty"`
}
type ITunesItemExtension struct {
gorm.Model
Author string `json:"author,omitempty"`
Block string `json:"block,omitempty"`
Duration string `json:"duration,omitempty"`
Explicit string `json:"explicit,omitempty"`
Keywords string `json:"keywords,omitempty"`
Subtitle string `json:"subtitle,omitempty"`
Summary string `json:"summary,omitempty"`
Image string `json:"image,omitempty"`
IsClosedCaptioned string `json:"isClosedCaptioned,omitempty"`
Episode string `json:"episode,omitempty"`
Season string `json:"season,omitempty"`
Order string `json:"order,omitempty"`
EpisodeType string `json:"episodeType,omitempty"`
}
type ITunesCategory struct {
gorm.Model
Text string `json:"text,omitempty"`
Subcategory *ITunesCategory `gorm:"many2many:feed_itunes_categories;" json:"subcategory,omitempty"`
}
func (ITunesCategory) TableName() string {
return "feed_itunes_categories"
}
type ITunesOwner struct {
gorm.Model
Email string `json:"email,omitempty"`
Name string `json:"name,omitempty"`
}
type Extensions map[string]map[string][]Extension
type Extension struct {
gorm.Model
Name string `json:"name"`
Value string `json:"value"`
Attrs map[string]string `gorm:"type:json" json:"attrs"`
Children map[string][]Extension `gorm:"type:json" json:"children"`
}