feat: Users API, ownership transfer and removal of the legacy role string

This commit is contained in:
Florian Sylvain committed 2026-10-27 03:08:15 +01:00
1 parent 094df63a7f
commit 80f7037d3a
124 files changed
+4644 -824

No files matched your search

+52 -14
View File
@@ -16,6 +16,7 @@ type mockRoleRepo struct {
nextID uint32
fail failSwitch
users *mockUserRepo
invites *inviteFakeRepo
calls map[string]int
beforeSave func()
}
@@ -127,18 +128,47 @@ func (m *mockRoleRepo) Save(saved role.Role) (role.Role, error) {
}
func (m *mockRoleRepo) memberCount(roleID uint32) int {
if m.users == nil {
return 0
}
count := 0
for _, member := range m.users.users {
if member.RoleID == roleID {
count++
if m.users != nil {
for _, member := range m.users.users {
if member.RoleID == roleID {
count++
}
}
}
if m.invites != nil {
for _, pending := range m.invites.invites {
if pending.RoleID == roleID && pending.AcceptedAt == nil {
count++
}
}
}
return count
}
func (m *mockRoleRepo) MemberCounts() (map[uint32]int, error) {
m.calls["MemberCounts"]++
if err := m.fail.trigger("MemberCounts"); err != nil {
return nil, err
}
counts := map[uint32]int{}
if m.users != nil {
for _, member := range m.users.users {
if member.RoleID != 0 {
counts[member.RoleID]++
}
}
}
if m.invites != nil {
for _, pending := range m.invites.invites {
if pending.RoleID != 0 && pending.AcceptedAt == nil {
counts[pending.RoleID]++
}
}
}
return counts, nil
}
func (m *mockRoleRepo) Delete(id uint32) error {
m.calls["Delete"]++
if err := m.fail.trigger("Delete"); err != nil {
@@ -159,15 +189,23 @@ func (m *mockRoleRepo) ReassignMembers(from uint32, to uint32) (int, error) {
if err := m.fail.trigger("ReassignMembers"); err != nil {
return 0, err
}
if m.users == nil {
return 0, nil
}
moved := 0
for id, member := range m.users.users {
if member.RoleID == from {
member.RoleID = to
m.users.users[id] = member
moved++
if m.users != nil {
for id, member := range m.users.users {
if member.RoleID == from {
member.RoleID = to
m.users.users[id] = member
moved++
}
}
}
if m.invites != nil {
for id, pending := range m.invites.invites {
if pending.RoleID == from && pending.AcceptedAt == nil {
pending.RoleID = to
m.invites.invites[id] = pending
moved++
}
}
}
return moved, nil