From 6ad0b9d46718cca282c31b9fa30797c5ecc65878 Mon Sep 17 00:00:00 2001 From: Gisle Aune Date: Wed, 7 Oct 2020 20:33:56 +0200 Subject: [PATCH] fix character service not refreshing logs. --- services/characters.go | 30 ++++++++++++++++++++++++++++++ services/services.go | 2 ++ 2 files changed, 32 insertions(+) diff --git a/services/characters.go b/services/characters.go index b0e36ab..aeea830 100644 --- a/services/characters.go +++ b/services/characters.go @@ -7,8 +7,11 @@ import ( "git.aiterp.net/rpdata/api/models/changekeys" "git.aiterp.net/rpdata/api/repositories" "git.aiterp.net/rpdata/api/services/loaders" + "log" "sort" "strings" + "sync/atomic" + "time" ) type CharacterService struct { @@ -16,6 +19,9 @@ type CharacterService struct { loader *loaders.CharacterLoader changeService *ChangeService authService *AuthService + logService *LogService + + refreshSoftLock uint32 } // Find uses the loader to find the character by the ID. @@ -61,6 +67,8 @@ func (s *CharacterService) List(ctx context.Context, filter models.CharacterFilt return characters, nil } + go s.refreshLogs() + return s.characters.List(ctx, filter) } @@ -108,6 +116,8 @@ func (s *CharacterService) Create(ctx context.Context, nick, name, shortName, au s.changeService.Submit(ctx, "Character", "add", true, changekeys.Listed(character), character) + go s.refreshLogs() + return character, nil } @@ -160,6 +170,8 @@ func (s *CharacterService) AddNick(ctx context.Context, id string, nick string) s.changeService.Submit(ctx, "Character", "edit", true, changekeys.Listed(character), character) + go s.refreshLogs() + return character, nil } @@ -184,6 +196,8 @@ func (s *CharacterService) RemoveNick(ctx context.Context, id string, nick strin s.changeService.Submit(ctx, "Character", "edit", true, changekeys.Listed(character), character) + go s.refreshLogs() + return character, nil } @@ -207,5 +221,21 @@ func (s *CharacterService) Delete(ctx context.Context, id string) (*models.Chara s.changeService.Submit(ctx, "Character", "remove", true, changekeys.Listed(character), character) + go s.refreshLogs() + return character, nil } + +func (s *CharacterService) refreshLogs() { + if !atomic.CompareAndSwapUint32(&s.refreshSoftLock, 0, 1) { + return + } + time.Sleep(time.Second * 60) + atomic.StoreUint32(&s.refreshSoftLock, 0) + + err := s.logService.RefreshAllLogCharacters(context.Background()) + if err != nil { + log.Println("Failed to refersh log characters:", err) + return + } +} diff --git a/services/services.go b/services/services.go index c100bb3..5b6fd1d 100644 --- a/services/services.go +++ b/services/services.go @@ -67,5 +67,7 @@ func NewBundle(db database.Database, spaceClient *space.Client) *Bundle { authService: bundle.Auth, } + bundle.Characters.logService = bundle.Logs + return bundle }