修复可删除唯一团队管理员的问题

This commit is contained in:
Liujian
2024-08-16 17:59:04 +08:00
parent 0424165a2f
commit 56c0c00cba
4 changed files with 41 additions and 28 deletions
+2
View File
@@ -65,3 +65,5 @@ require (
gopkg.in/yaml.v2 v2.4.0 // indirect
gorm.io/driver/mysql v1.5.2 // indirect
)
replace github.com/eolinker/ap-account => ../../eolinker/ap-account
-2
View File
@@ -23,8 +23,6 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/eolinker/ap-account v1.0.8 h1:HDU7WdxWu7HU8zBJc8z2itbfh89KrFfXwJHP/WtGG3Q=
github.com/eolinker/ap-account v1.0.8/go.mod h1:5lsZwkQfnHO5YJ3Cu6X1PZwZ0gbmJBUcix0hxG8aEsY=
github.com/eolinker/eosc v0.17.3 h1:sr2yT+v/AsqEdciRaaZZj0zL9pTufR5RvDW6+65hraQ=
github.com/eolinker/eosc v0.17.3/go.mod h1:xgq816hpanlMXFtZw7Ztdctb1eEk9UPHchY4NfFO6Cw=
github.com/eolinker/go-common v1.0.2 h1:rGxcrDdHr+mtMHVPdz3tx7oOsKLo0Msy6W0U1ZNsXaQ=
+3 -2
View File
@@ -67,12 +67,13 @@ type Member struct {
IsDelete bool `json:"is_delete"`
}
func ToMember(model *team_member.Member, roles ...string) *Member {
func ToMember(model *team_member.Member, userId string, roles ...string) *Member {
return &Member{
User: auto.UUID(model.UID),
Roles: auto.List(roles),
AttachTime: auto.TimeLabel(model.CreateTime),
IsDelete: userId != model.UID,
}
}
+36 -24
View File
@@ -4,21 +4,21 @@ import (
"context"
"errors"
"fmt"
"github.com/eolinker/ap-account/service/role"
"gorm.io/gorm"
department_member "github.com/eolinker/ap-account/service/department-member"
"github.com/eolinker/go-common/auto"
"github.com/eolinker/ap-account/service/user"
"github.com/eolinker/go-common/store"
"github.com/APIParkLab/APIPark/service/service"
team_member "github.com/APIParkLab/APIPark/service/team-member"
team_dto "github.com/APIParkLab/APIPark/module/my-team/dto"
"github.com/APIParkLab/APIPark/service/team"
"github.com/eolinker/go-common/utils"
@@ -44,11 +44,15 @@ func (m *imlTeamModule) UpdateMemberRole(ctx context.Context, id string, input *
if err != nil {
return err
}
supperRole, err := m.roleService.GetSupperRole(ctx, role.GroupTeam)
if err != nil {
return err
}
return m.transaction.Transaction(ctx, func(ctx context.Context) error {
if len(input.Roles) < 1 {
return errors.New("at least one role")
}
err = m.roleMemberService.RemoveUserRole(ctx, role.TeamTarget(id), input.Users...)
if err != nil {
return err
@@ -65,6 +69,14 @@ func (m *imlTeamModule) UpdateMemberRole(ctx context.Context, id string, input *
}
}
}
count, err := m.roleMemberService.CountByRole(ctx, role.TeamTarget(id), supperRole.Id)
if err != nil {
return err
}
if count < 1 {
return fmt.Errorf("role(%s) must have at least one member", supperRole.Name)
}
return nil
})
}
@@ -74,7 +86,7 @@ func (m *imlTeamModule) GetTeam(ctx context.Context, id string) (*team_dto.Team,
if err != nil {
return nil, err
}
return &team_dto.Team{
Id: tv.Id,
Name: tv.Name,
@@ -110,7 +122,7 @@ func (m *imlTeamModule) Search(ctx context.Context, keyword string) ([]*team_dto
if err != nil {
return nil, err
}
outList := make([]*team_dto.Item, 0, len(list))
for _, v := range list {
outList = append(outList, team_dto.ToItem(v, serviceNumMap[v.Id], appNumMap[v.Id]))
@@ -138,7 +150,7 @@ func (m *imlTeamModule) Edit(ctx context.Context, id string, input *team_dto.Edi
Description: input.Description,
})
})
if err != nil {
return nil, err
}
@@ -161,7 +173,7 @@ func (m *imlTeamModule) SimpleTeams(ctx context.Context, keyword string) ([]*tea
if err != nil {
return nil, err
}
projects, err := m.serviceService.Search(ctx, "", map[string]interface{}{
"team": teamIDs,
})
@@ -181,7 +193,7 @@ func (m *imlTeamModule) SimpleTeams(ctx context.Context, keyword string) ([]*tea
appCount[p.Team]++
}
}
outList := utils.SliceToSlice(list, func(s *team.Team) *team_dto.SimpleTeam {
return &team_dto.SimpleTeam{
Id: s.Id,
@@ -216,7 +228,7 @@ func (m *imlTeamModule) AddMember(ctx context.Context, id string, uuids ...strin
}
return nil
})
}
func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...string) error {
@@ -224,7 +236,7 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
if err != nil {
return err
}
supperRole, err := m.roleService.GetSupperRole(ctx, role.GroupTeam)
if err != nil {
return err
@@ -244,12 +256,12 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
supperRoleCount++
}
}
if supperRoleCount == int(count) {
return errors.New("can not delete all team admin")
}
}
return m.transaction.Transaction(ctx, func(ctx context.Context) error {
err = m.roleMemberService.RemoveUserRole(ctx, role.TeamTarget(id), uuids...)
if err != nil {
@@ -257,7 +269,7 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
}
return m.teamMemberService.RemoveMemberFrom(ctx, id, uuids...)
})
}
func (m *imlTeamModule) Members(ctx context.Context, id string, keyword string) ([]*team_dto.Member, error) {
@@ -286,12 +298,12 @@ func (m *imlTeamModule) Members(ctx context.Context, id string, keyword string)
roleMemberMap := utils.SliceToMapArrayO(roleMembers, func(r *role.Member) (string, string) {
return r.User, r.Role
})
uId := utils.UserId(ctx)
out := make([]*team_dto.Member, 0, len(members))
for _, member := range members {
out = append(out, team_dto.ToMember(member, roleMemberMap[member.UID]...))
out = append(out, team_dto.ToMember(member, uId, roleMemberMap[member.UID]...))
}
return out, nil
}
@@ -331,20 +343,20 @@ func (m *imlTeamModule) SimpleMembers(ctx context.Context, id string, keyword st
}
departmentMemberMap[member.UID] = append(departmentMemberMap[member.UID], member.Come)
}
out := make([]*team_dto.SimpleMember, 0, len(teamMembers))
for _, member := range teamMembers {
u, ok := userMap[member.UID]
if !ok {
continue
}
out = append(out, &team_dto.SimpleMember{
User: auto.UUID(u.UID),
Mail: u.Email,
Department: auto.List(departmentMemberMap[member.UID]),
})
}
return out, nil
}