mirror of https://github.com/usememos/memos
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.
48 lines
1.4 KiB
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()))
|
|
}
|
|
}
|