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, err

View on GitHub (pinned to 3b9f137061)

Solutions

  1. Verify the user ID being passed actually exists: SELECT id FROM users WHERE id = <id>;
  2. Fix upstream callers so the authenticated/logged-in user's real ID is used instead of a zero value.
  3. Re-seed or restore the users table if data was lost, or remove orphaned activity requests.
  4. 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

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


AI-assisted analysis of apache/answer@3b9f137061 (2026-09-05). Data as JSON: /api/errors/19758d6738e9e377. Report an issue: GitHub.