[MM-44168] Add feature to restore archived user groups (#20369)

* Add undelete feature, add mocks, tests

* Rename undelete->restore

* make store-layers

* make app-layers

* Store -> Store()

* Lint fixes

Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Shivashis Padhi
2022-11-17 14:53:54 +05:30
коммит произвёл GitHub
родитель 17332035fa
Коммит 5be8557247
14 изменённых файлов: 301 добавлений и 0 удалений

Просмотреть файл

@@ -968,6 +968,7 @@ type AppIface interface {
ResetPermissionsSystem() *model.AppError
ResetSamlAuthDataToEmail(includeDeleted bool, dryRun bool, userIDs []string) (numAffected int, appErr *model.AppError)
RestoreChannel(c request.CTX, channel *model.Channel, userID string) (*model.Channel, *model.AppError)
RestoreGroup(groupID string) (*model.Group, *model.AppError)
RestoreTeam(teamID string) *model.AppError
RestrictUsersGetByPermissions(userID string, options *model.UserGetOptions) (*model.UserGetOptions, *model.AppError)
RestrictUsersSearchByPermissions(userID string, options *model.UserSearchOptions) (*model.UserSearchOptions, *model.AppError)

Просмотреть файл

@@ -217,6 +217,21 @@ func (a *App) DeleteGroup(groupID string) (*model.Group, *model.AppError) {
return deletedGroup, nil
}
func (a *App) RestoreGroup(groupID string) (*model.Group, *model.AppError) {
restoredGroup, err := a.Srv().Store().Group().Restore(groupID)
if err != nil {
var nfErr *store.ErrNotFound
switch {
case errors.As(err, &nfErr):
return nil, model.NewAppError("RestoreGroup", "app.group.no_rows", nil, nfErr.Error(), http.StatusNotFound)
default:
return nil, model.NewAppError("RestoreGroup", "app.update_error", nil, err.Error(), http.StatusInternalServerError)
}
}
return restoredGroup, nil
}
func (a *App) GetGroupMemberCount(groupID string, viewRestrictions *model.ViewUsersRestrictions) (int64, *model.AppError) {
count, err := a.Srv().Store().Group().GetMemberCountWithRestrictions(groupID, viewRestrictions)
if err != nil {

Просмотреть файл

@@ -127,6 +127,24 @@ func TestDeleteGroup(t *testing.T) {
require.Nil(t, g)
}
func TestUndeleteGroup(t *testing.T) {
th := Setup(t)
defer th.TearDown()
group := th.CreateGroup()
g, err := th.App.DeleteGroup(group.Id)
require.Nil(t, err)
require.NotNil(t, g)
g, err = th.App.RestoreGroup(group.Id)
require.Nil(t, err)
require.NotNil(t, g)
g, err = th.App.RestoreGroup(group.Id)
require.NotNil(t, err)
require.Nil(t, g)
}
func TestCreateOrRestoreGroupMember(t *testing.T) {
th := Setup(t).InitBasic()
defer th.TearDown()

Просмотреть файл

@@ -13945,6 +13945,28 @@ func (a *OpenTracingAppLayer) RestoreChannel(c request.CTX, channel *model.Chann
return resultVar0, resultVar1
}
func (a *OpenTracingAppLayer) RestoreGroup(groupID string) (*model.Group, *model.AppError) {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.RestoreGroup")
a.ctx = newCtx
a.app.Srv().Store().SetContext(newCtx)
defer func() {
a.app.Srv().Store().SetContext(origCtx)
a.ctx = origCtx
}()
defer span.Finish()
resultVar0, resultVar1 := a.app.RestoreGroup(groupID)
if resultVar1 != nil {
span.LogFields(spanlog.Error(resultVar1))
ext.Error.Set(span, true)
}
return resultVar0, resultVar1
}
func (a *OpenTracingAppLayer) RestoreTeam(teamID string) *model.AppError {
origCtx := a.ctx
span, newCtx := tracing.StartSpanWithParentByContext(a.ctx, "app.RestoreTeam")