feat: custom content type icons, built-in types, user lookup
This commit is contained in:
1 parent
e6e088c963
commit
73a75d5cb9
31 files changed
+1611
-36
No files matched your search
@@ -0,0 +1,48 @@
|
||||
package useCases
|
||||
|
||||
import (
|
||||
"RenewCMS/internal/domain/user"
|
||||
"sort"
|
||||
)
|
||||
|
||||
type LookupUserNamesUseCase struct {
|
||||
users user.Repository
|
||||
}
|
||||
|
||||
type UserName struct {
|
||||
ID uint32
|
||||
DisplayName string
|
||||
}
|
||||
|
||||
func NewLookupUserNamesUseCase(users user.Repository) *LookupUserNamesUseCase {
|
||||
return &LookupUserNamesUseCase{users}
|
||||
}
|
||||
|
||||
func (u *LookupUserNamesUseCase) Lookup(ids []uint32) ([]UserName, error) {
|
||||
distinct := distinctIDs(ids)
|
||||
if len(distinct) == 0 || len(distinct) > user.MaxLookupIDs {
|
||||
return nil, user.ErrInvalidLookup
|
||||
}
|
||||
found, err := u.users.FindByIDs(distinct)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
sort.Slice(found, func(i, j int) bool { return found[i].ID < found[j].ID })
|
||||
names := make([]UserName, 0, len(found))
|
||||
for _, record := range found {
|
||||
names = append(names, UserName{ID: record.ID, DisplayName: record.NameOrUsername()})
|
||||
}
|
||||
return names, nil
|
||||
}
|
||||
|
||||
func distinctIDs(ids []uint32) []uint32 {
|
||||
seen := make(map[uint32]bool, len(ids))
|
||||
distinct := make([]uint32, 0, len(ids))
|
||||
for _, id := range ids {
|
||||
if !seen[id] {
|
||||
seen[id] = true
|
||||
distinct = append(distinct, id)
|
||||
}
|
||||
}
|
||||
return distinct
|
||||
}
|
||||
Reference in new issue
Block a user