{"record":{"id":"90344ac5d3ec8a4f","repo":"plandex-ai/plandex","slug":"error-getting-users-for-domain-v","errorCode":null,"errorMessage":"error getting users for domain: %v","messagePattern":"error getting users for domain: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"app/server/db/org_helpers.go","lineNumber":150,"sourceCode":"\tquery := fmt.Sprintf(\"SELECT %s FROM orgs WHERE domain = $1\", orgFields)\n\terr := Conn.Get(&org, query, domain)\n\n\tif err != nil {\n\t\tif err == sql.ErrNoRows {\n\t\t\treturn nil, nil\n\t\t}\n\n\t\treturn nil, fmt.Errorf(\"error getting org for domain: %v\", err)\n\t}\n\n\treturn &org, nil\n}\n\nfunc AddOrgDomainUsers(orgId, domain string, tx *sqlx.Tx) error {\n\tusersForDomain, err := GetUsersForDomain(domain)\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error getting users for domain: %v\", err)\n\t}\n\n\torgMemberRoleId, err := GetOrgMemberRoleId()\n\n\tif err != nil {\n\t\treturn fmt.Errorf(\"error getting org member role id: %v\", err)\n\t}\n\n\tif len(usersForDomain) > 0 {\n\t\t// create org users for each user\n\t\tvar valueStrings []string\n\t\tvar valueArgs []interface{}\n\t\tfor i, user := range usersForDomain {\n\t\t\tnum := i * 3\n\t\t\tvalueStrings = append(valueStrings, fmt.Sprintf(\"($%d, $%d, $%d)\", num+1, num+2, num+3))\n\t\t\tvalueArgs = append(valueArgs, orgId, user.Id, orgMemberRoleId)\n\t\t}\n","sourceCodeStart":132,"sourceCodeEnd":168,"githubUrl":"https://github.com/plandex-ai/plandex/blob/e2d772072efadbe41d2946d97d79be55532dbab5/app/server/db/org_helpers.go#L132-L168","documentation":"AddOrgDomainUsers wraps a failure from GetUsersForDomain(domain) into 'error getting users for domain: %v'. The lookup of users whose email matches the org domain failed, so domain-based auto-add cannot proceed.","triggerScenarios":"GetUsersForDomain's SELECT over users fails: DB connection issue, users table missing, or an invalid domain value causing a query error.","commonSituations":"Auto-add-domain-users org created with a malformed/empty domain; DB outage; migrations not applied so the users table or email column differs.","solutions":["Check the wrapped %v message for the underlying pq error (connectivity vs syntax vs missing table)","Validate the domain string (non-empty, valid hostname) before org creation / auto-add","Ensure the users schema matches via migrations","Retry once the database is reachable"],"exampleFix":"// before\ndomain := \"\" // empty domain from request\nerr := db.AddOrgDomainUsers(orgId, domain, tx)\n// after\nif domain == \"\" || !strings.Contains(domain, \".\") {\n    return errors.New(\"invalid org domain for auto-add\")\n}\nerr := db.AddOrgDomainUsers(orgId, domain, tx)","handlingStrategy":"validation","validationCode":"if domain == \"\" || strings.Contains(domain, \"@\") || !strings.Contains(domain, \".\") {\n    return errors.New(\"invalid domain\")\n}","typeGuard":null,"tryCatchPattern":"err := db.AddOrgDomainUsers(orgId, domain, tx)\nif err != nil && strings.Contains(err.Error(), \"error getting users for domain\") {\n    log.Printf(\"domain user lookup failed: %v\", err)\n    return fmt.Errorf(\"domain lookup unavailable\")\n}","preventionTips":["Validate/normalize the org domain at creation time","Keep users-table migrations applied","Don't enable auto_add_domain_users without a valid domain","Add DB health monitoring to catch transient lookups failures"],"tags":["database","postgresql","domain-lookup"],"backgroundTag":"database-query-failed","analyzedSha":"e2d772072efadbe41d2946d97d79be55532dbab5","analyzedAt":"2026-09-05T20:56:53.631Z","contentChangedAt":"2026-09-05T20:56:53.631Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}