package watchdog import ( "log/slog" "orbits-server/internal/server/bootstrap" "orbits-server/internal/server/database" "orbits-server/internal/shared/utility" "os" "path/filepath" "gorm.io/gorm" ) func applyFS(env bootstrap.Environment, db *gorm.DB, fsOrphans []string) { for _, fp := range fsOrphans { switch env.WatchdogSyncMode { case "sync": f, err := os.Open(fp) if err != nil { continue } func() { defer f.Close() fileData, err := database.BuildFileRecord( f, filepath.Base(fp), env.ContentDirectory, ) if err != nil { return } database.CreateFile(db, fileData) os.Rename(fp, fileData.FilePath) }() case "strict": utility.RemoveFile(fp) case "dry": slog.Debug("dry mode", "file", fp) } } } func applyDB(db *gorm.DB, dbOrphans []database.File) { for _, f := range dbOrphans { err := database.DeleteFileByID(db, f.ID) if err != nil { slog.Error("failed to apply database measures", "error", err) } } }