Skip to content

Commit 56c0c00

Browse files
committed
修复可删除唯一团队管理员的问题
1 parent 0424165 commit 56c0c00

4 files changed

Lines changed: 41 additions & 28 deletions

File tree

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,5 @@ require (
6565
gopkg.in/yaml.v2 v2.4.0 // indirect
6666
gorm.io/driver/mysql v1.5.2 // indirect
6767
)
68+
69+
replace github.com/eolinker/ap-account => ../../eolinker/ap-account

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/r
2323
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
2424
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
2525
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
26-
github.com/eolinker/ap-account v1.0.8 h1:HDU7WdxWu7HU8zBJc8z2itbfh89KrFfXwJHP/WtGG3Q=
27-
github.com/eolinker/ap-account v1.0.8/go.mod h1:5lsZwkQfnHO5YJ3Cu6X1PZwZ0gbmJBUcix0hxG8aEsY=
2826
github.com/eolinker/eosc v0.17.3 h1:sr2yT+v/AsqEdciRaaZZj0zL9pTufR5RvDW6+65hraQ=
2927
github.com/eolinker/eosc v0.17.3/go.mod h1:xgq816hpanlMXFtZw7Ztdctb1eEk9UPHchY4NfFO6Cw=
3028
github.com/eolinker/go-common v1.0.2 h1:rGxcrDdHr+mtMHVPdz3tx7oOsKLo0Msy6W0U1ZNsXaQ=

module/my-team/dto/output.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,12 +67,13 @@ type Member struct {
6767
IsDelete bool `json:"is_delete"`
6868
}
6969

70-
func ToMember(model *team_member.Member, roles ...string) *Member {
71-
70+
func ToMember(model *team_member.Member, userId string, roles ...string) *Member {
71+
7272
return &Member{
7373
User: auto.UUID(model.UID),
7474
Roles: auto.List(roles),
7575
AttachTime: auto.TimeLabel(model.CreateTime),
76+
IsDelete: userId != model.UID,
7677
}
7778
}
7879

module/my-team/iml.go

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,21 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
7+
88
"github.com/eolinker/ap-account/service/role"
9-
9+
1010
"gorm.io/gorm"
11-
11+
1212
department_member "github.com/eolinker/ap-account/service/department-member"
1313
"github.com/eolinker/go-common/auto"
14-
14+
1515
"github.com/eolinker/ap-account/service/user"
16-
16+
1717
"github.com/eolinker/go-common/store"
18-
18+
1919
"github.com/APIParkLab/APIPark/service/service"
2020
team_member "github.com/APIParkLab/APIPark/service/team-member"
21-
21+
2222
team_dto "github.com/APIParkLab/APIPark/module/my-team/dto"
2323
"github.com/APIParkLab/APIPark/service/team"
2424
"github.com/eolinker/go-common/utils"
@@ -44,11 +44,15 @@ func (m *imlTeamModule) UpdateMemberRole(ctx context.Context, id string, input *
4444
if err != nil {
4545
return err
4646
}
47+
supperRole, err := m.roleService.GetSupperRole(ctx, role.GroupTeam)
48+
if err != nil {
49+
return err
50+
}
4751
return m.transaction.Transaction(ctx, func(ctx context.Context) error {
4852
if len(input.Roles) < 1 {
4953
return errors.New("at least one role")
5054
}
51-
55+
5256
err = m.roleMemberService.RemoveUserRole(ctx, role.TeamTarget(id), input.Users...)
5357
if err != nil {
5458
return err
@@ -65,6 +69,14 @@ func (m *imlTeamModule) UpdateMemberRole(ctx context.Context, id string, input *
6569
}
6670
}
6771
}
72+
73+
count, err := m.roleMemberService.CountByRole(ctx, role.TeamTarget(id), supperRole.Id)
74+
if err != nil {
75+
return err
76+
}
77+
if count < 1 {
78+
return fmt.Errorf("role(%s) must have at least one member", supperRole.Name)
79+
}
6880
return nil
6981
})
7082
}
@@ -74,7 +86,7 @@ func (m *imlTeamModule) GetTeam(ctx context.Context, id string) (*team_dto.Team,
7486
if err != nil {
7587
return nil, err
7688
}
77-
89+
7890
return &team_dto.Team{
7991
Id: tv.Id,
8092
Name: tv.Name,
@@ -110,7 +122,7 @@ func (m *imlTeamModule) Search(ctx context.Context, keyword string) ([]*team_dto
110122
if err != nil {
111123
return nil, err
112124
}
113-
125+
114126
outList := make([]*team_dto.Item, 0, len(list))
115127
for _, v := range list {
116128
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
138150
Description: input.Description,
139151
})
140152
})
141-
153+
142154
if err != nil {
143155
return nil, err
144156
}
@@ -161,7 +173,7 @@ func (m *imlTeamModule) SimpleTeams(ctx context.Context, keyword string) ([]*tea
161173
if err != nil {
162174
return nil, err
163175
}
164-
176+
165177
projects, err := m.serviceService.Search(ctx, "", map[string]interface{}{
166178
"team": teamIDs,
167179
})
@@ -181,7 +193,7 @@ func (m *imlTeamModule) SimpleTeams(ctx context.Context, keyword string) ([]*tea
181193
appCount[p.Team]++
182194
}
183195
}
184-
196+
185197
outList := utils.SliceToSlice(list, func(s *team.Team) *team_dto.SimpleTeam {
186198
return &team_dto.SimpleTeam{
187199
Id: s.Id,
@@ -216,15 +228,15 @@ func (m *imlTeamModule) AddMember(ctx context.Context, id string, uuids ...strin
216228
}
217229
return nil
218230
})
219-
231+
220232
}
221233

222234
func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...string) error {
223235
_, err := m.teamService.Get(ctx, id)
224236
if err != nil {
225237
return err
226238
}
227-
239+
228240
supperRole, err := m.roleService.GetSupperRole(ctx, role.GroupTeam)
229241
if err != nil {
230242
return err
@@ -244,20 +256,20 @@ func (m *imlTeamModule) RemoveMember(ctx context.Context, id string, uuids ...st
244256
supperRoleCount++
245257
}
246258
}
247-
259+
248260
if supperRoleCount == int(count) {
249261
return errors.New("can not delete all team admin")
250262
}
251263
}
252-
264+
253265
return m.transaction.Transaction(ctx, func(ctx context.Context) error {
254266
err = m.roleMemberService.RemoveUserRole(ctx, role.TeamTarget(id), uuids...)
255267
if err != nil {
256268
return err
257269
}
258270
return m.teamMemberService.RemoveMemberFrom(ctx, id, uuids...)
259271
})
260-
272+
261273
}
262274

263275
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)
286298
roleMemberMap := utils.SliceToMapArrayO(roleMembers, func(r *role.Member) (string, string) {
287299
return r.User, r.Role
288300
})
289-
301+
uId := utils.UserId(ctx)
290302
out := make([]*team_dto.Member, 0, len(members))
291303
for _, member := range members {
292-
out = append(out, team_dto.ToMember(member, roleMemberMap[member.UID]...))
304+
out = append(out, team_dto.ToMember(member, uId, roleMemberMap[member.UID]...))
293305
}
294-
306+
295307
return out, nil
296308
}
297309

@@ -331,20 +343,20 @@ func (m *imlTeamModule) SimpleMembers(ctx context.Context, id string, keyword st
331343
}
332344
departmentMemberMap[member.UID] = append(departmentMemberMap[member.UID], member.Come)
333345
}
334-
346+
335347
out := make([]*team_dto.SimpleMember, 0, len(teamMembers))
336348
for _, member := range teamMembers {
337349
u, ok := userMap[member.UID]
338350
if !ok {
339351
continue
340352
}
341-
353+
342354
out = append(out, &team_dto.SimpleMember{
343355
User: auto.UUID(u.UID),
344356
Mail: u.Email,
345357
Department: auto.List(departmentMemberMap[member.UID]),
346358
})
347359
}
348-
360+
349361
return out, nil
350362
}

0 commit comments

Comments
 (0)