You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
memos/store/user_delete.go

48 lines
1.4 KiB
Go

package store
import (
"context"
storepb "github.com/usememos/memos/proto/gen/store"
)
// DeleteUserFailpoint is a test-only hook for forcing a delete-user rollback.
type DeleteUserFailpoint string
const (
// DeleteUserFailpointBeforeCommit aborts after all delete statements run but before commit.
DeleteUserFailpointBeforeCommit DeleteUserFailpoint = "before_commit"
)
type deleteUserFailpointKey struct{}
// DeleteUserResult contains resources collected while deleting a user.
type DeleteUserResult struct {
Attachments []*Attachment
UserSettingKeys []storepb.UserSetting_Key
}
// WithDeleteUserFailpoint is a test-only helper that forces DeleteUser to roll back.
func WithDeleteUserFailpoint(ctx context.Context, failpoint DeleteUserFailpoint) context.Context {
return context.WithValue(ctx, deleteUserFailpointKey{}, failpoint)
}
// GetDeleteUserFailpoint returns the delete-user failpoint attached to ctx, if any.
func GetDeleteUserFailpoint(ctx context.Context) DeleteUserFailpoint {
failpoint, ok := ctx.Value(deleteUserFailpointKey{}).(DeleteUserFailpoint)
if !ok {
return ""
}
return failpoint
}
func (s *Store) deleteUserCache(ctx context.Context, userID int32, result *DeleteUserResult) {
s.userCache.Delete(ctx, userCacheKey(userID))
if result == nil {
return
}
for _, key := range result.UserSettingKeys {
s.userSettingCache.Delete(ctx, getUserSettingCacheKey(userID, key.String()))
}
}