apache/answer · error
user not exist
Error message
user not exist
What it means
This error is thrown by the activity repository inside a transaction when the user referenced by addActivity.UserID cannot be found in the users table. The lookup uses a row-locking (ForUpdate) select, so it also doubles as a consistency guard: if the row is missing, the whole AddActivity transaction is aborted with this error instead of inserting an activity for a dangling user.
Source
Thrown at internal/repo/activity/review_repo.go:94
TriggerUserID: converter.StringToInt64(act.TriggerUserID),
ObjectID: act.ObjectID,
OriginalObjectID: act.OriginalObjectID,
ActivityType: cfg.ID,
Rank: cfg.GetIntValue(),
HasRank: 1,
RevisionID: converter.StringToInt64(act.RevisionID),
}
_, err = ar.data.DB.Transaction(func(session *xorm.Session) (result any, err error) {
session = session.Context(ctx)
user := &entity.User{}
exist, err := session.ID(addActivity.UserID).ForUpdate().Get(user)
if err != nil {
return nil, err
}
if !exist {
return nil, fmt.Errorf("user not exist")
}
existsActivity := &entity.Activity{}
exist, err = session.
And(builder.Eq{"user_id": addActivity.UserID}).
And(builder.Eq{"activity_type": addActivity.ActivityType}).
And(builder.Eq{"revision_id": addActivity.RevisionID}).
Get(existsActivity)
if err != nil {
return nil, err
}
if exist {
return nil, nil
}
err = ar.userRankRepo.ChangeUserRank(ctx, session, addActivity.UserID, user.Rank, addActivity.Rank)
if err != nil {
return nil, errView on GitHub (pinned to 3b9f137061)
Solutions
- Verify the user ID being passed actually exists: SELECT id FROM users WHERE id = <id>;
- Fix upstream callers so the authenticated/logged-in user's real ID is used instead of a zero value.
- Re-seed or restore the users table if data was lost, or remove orphaned activity requests.
- Add a foreign key on activities.user_id so this is caught at insert time with a clearer DB error.
Example fix
// before
exist, err := session.ID(addActivity.UserID).ForUpdate().Get(user)
if !exist {
return nil, fmt.Errorf("user not exist")
}
// after
exist, err := session.ID(addActivity.UserID).ForUpdate().Get(user)
if err != nil {
return nil, err
}
if !exist {
return nil, fmt.Errorf("user not exist: id=%d", addActivity.UserID)
} Defensive patterns
Strategy: validation
Validate before calling
var userCount int64
err := db.Model(&entity.User{}).Where("id = ?", addActivity.UserID).Count(&userCount)
if err == nil && userCount == 0 {
return fmt.Errorf("cannot add activity: user %d does not exist", addActivity.UserID)
} Type guard
func userExists(id int64, users []entity.User) bool {
for _, u := range users {
if u.ID == id {
return true
}
}
return false
} Try / catch
activity, err := activityRepo.AddActivity(ctx, req)
if err != nil {
if strings.Contains(err.Error(), "user not exist") {
return http.StatusNotFound, "user does not exist"
}
return http.StatusInternalServerError, err.Error()
} Prevention
- Always use the authenticated user's ID from context, never a client-supplied value.
- Add a foreign key on activities.user_id referencing users.id.
- Purge dependent activity rows when deleting users (cascade or soft-delete).
- In tests, always seed the user before exercising activity APIs.
When it happens
Trigger: Calling the activity-add service/repo path with a UserID that does not exist in the users table (deleted user, wrong ID, ID from another environment's database).
Common situations: Seeding or restoring a database where users were purged but activities reference their IDs; passing an unparsed or default (0) user ID from an unauthenticated or miswired context; stale external references after account deletion.
Understand the failure class
Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.
Related errors
- user not exist
- get config failed: %w
- update site info failed: %w
- update plugin status failed: %w
- connect database failed: %w
AI-assisted analysis of apache/answer@3b9f137061 (2026-09-05).
Data as JSON: /api/errors/19758d6738e9e377.
Report an issue: GitHub.