mirror of
https://github.com/ente-io/ente.git
synced 2025-08-13 09:47:17 +00:00
Import museum
This commit is contained in:
40
server/pkg/controller/usercache/controller.go
Normal file
40
server/pkg/controller/usercache/controller.go
Normal file
@@ -0,0 +1,40 @@
|
||||
package usercache
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/ente-io/museum/ente/cache"
|
||||
bonus "github.com/ente-io/museum/ente/storagebonus"
|
||||
"github.com/ente-io/museum/pkg/repo"
|
||||
"github.com/ente-io/museum/pkg/repo/storagebonus"
|
||||
"github.com/ente-io/stacktrace"
|
||||
)
|
||||
|
||||
// Controller is the controller for the data cache.
|
||||
// It contains all the repositories that are used by the controller.
|
||||
// Avoid adding any direct dependencies to the other controller.
|
||||
type Controller struct {
|
||||
FileRepo *repo.FileRepository
|
||||
StoreBonusRepo *storagebonus.Repository
|
||||
UserCache *cache.UserCache
|
||||
}
|
||||
|
||||
func (c *Controller) GetActiveStorageBonus(ctx context.Context, userID int64) (*bonus.ActiveStorageBonus, error) {
|
||||
// Check if the value is present in the cache
|
||||
if bonus, ok := c.UserCache.GetBonus(userID); ok {
|
||||
// Cache hit, update the cache asynchronously
|
||||
go func() {
|
||||
_, _ = c.getAndCacheActiveStorageBonus(ctx, userID)
|
||||
}()
|
||||
return bonus, nil
|
||||
}
|
||||
return c.getAndCacheActiveStorageBonus(ctx, userID)
|
||||
}
|
||||
|
||||
func (c *Controller) getAndCacheActiveStorageBonus(ctx context.Context, userID int64) (*bonus.ActiveStorageBonus, error) {
|
||||
bonus, err := c.StoreBonusRepo.GetActiveStorageBonuses(ctx, userID)
|
||||
if err != nil {
|
||||
return nil, stacktrace.Propagate(err, "")
|
||||
}
|
||||
c.UserCache.SetBonus(userID, bonus)
|
||||
return bonus, nil
|
||||
}
|
Reference in New Issue
Block a user