feat(SPA): screen to manage API keys (PART 2/3)

This commit is contained in:
fsylvain committed 2026-10-05 00:05:12 +02:00
1 parent 844842fdae
commit 514a082c96
30 files changed
+3844 -83

No files matched your search

@@ -3,7 +3,9 @@ package useCases
import (
"RenewCMS/internal/domain/apikey"
"RenewCMS/internal/domain/user"
"errors"
"sort"
"strings"
"time"
)
@@ -14,8 +16,10 @@ type ListAPIKeysUseCase struct {
}
type APIKeyEntry struct {
Key apikey.APIKey
Status apikey.Status
Key apikey.APIKey
Status apikey.Status
CreatorName string
ListsCreator bool
}
func NewListAPIKeysUseCase(apiKeyRepository apikey.Repository, userRepository user.Repository, now func() time.Time) *ListAPIKeysUseCase {
@@ -40,14 +44,49 @@ func (l *ListAPIKeysUseCase) ListAPIKeys(requesterId uint32) ([]APIKeyEntry, err
return keys[i].CreatedAt.After(keys[j].CreatedAt)
})
creatorNames, err := l.creatorNamesFor(requester, keys)
if err != nil {
return nil, err
}
now := l.now()
entries := make([]APIKeyEntry, 0, len(keys))
for _, key := range keys {
entries = append(entries, APIKeyEntry{Key: key, Status: key.StatusAt(now)})
entries = append(entries, APIKeyEntry{Key: key, Status: key.StatusAt(now), CreatorName: creatorNames[key.UserID], ListsCreator: requester.Role == user.RoleOwner})
}
return entries, nil
}
func (l *ListAPIKeysUseCase) creatorNamesFor(requester user.User, keys []apikey.APIKey) (map[uint32]string, error) {
names := map[uint32]string{}
if requester.Role != user.RoleOwner {
return names, nil
}
names[requester.ID] = displayNameOrUsername(requester)
for _, key := range keys {
if _, resolved := names[key.UserID]; resolved {
continue
}
creator, err := l.userRepository.Get(key.UserID)
if errors.Is(err, user.ErrUserNotFound) {
names[key.UserID] = ""
continue
}
if err != nil {
return nil, err
}
names[key.UserID] = displayNameOrUsername(creator)
}
return names, nil
}
func displayNameOrUsername(account user.User) string {
if trimmed := strings.TrimSpace(account.DisplayName); trimmed != "" {
return trimmed
}
return account.Username
}
func (l *ListAPIKeysUseCase) keysVisibleTo(requester user.User) ([]apikey.APIKey, error) {
if requester.Role == user.RoleOwner {
return l.apiKeyRepository.ListAll()