package services import ( "github.com/muety/wakapi/config" "sync" "github.com/jinzhu/gorm" "github.com/muety/wakapi/models" ) type AliasService struct { Config *config.Config Db *gorm.DB } func NewAliasService(db *gorm.DB) *AliasService { return &AliasService{ Config: config.Get(), Db: db, } } var userAliases sync.Map func (srv *AliasService) LoadUserAliases(userId string) error { var aliases []*models.Alias if err := srv.Db. Where(&models.Alias{UserID: userId}). Find(&aliases).Error; err != nil { return err } userAliases.Store(userId, aliases) return nil } func (srv *AliasService) GetAliasOrDefault(userId string, summaryType uint8, value string) (string, error) { if !srv.IsInitialized(userId) { if err := srv.LoadUserAliases(userId); err != nil { return "", err } } aliases, _ := userAliases.Load(userId) for _, a := range aliases.([]*models.Alias) { if a.Type == summaryType && a.Value == value { return a.Key, nil } } return value, nil } func (srv *AliasService) IsInitialized(userId string) bool { if _, ok := userAliases.Load(userId); ok { return true } return false }