package databag import ( "databag/internal/store" "os" "sync" ) var garbageSync sync.Mutex func garbageCollect(act *store.Account) { garbageSync.Lock() defer garbageSync.Unlock() // get all asset files dir := getStrConfigValue(CNFAssetPath, APPDefaultPath) + "/" + act.GUID files, err := os.ReadDir(dir) if err != nil { ErrMsg(err) return } // create map of all files list := make(map[string]bool) for _, file := range files { list[file.Name()] = false } // get all asset records var assets []store.Asset if err := store.DB.Where("account_id = ?", act.ID).Find(&assets).Error; err != nil { ErrMsg(err) return } // mark all referenced files for _, asset := range assets { list[asset.AssetID] = true } // delete any unreferenced file for id, set := range list { if !set { LogMsg("removing file asset " + act.GUID + "/" + id) if err := os.Remove(dir + "/" + id); err != nil { ErrMsg(err) } } } }