63 lines
1.3 KiB
Go
63 lines
1.3 KiB
Go
package database
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
"path"
|
|
"time"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
"github.com/robfig/cron/v3"
|
|
"github.com/spf13/viper"
|
|
"gopkg.in/guregu/null.v4"
|
|
|
|
// Dialects for gorm
|
|
_ "github.com/jinzhu/gorm/dialects/postgres"
|
|
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
|
)
|
|
|
|
// Db is the open Database
|
|
var Db *gorm.DB
|
|
|
|
// URL defines the structure of a shortened URL
|
|
type URL struct {
|
|
CreatedAt time.Time
|
|
UpdatedAt time.Time
|
|
|
|
Short null.String `gorm:"primary_key;unique_index:short_url;not null"`
|
|
Long null.String `gorm:"unique"`
|
|
Hits null.Int
|
|
|
|
FileName null.String `gorm:"default:NULL"`
|
|
FileSize null.Int `gorm:"default:NULL"`
|
|
FileHash null.String `gorm:"default:NULL"`
|
|
FileDelete null.Time `gorm:"default:NULL"`
|
|
}
|
|
|
|
// InitDb opens a database connection and runs the auto migration
|
|
func InitDb() {
|
|
var err error
|
|
Db, err = gorm.Open(viper.GetString("DBType"), viper.GetString("DBConnection"))
|
|
if err != nil {
|
|
log.Fatal("Could not open database:", err)
|
|
}
|
|
if os.Getenv("GIN_MODE") != "release" {
|
|
Db.LogMode(true)
|
|
}
|
|
|
|
Db.AutoMigrate(&URL{})
|
|
|
|
c := cron.New()
|
|
c.AddFunc("@daily", deleteOldFiles)
|
|
}
|
|
|
|
func deleteOldFiles() {
|
|
var URLs []URL
|
|
Db.Find(&URLs, "file_delete < NOW()")
|
|
for _, URL := range URLs {
|
|
file := path.Join(viper.GetString("FileFolder"), URL.FileName.String)
|
|
os.Remove(file)
|
|
Db.Delete(&URL)
|
|
}
|
|
}
|