package entity import ( "fmt" "time" gc "github.com/patrickmn/go-cache" "github.com/photoprism/photoprism/pkg/clean" "github.com/photoprism/photoprism/pkg/rnd" ) var albumCache = gc.New(15*time.Minute, 15*time.Minute) // FlushAlbumCache resets the album cache. func FlushAlbumCache() { albumCache.Flush() } // CachedAlbumByUID returns an existing album or nil if not found. func CachedAlbumByUID(uid string) (m Album, err error) { // Valid album UID? if uid == "" || rnd.InvalidUID(uid, AlbumUID) { return m, fmt.Errorf("invalid album uid %s", clean.LogQuote(uid)) } // Cached? if cacheData, ok := albumCache.Get(uid); ok { log.Tracef("album: cache hit for %s", uid) return cacheData.(Album), nil } // Find in database. m = Album{} if r := Db().First(&m, "album_uid = ?", uid); r.RecordNotFound() { return m, fmt.Errorf("album not found") } else if r.Error != nil { return m, r.Error } else { albumCache.SetDefault(m.AlbumUID, m) return m, nil } }