172 lines
5.3 KiB
Go
172 lines
5.3 KiB
Go
package models
|
|
|
|
import (
|
|
"time"
|
|
)
|
|
|
|
// Device represents a user device
|
|
type Device struct {
|
|
ID int `json:"-"`
|
|
UserID int `json:"-"`
|
|
DeviceID string `json:"id"`
|
|
Caption string `json:"caption"`
|
|
Type string `json:"type"`
|
|
Subscriptions int `json:"subscriptions"`
|
|
CreatedAt time.Time `json:"-"`
|
|
LastUpdated time.Time `json:"-"`
|
|
}
|
|
|
|
// GpodderDevice represents a device from the GpodderDevices table
|
|
type GpodderDevice struct {
|
|
DeviceID int `json:"-"`
|
|
UserID int `json:"-"`
|
|
DeviceName string `json:"id"`
|
|
DeviceType string `json:"type"`
|
|
DeviceCaption string `json:"caption"`
|
|
IsDefault bool `json:"-"`
|
|
LastSync time.Time `json:"-"`
|
|
IsActive bool `json:"-"`
|
|
// Additional field for API responses
|
|
Subscriptions int `json:"subscriptions"`
|
|
}
|
|
|
|
// Subscription represents a podcast subscription
|
|
type Subscription struct {
|
|
SubscriptionID int `json:"-"`
|
|
UserID int `json:"-"`
|
|
DeviceID int `json:"-"`
|
|
PodcastURL string `json:"url"`
|
|
Action string `json:"-"`
|
|
Timestamp int64 `json:"-"`
|
|
}
|
|
|
|
// SubscriptionChange represents a change to subscriptions
|
|
type SubscriptionChange struct {
|
|
Add []string `json:"add"`
|
|
Remove []string `json:"remove"`
|
|
}
|
|
|
|
// SubscriptionResponse represents a response to subscription change request
|
|
type SubscriptionResponse struct {
|
|
Add []string `json:"add"`
|
|
Remove []string `json:"remove"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
UpdateURLs [][]string `json:"update_urls"` // Removed omitempty to ensure field is always present
|
|
}
|
|
|
|
// EpisodeAction represents an action performed on an episode
|
|
// First, create a struct for the JSON request format
|
|
type EpisodeActionRequest struct {
|
|
Actions []EpisodeAction `json:"actions"`
|
|
}
|
|
|
|
// Then modify the EpisodeAction struct to use a flexible type for timestamp
|
|
type EpisodeAction struct {
|
|
ActionID int `json:"-"`
|
|
UserID int `json:"-"`
|
|
DeviceID int `json:"-"`
|
|
Podcast string `json:"podcast"`
|
|
Episode string `json:"episode"`
|
|
Device string `json:"device,omitempty"`
|
|
Action string `json:"action"`
|
|
Timestamp interface{} `json:"timestamp"` // Accept any type
|
|
Started *int `json:"started,omitempty"`
|
|
Position *int `json:"position,omitempty"`
|
|
Total *int `json:"total,omitempty"`
|
|
}
|
|
|
|
// EpisodeActionResponse represents a response to episode action upload
|
|
type EpisodeActionResponse struct {
|
|
Timestamp int64 `json:"timestamp"`
|
|
UpdateURLs [][]string `json:"update_urls"` // Removed omitempty
|
|
}
|
|
|
|
// EpisodeActionsResponse represents a response for episode actions retrieval
|
|
type EpisodeActionsResponse struct {
|
|
Actions []EpisodeAction `json:"actions"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
}
|
|
|
|
// PodcastList represents a user's podcast list
|
|
type PodcastList struct {
|
|
ListID int `json:"-"`
|
|
UserID int `json:"-"`
|
|
Name string `json:"name"`
|
|
Title string `json:"title"`
|
|
CreatedAt time.Time `json:"-"`
|
|
WebURL string `json:"web"`
|
|
Podcasts []Podcast `json:"-"`
|
|
}
|
|
|
|
// Podcast represents a podcast
|
|
type Podcast struct {
|
|
URL string `json:"url"`
|
|
Title string `json:"title,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
Website string `json:"website,omitempty"`
|
|
Subscribers int `json:"subscribers,omitempty"`
|
|
LogoURL string `json:"logo_url,omitempty"`
|
|
ScaledLogoURL string `json:"scaled_logo_url,omitempty"`
|
|
Author string `json:"author,omitempty"`
|
|
MygpoLink string `json:"mygpo_link,omitempty"`
|
|
}
|
|
|
|
// Episode represents a podcast episode
|
|
type Episode struct {
|
|
Title string `json:"title"`
|
|
URL string `json:"url"`
|
|
PodcastTitle string `json:"podcast_title"`
|
|
PodcastURL string `json:"podcast_url"`
|
|
Description string `json:"description"`
|
|
Website string `json:"website"`
|
|
Released string `json:"released"` // ISO 8601 format
|
|
MygpoLink string `json:"mygpo_link"`
|
|
}
|
|
|
|
// Setting represents a user setting
|
|
type Setting struct {
|
|
SettingID int `json:"-"`
|
|
UserID int `json:"-"`
|
|
Scope string `json:"-"`
|
|
DeviceID int `json:"-"`
|
|
PodcastURL string `json:"-"`
|
|
EpisodeURL string `json:"-"`
|
|
SettingKey string `json:"-"`
|
|
SettingValue string `json:"-"`
|
|
CreatedAt time.Time `json:"-"`
|
|
LastUpdated time.Time `json:"-"`
|
|
}
|
|
|
|
// SettingsRequest represents a settings update request
|
|
type SettingsRequest struct {
|
|
Set map[string]interface{} `json:"set"`
|
|
Remove []string `json:"remove"`
|
|
}
|
|
|
|
// Tag represents a tag
|
|
type Tag struct {
|
|
Title string `json:"title"`
|
|
Tag string `json:"tag"`
|
|
Usage int `json:"usage"`
|
|
}
|
|
|
|
// SyncDevicesResponse represents the sync status response
|
|
type SyncDevicesResponse struct {
|
|
Synchronized [][]string `json:"synchronized"`
|
|
NotSynchronized []string `json:"not-synchronized"`
|
|
}
|
|
|
|
// SyncDevicesRequest represents a sync status update request
|
|
type SyncDevicesRequest struct {
|
|
Synchronize [][]string `json:"synchronize"`
|
|
StopSynchronize []string `json:"stop-synchronize"`
|
|
}
|
|
|
|
// DeviceUpdateResponse represents a response to device updates request
|
|
type DeviceUpdateResponse struct {
|
|
Add []Podcast `json:"add"`
|
|
Remove []string `json:"remove"`
|
|
Updates []Episode `json:"updates"`
|
|
Timestamp int64 `json:"timestamp"`
|
|
}
|