Files
orbits/internal/server/watchdog/scanner.go
T
2026-04-29 23:38:43 +02:00

62 lines
1.1 KiB
Go

package watchdog
import (
"orbits-server/internal/server/bootstrap"
"orbits-server/internal/server/database"
"os"
"path/filepath"
"gorm.io/gorm"
)
func reconcile(fs map[string]struct{}, db map[string]database.File) Result {
r := Result{}
for path := range fs {
if _, ok := db[path]; !ok {
r.FSOrphans = append(r.FSOrphans, path)
}
}
for path, f := range db {
if _, ok := fs[path]; !ok {
r.DBOrphans = append(r.DBOrphans, f)
}
}
return r
}
func scanFS(env bootstrap.Environment) (map[string]struct{}, error) {
fsFiles, err := os.ReadDir(env.ContentDirectory)
if err != nil {
return nil, err
}
resp := make(map[string]struct{})
for _, f := range fsFiles {
if f.IsDir() {
continue
}
full := filepath.Join(env.ContentDirectory, f.Name())
resp[full] = struct{}{}
}
return resp, nil
}
func scanDB(db *gorm.DB) (map[string]database.File, error) {
files, err := database.ListFiles(db)
if err != nil {
return nil, err
}
resp := make(map[string]database.File)
for _, f := range files {
resp[f.FilePath] = f
}
return resp, nil
}