mirror of
https://github.com/muety/wakapi.git
synced 2023-08-10 21:12:56 +03:00
Introduce entity aliases (unfinished).
This commit is contained in:
50
services/alias.go
Normal file
50
services/alias.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/n1try/wakapi/models"
|
||||
)
|
||||
|
||||
type AliasService struct {
|
||||
Config *models.Config
|
||||
Db *gorm.DB
|
||||
}
|
||||
|
||||
var userAliases map[string][]*models.Alias
|
||||
|
||||
func (srv *AliasService) InitUser(userId string) error {
|
||||
if userAliases == nil {
|
||||
userAliases = make(map[string][]*models.Alias)
|
||||
}
|
||||
|
||||
var aliases []*models.Alias
|
||||
if err := srv.Db.
|
||||
Where(&models.Alias{UserID: userId}).
|
||||
Find(&aliases).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
userAliases[userId] = aliases
|
||||
return nil
|
||||
}
|
||||
|
||||
func (srv *AliasService) GetAliasOrDefault(userId string, summaryType uint8, value string) (string, error) {
|
||||
if userAliases, ok := userAliases[userId]; ok {
|
||||
for _, a := range userAliases {
|
||||
if a.Type == summaryType && a.Value == value {
|
||||
return a.Key, nil
|
||||
}
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
return "", errors.New("User aliases not initialized")
|
||||
}
|
||||
|
||||
func (src *AliasService) IsInitialized(userId string) bool {
|
||||
if _, ok := userAliases[userId]; ok {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
@@ -12,6 +12,7 @@ type SummaryService struct {
|
||||
Config *models.Config
|
||||
Db *gorm.DB
|
||||
HeartbeatService *HeartbeatService
|
||||
AliasService *AliasService
|
||||
}
|
||||
|
||||
func (srv *SummaryService) GetSummary(from, to time.Time, user *models.User) (*models.Summary, error) {
|
||||
@@ -29,7 +30,7 @@ func (srv *SummaryService) GetSummary(from, to time.Time, user *models.User) (*m
|
||||
|
||||
c := make(chan models.SummaryItemContainer)
|
||||
for _, t := range types {
|
||||
go srv.aggregateBy(heartbeats, t, c)
|
||||
go srv.aggregateBy(heartbeats, t, user, c)
|
||||
}
|
||||
|
||||
for i := 0; i < len(types); i++ {
|
||||
@@ -60,7 +61,7 @@ func (srv *SummaryService) GetSummary(from, to time.Time, user *models.User) (*m
|
||||
return summary, nil
|
||||
}
|
||||
|
||||
func (srv *SummaryService) aggregateBy(heartbeats []*models.Heartbeat, summaryType uint8, c chan models.SummaryItemContainer) {
|
||||
func (srv *SummaryService) aggregateBy(heartbeats []*models.Heartbeat, summaryType uint8, user *models.User, c chan models.SummaryItemContainer) {
|
||||
durations := make(map[string]time.Duration)
|
||||
|
||||
for i, h := range heartbeats {
|
||||
@@ -80,6 +81,10 @@ func (srv *SummaryService) aggregateBy(heartbeats []*models.Heartbeat, summaryTy
|
||||
key = "unknown"
|
||||
}
|
||||
|
||||
if aliasedKey, err := srv.AliasService.GetAliasOrDefault(user.ID, summaryType, key); err == nil {
|
||||
key = aliasedKey
|
||||
}
|
||||
|
||||
if _, ok := durations[key]; !ok {
|
||||
durations[key] = time.Duration(0)
|
||||
}
|
||||
|
@@ -5,8 +5,6 @@ import (
|
||||
"github.com/n1try/wakapi/models"
|
||||
)
|
||||
|
||||
const TableUser = "user"
|
||||
|
||||
type UserService struct {
|
||||
Config *models.Config
|
||||
Db *gorm.DB
|
||||
|
Reference in New Issue
Block a user