init
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
package galleries
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
const (
|
||||
StatusDraft = "draft"
|
||||
StatusPublished = "published"
|
||||
StatusArchived = "archived"
|
||||
)
|
||||
|
||||
type GalleryRecord struct {
|
||||
ID uuid.UUID
|
||||
UserID uuid.UUID
|
||||
Slug string
|
||||
Title string
|
||||
ClientName string
|
||||
Description string
|
||||
Status string
|
||||
PasswordHash string
|
||||
DownloadsEnabled bool
|
||||
FavoritesEnabled bool
|
||||
DownloadAllEnabled bool
|
||||
WatermarkEnabled bool
|
||||
ExpiresAt string
|
||||
CoverMediaID string
|
||||
ThemeConfig json.RawMessage
|
||||
BrandingConfig json.RawMessage
|
||||
CreatedAt string
|
||||
UpdatedAt string
|
||||
PublishedAt string
|
||||
}
|
||||
|
||||
type Summary struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
Slug string `json:"slug"`
|
||||
Title string `json:"title"`
|
||||
ClientName string `json:"clientName"`
|
||||
Description string `json:"description"`
|
||||
Status string `json:"status"`
|
||||
DownloadsEnabled bool `json:"downloadsEnabled"`
|
||||
FavoritesEnabled bool `json:"favoritesEnabled"`
|
||||
DownloadAllEnabled bool `json:"downloadAllEnabled"`
|
||||
WatermarkEnabled bool `json:"watermarkEnabled"`
|
||||
ExpiresAt string `json:"expiresAt,omitempty"`
|
||||
CoverMediaID string `json:"coverMediaId,omitempty"`
|
||||
CoverURL string `json:"coverUrl,omitempty"`
|
||||
ThemeConfig json.RawMessage `json:"themeConfig"`
|
||||
BrandingConfig json.RawMessage `json:"brandingConfig"`
|
||||
CreatedAt string `json:"createdAt"`
|
||||
PublishedAt string `json:"publishedAt,omitempty"`
|
||||
PhotoCount int `json:"photoCount"`
|
||||
VideoCount int `json:"videoCount"`
|
||||
TotalBytes int64 `json:"totalBytes"`
|
||||
}
|
||||
|
||||
type UpdateInput struct {
|
||||
Title string
|
||||
ClientName string
|
||||
Description string
|
||||
PasswordHash *string
|
||||
ClearPassword bool
|
||||
DownloadsEnabled bool
|
||||
FavoritesEnabled bool
|
||||
DownloadAllEnabled bool
|
||||
WatermarkEnabled bool
|
||||
ExpiresAt *string
|
||||
CoverMediaID *string
|
||||
ThemeConfig json.RawMessage
|
||||
BrandingConfig json.RawMessage
|
||||
}
|
||||
|
||||
func (g GalleryRecord) IsExpired() bool {
|
||||
if strings.TrimSpace(g.ExpiresAt) == "" {
|
||||
return false
|
||||
}
|
||||
value := strings.TrimSpace(g.ExpiresAt)
|
||||
layouts := []string{
|
||||
time.RFC3339Nano,
|
||||
"2006-01-02 15:04:05-07:00",
|
||||
"2006-01-02 15:04:05-07",
|
||||
"2006-01-02 15:04:05",
|
||||
}
|
||||
var parsed time.Time
|
||||
var err error
|
||||
for _, layout := range layouts {
|
||||
parsed, err = time.Parse(layout, value)
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return !time.Now().Before(parsed)
|
||||
}
|
||||
|
||||
func (g GalleryRecord) ToSummary(photoCount, videoCount int, totalBytes int64) Summary {
|
||||
return Summary{
|
||||
ID: g.ID,
|
||||
Slug: g.Slug,
|
||||
Title: g.Title,
|
||||
ClientName: g.ClientName,
|
||||
Description: g.Description,
|
||||
Status: g.Status,
|
||||
DownloadsEnabled: g.DownloadsEnabled,
|
||||
FavoritesEnabled: g.FavoritesEnabled,
|
||||
DownloadAllEnabled: g.DownloadAllEnabled,
|
||||
WatermarkEnabled: g.WatermarkEnabled,
|
||||
ExpiresAt: g.ExpiresAt,
|
||||
CoverMediaID: g.CoverMediaID,
|
||||
ThemeConfig: g.ThemeConfig,
|
||||
BrandingConfig: g.BrandingConfig,
|
||||
CreatedAt: g.CreatedAt,
|
||||
PublishedAt: g.PublishedAt,
|
||||
PhotoCount: photoCount,
|
||||
VideoCount: videoCount,
|
||||
TotalBytes: totalBytes,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user