70 lines
1.4 KiB
Go
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()
|
|
}
|
|
}
|