added cargo files
This commit is contained in:
171
PinePods-0.8.2/gpodder-api/internal/models/models.go
Normal file
171
PinePods-0.8.2/gpodder-api/internal/models/models.go
Normal file
@@ -0,0 +1,171 @@
|
||||
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"`
|
||||
}
|
||||
Reference in New Issue
Block a user