Files
ytdlp-site/models.go
2024-11-05 05:27:30 -07:00

70 lines
1.4 KiB
Go

package main
import (
"errors"
"fmt"
"time"
"ytdlp-site/originals"
"github.com/google/uuid"
)
type TempURL struct {
Token string `gorm:"uniqueIndex"`
FilePath string
ExpiresAt time.Time
}
func SetOriginalStatus(id uint, status originals.Status) error {
return db.Model(&originals.Original{}).Where("id = ?", id).Update("status", status).Error
}
func generateToken() string {
uuidObj := uuid.Must(uuid.NewV7())
return uuidObj.String()
}
func CreateTempURL(filePath string) (TempURL, error) {
token := generateToken()
expiration := time.Now().Add(24 * time.Hour)
tempURL := TempURL{
Token: token,
FilePath: filePath,
ExpiresAt: expiration,
}
if err := db.Create(&tempURL).Error; err != nil {
return TempURL{}, errors.New("failed to create temporary URL")
}
return tempURL, nil
}
func cleanupExpiredURLs() {
log.Debugln("cleanupExpiredURLs...")
result := db.Unscoped().Where("expires_at < ?", time.Now()).Delete(&TempURL{})
if result.Error != nil {
fmt.Printf("Error cleaning up expired URLs: %v\n", result.Error)
} else {
fmt.Printf("Cleaned up %d expired temporary URLs\n", result.RowsAffected)
}
}
func vacuumDatabase() {
if err := db.Exec("VACUUM").Error; err != nil {
log.Errorln(err)
}
}
func PeriodicCleanup() {
cleanupExpiredURLs()
vacuumDatabase()
ticker := time.NewTicker(1 * time.Hour)
for range ticker.C {
cleanupExpiredURLs()
vacuumDatabase()
}
}