61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package models
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type User struct {
|
|
ID string `json:"id"`
|
|
Provider string `json:"provider"` // "webcontrol" | "google"
|
|
ProviderID string `json:"provider_id"`
|
|
Email string `json:"email"`
|
|
Name string `json:"name"`
|
|
AvatarURL string `json:"avatar_url"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type Session struct {
|
|
Token string `json:"token"`
|
|
UserID *string `json:"user_id"`
|
|
IsGuest bool `json:"is_guest"`
|
|
GuestID string `json:"guest_id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
ExpiresAt time.Time `json:"expires_at"`
|
|
User *User `json:"user,omitempty"`
|
|
}
|
|
|
|
type Share struct {
|
|
ID string `json:"id"`
|
|
UserID *string `json:"user_id"`
|
|
UserDisplay string `json:"user_display"`
|
|
IsGuest bool `json:"is_guest"`
|
|
Type string `json:"type"` // "file" | "text"
|
|
Title string `json:"title"`
|
|
StoredPath string `json:"stored_path"`
|
|
FileSize int64 `json:"file_size"`
|
|
MimeType string `json:"mime_type"`
|
|
TextContent string `json:"text_content"`
|
|
ViewsCount int `json:"views_count"`
|
|
DownloadsCount int `json:"downloads_count"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
ExpiresAt *time.Time `json:"expires_at"` // NULL si registrado, NOW+24h si guest
|
|
}
|
|
|
|
func (s *Share) FormattedSize() string {
|
|
if s.FileSize == 0 {
|
|
return "0 B"
|
|
}
|
|
const unit = 1024
|
|
if s.FileSize < unit {
|
|
return fmt.Sprintf("%d B", s.FileSize)
|
|
}
|
|
div, exp := int64(unit), 0
|
|
for n := s.FileSize / unit; n >= unit; n /= unit {
|
|
div *= unit
|
|
exp++
|
|
}
|
|
units := []string{"KB", "MB", "GB", "TB"}
|
|
return fmt.Sprintf("%.1f %s", float64(s.FileSize)/float64(div), units[exp])
|
|
}
|