Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update: delete subject template group when delete subject #286

Merged
merged 4 commits into from
Feb 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions pkg/database/dao/group_resource_policy.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,10 @@ func (m *groupResourcePolicyManager) BulkDeleteByGroupPKsWithTx(
tx *sqlx.Tx,
groupPKs []int64,
) error {
if len(groupPKs) == 0 {
return nil
}

sql := `DELETE FROM rbac_group_resource_policy WHERE group_pk IN (?)`
return database.SqlxDeleteWithTx(tx, sql, groupPKs)
}
Expand Down
24 changes: 12 additions & 12 deletions pkg/database/dao/mock/subject_group.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions pkg/database/dao/mock/subject_template_group.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 6 additions & 6 deletions pkg/database/dao/subject_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,8 @@ type SubjectGroupManager interface {
FilterGroupPKsHasMemberBeforeExpiredAt(groupPKs []int64, expiredAt int64) ([]int64, error)

BulkCreateWithTx(tx *sqlx.Tx, relations []SubjectRelation) error
BulkDeleteBySubjectPKs(tx *sqlx.Tx, subjectPKs []int64) error
BulkDeleteByGroupPKs(tx *sqlx.Tx, groupPKs []int64) error
BulkDeleteBySubjectPKsWithTx(tx *sqlx.Tx, subjectPKs []int64) error
BulkDeleteByGroupPKsWithTx(tx *sqlx.Tx, groupPKs []int64) error
BulkUpdateExpiredAtWithTx(tx *sqlx.Tx, relations []SubjectRelation) error

ListGroupMember(groupPK int64) ([]SubjectRelation, error)
Expand Down Expand Up @@ -352,16 +352,16 @@ func (m *subjectGroupManager) BulkCreateWithTx(tx *sqlx.Tx, relations []SubjectR
return m.bulkInsertWithTx(tx, relations)
}

// BulkDeleteBySubjectPKs ...
func (m *subjectGroupManager) BulkDeleteBySubjectPKs(tx *sqlx.Tx, subjectPKs []int64) error {
// BulkDeleteBySubjectPKsWithTx ...
func (m *subjectGroupManager) BulkDeleteBySubjectPKsWithTx(tx *sqlx.Tx, subjectPKs []int64) error {
if len(subjectPKs) == 0 {
return nil
}
return m.bulkDeleteBySubjectPKs(tx, subjectPKs)
}

// BulkDeleteByGroupPKs ...
func (m *subjectGroupManager) BulkDeleteByGroupPKs(tx *sqlx.Tx, groupPKs []int64) error {
// BulkDeleteByGroupPKsWithTx ...
func (m *subjectGroupManager) BulkDeleteByGroupPKsWithTx(tx *sqlx.Tx, groupPKs []int64) error {
if len(groupPKs) == 0 {
return nil
}
Expand Down
13 changes: 12 additions & 1 deletion pkg/database/dao/subject_template_group.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ type SubjectTemplateGroup struct {

type SubjectTemplateGroupManager interface {
GetTemplateGroupMemberCount(groupPK, templateID int64) (int64, error)
GetMaxExpiredAtBySubjectGroup(subjectPK, groupPK int64, excludeTemplateID int64) (int64, error)
ListPagingTemplateGroupMember(
groupPK, templateID int64,
limit, offset int64,
Expand All @@ -46,7 +47,7 @@ type SubjectTemplateGroupManager interface {
BulkUpdateExpiredAtWithTx(tx *sqlx.Tx, relations []SubjectTemplateGroup) error
BulkUpdateExpiredAtByRelationWithTx(tx *sqlx.Tx, relations []SubjectRelation) error
BulkDeleteWithTx(tx *sqlx.Tx, relations []SubjectTemplateGroup) error
GetMaxExpiredAtBySubjectGroup(subjectPK, groupPK int64, excludeTemplateID int64) (int64, error)
BulkDeleteBySubjectPKsWithTx(tx *sqlx.Tx, subjectPKs []int64) error
}

type subjectTemplateGroupManager struct {
Expand Down Expand Up @@ -235,3 +236,13 @@ func (m *subjectTemplateGroupManager) ListThinRelationWithMaxExpiredAtByGroupPK(

return relations, err
}

func (m *subjectTemplateGroupManager) BulkDeleteBySubjectPKsWithTx(tx *sqlx.Tx, subjectPKs []int64) error {
if len(subjectPKs) == 0 {
return nil
}

sql := `DELETE FROM subject_template_group
WHERE subject_pk in (?)`
return database.SqlxDeleteWithTx(tx, sql, subjectPKs)
}
14 changes: 12 additions & 2 deletions pkg/service/group.go
Original file line number Diff line number Diff line change
Expand Up @@ -879,7 +879,7 @@ func (l *groupService) BulkDeleteByGroupPKsWithTx(tx *sqlx.Tx, groupPKs []int64)
errorWrapf := errorx.NewLayerFunctionErrorWrapf(GroupSVC, "BulkDeleteByGroupPKsWithTx")

// 批量用户组删除成员关系 subjectRelation
err := l.manager.BulkDeleteByGroupPKs(tx, groupPKs)
err := l.manager.BulkDeleteByGroupPKsWithTx(tx, groupPKs)
if err != nil {
return errorWrapf(
err, "manager.BulkDeleteByGroupPKs group_pks=`%+v` fail", groupPKs)
Expand All @@ -893,12 +893,22 @@ func (l *groupService) BulkDeleteBySubjectPKsWithTx(tx *sqlx.Tx, subjectPKs []in
errorWrapf := errorx.NewLayerFunctionErrorWrapf(GroupSVC, "BulkDeleteBySubjectPKsWithTx")

// 批量其加入的用户组关系 subjectRelation
err := l.manager.BulkDeleteBySubjectPKs(tx, subjectPKs)
err := l.manager.BulkDeleteBySubjectPKsWithTx(tx, subjectPKs)
if err != nil {
return errorWrapf(
err, "manager.BulkDeleteBySubjectPKs subject_pks=`%+v` fail", subjectPKs)
}

// 批量删除subject template group
err = l.subjectTemplateGroupManager.BulkDeleteBySubjectPKsWithTx(tx, subjectPKs)
if err != nil {
return errorWrapf(
err,
"subjectTemplateGroupManager.BulkDeleteBySubjectPKsWithTx subjectPKs=`%+v` fail",
subjectPKs,
)
}

// 批量删除用户的subject system group
err = l.subjectSystemGroupManager.DeleteBySubjectPKsWithTx(tx, subjectPKs)
if err != nil {
Expand Down
48 changes: 41 additions & 7 deletions pkg/service/group_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ var _ = Describe("GroupService", func() {
It("manager.BulkDeleteBySubjectPKs fail", func() {
mockSubjectService := mock.NewMockSubjectGroupManager(ctl)

mockSubjectService.EXPECT().BulkDeleteBySubjectPKs(gomock.Any(), []int64{1, 2}).Return(
mockSubjectService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
errors.New("error"),
).AnyTimes()

Expand All @@ -94,10 +94,37 @@ var _ = Describe("GroupService", func() {
assert.Contains(GinkgoT(), err.Error(), "BulkDeleteBySubjectPKs")
})

It("manager.BulkDeleteBySubjectPKs fail", func() {
mockSubjectService := mock.NewMockSubjectGroupManager(ctl)

mockSubjectService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
nil,
).AnyTimes()

mockSubjectTemplateGroupService := mock.NewMockSubjectTemplateGroupManager(ctl)
mockSubjectTemplateGroupService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
errors.New("error"),
).AnyTimes()

manager := &groupService{
manager: mockSubjectService,
subjectTemplateGroupManager: mockSubjectTemplateGroupService,
}

err := manager.BulkDeleteBySubjectPKsWithTx(nil, []int64{1, 2})
assert.Error(GinkgoT(), err)
assert.Contains(GinkgoT(), err.Error(), "subjectTemplateGroupManager.BulkDeleteBySubjectPKsWithTx")
})

It("subjectSystemGroupManager.DeleteBySubjectPKsWithTx fail", func() {
mockSubjectService := mock.NewMockSubjectGroupManager(ctl)

mockSubjectService.EXPECT().BulkDeleteBySubjectPKs(gomock.Any(), []int64{1, 2}).Return(
mockSubjectService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
nil,
).AnyTimes()

mockSubjectTemplateGroupService := mock.NewMockSubjectTemplateGroupManager(ctl)
mockSubjectTemplateGroupService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
nil,
).AnyTimes()

Expand All @@ -107,8 +134,9 @@ var _ = Describe("GroupService", func() {
).AnyTimes()

manager := &groupService{
manager: mockSubjectService,
subjectSystemGroupManager: mockSubjectSystemGroupService,
manager: mockSubjectService,
subjectSystemGroupManager: mockSubjectSystemGroupService,
subjectTemplateGroupManager: mockSubjectTemplateGroupService,
}

err := manager.BulkDeleteBySubjectPKsWithTx(nil, []int64{1, 2})
Expand All @@ -119,7 +147,12 @@ var _ = Describe("GroupService", func() {
It("ok", func() {
mockSubjectService := mock.NewMockSubjectGroupManager(ctl)

mockSubjectService.EXPECT().BulkDeleteBySubjectPKs(gomock.Any(), []int64{1, 2}).Return(
mockSubjectService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
nil,
).AnyTimes()

mockSubjectTemplateGroupService := mock.NewMockSubjectTemplateGroupManager(ctl)
mockSubjectTemplateGroupService.EXPECT().BulkDeleteBySubjectPKsWithTx(gomock.Any(), []int64{1, 2}).Return(
nil,
).AnyTimes()

Expand All @@ -129,8 +162,9 @@ var _ = Describe("GroupService", func() {
).AnyTimes()

manager := &groupService{
manager: mockSubjectService,
subjectSystemGroupManager: mockSubjectSystemGroupService,
manager: mockSubjectService,
subjectSystemGroupManager: mockSubjectSystemGroupService,
subjectTemplateGroupManager: mockSubjectTemplateGroupService,
}

err := manager.BulkDeleteBySubjectPKsWithTx(nil, []int64{1, 2})
Expand Down