refactor: rename Ai* database identifiers to AI* (AIGOV-369) (#26327)

Adds `ai` to sqlc's `gen.go.initialisms` in `coderd/database/sqlc.yaml`
so the generated DB code follows Go's initialism convention. Adds the
matching `ai` -> `AI` case to the dbgen PascalCase helper
(`scripts/dbgen/main.go`) so the corresponding `dbmem` / mock
identifiers stay in sync. `make gen` regenerates the rest; hand-written
call sites that consume DB-generated identifiers
(`enterprise/audit/table.go`, `coderd/database/modelmethods.go`,
`enterprise/coderd/aigatewaykeys.go`, `coderd/database/dbauthz/*`, etc.)
are updated to match.

Scope is deliberately limited to the database layer:

- `coderd/rbac/*` (resource and scope generators) is untouched —
`ResourceAi*` / `ScopeAi*` constants stay on main's casing.
- `codersdk/*` (Go SDK) is untouched — `codersdk.ResourceAi*` /
`codersdk.APIKeyScopeAi*` constants stay on main's casing, so external
Go SDK consumers see no source-level break.
- `Aibridge*` identifiers (one SQL token `aibridge`, not `ai_bridge`)
are out of scope.

On-the-wire values are unchanged: enum strings, RBAC resource type
strings, API key scope strings, and JSON tags all stay the same. The
HTTP/JSON surface is unaffected.

Refs:
[AIGOV-369](https://linear.app/codercom/issue/AIGOV-369/change-ai-references-in-coderddatabasemodelsgo-to-ai)

🤖 Generated with [Coder Agents](https://coder.com)
This commit is contained in:
Danny Kopping
2026-06-16 09:01:43 +00:00
committed by GitHub
parent 00a08f35cc
commit a1330e3a8c
53 changed files with 612 additions and 605 deletions
+20 -20
View File
@@ -11087,11 +11087,11 @@ func TestGetEnabledChatModelConfigsUsesAIProviders(t *testing.T) {
ctx := testutil.Context(t, testutil.WaitMedium)
enabledProvider := dbgen.AIProvider(t, store, database.AIProvider{
Type: database.AiProviderTypeOpenrouter,
Type: database.AIProviderTypeOpenrouter,
Name: "openrouter-" + uuid.NewString(),
})
disabledProvider := dbgen.AIProvider(t, store, database.AIProvider{
Type: database.AiProviderTypeVercel,
Type: database.AIProviderTypeVercel,
Name: "vercel-" + uuid.NewString(),
}, func(params *database.InsertAIProviderParams) {
params.Enabled = false
@@ -11400,7 +11400,7 @@ func TestGetChatMessagesForPromptByChatID(t *testing.T) {
// An AI provider row is required as a FK for model configs.
provider := dbgen.AIProvider(t, db, database.AIProvider{
Type: database.AiProviderTypeOpenai,
Type: database.AIProviderTypeOpenai,
Name: "test-" + uuid.NewString(),
DisplayName: sql.NullString{String: "OpenAI", Valid: true},
Enabled: true,
@@ -11739,7 +11739,7 @@ func TestUpsertAISeats(t *testing.T) {
newRow, err := db.UpsertAISeatState(ctx, database.UpsertAISeatStateParams{
UserID: user.ID,
FirstUsedAt: now.Add(time.Hour * -24),
LastEventType: database.AiSeatUsageReasonTask,
LastEventType: database.AISeatUsageReasonTask,
})
require.NoError(t, err)
require.True(t, newRow)
@@ -11747,7 +11747,7 @@ func TestUpsertAISeats(t *testing.T) {
alreadyExists, err := db.UpsertAISeatState(ctx, database.UpsertAISeatStateParams{
UserID: user.ID,
FirstUsedAt: now.Add(time.Hour * -23),
LastEventType: database.AiSeatUsageReasonTask,
LastEventType: database.AISeatUsageReasonTask,
})
require.NoError(t, err)
require.False(t, alreadyExists)
@@ -11755,7 +11755,7 @@ func TestUpsertAISeats(t *testing.T) {
alreadyExists, err = db.UpsertAISeatState(ctx, database.UpsertAISeatStateParams{
UserID: user.ID,
FirstUsedAt: now,
LastEventType: database.AiSeatUsageReasonTask,
LastEventType: database.AISeatUsageReasonTask,
})
require.NoError(t, err)
require.False(t, alreadyExists)
@@ -14604,7 +14604,7 @@ func TestGetChatsFilter(t *testing.T) {
dbgen.OrganizationMember(t, store, database.OrganizationMember{UserID: user.ID, OrganizationID: org.ID})
provider := dbgen.AIProviderWithOptionalKey(t, store, database.AIProvider{
Type: database.AiProviderTypeOpenai,
Type: database.AIProviderTypeOpenai,
}, "test-key")
modelCfg, err := store.InsertChatModelConfig(ctx, database.InsertChatModelConfigParams{
@@ -15395,67 +15395,67 @@ func TestAIGatewayKeysTableConstraints(t *testing.T) {
{
name: "duplicate name",
params: aiGatewayKeyParams(preExisting.Name, "key_test002"),
expectUniqueErr: database.UniqueAiGatewayKeysNameIndex,
expectUniqueErr: database.UniqueAIGatewayKeysNameIndex,
},
{
name: "duplicate secret prefix",
params: aiGatewayKeyParams("different-key", preExisting.SecretPrefix),
expectUniqueErr: database.UniqueAiGatewayKeysSecretPrefixIndex,
expectUniqueErr: database.UniqueAIGatewayKeysSecretPrefixIndex,
},
{
name: "duplicate hashed secret",
params: database.InsertAIGatewayKeyParams{ID: uuid.New(), Name: "other-name", SecretPrefix: "key_1234567", HashedSecret: preExisting.HashedSecret},
expectUniqueErr: database.UniqueAiGatewayKeysHashedSecretIndex,
expectUniqueErr: database.UniqueAIGatewayKeysHashedSecretIndex,
},
{
name: "empty name",
params: aiGatewayKeyParams("", "key_empty__"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "name with trailing dash",
params: aiGatewayKeyParams("other-name-", "key_trail__"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "name with consecutive dashes",
params: aiGatewayKeyParams("other--name", "key_consec_"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "name with underscore",
params: aiGatewayKeyParams("other_name", "key_undersc"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "name with space",
params: aiGatewayKeyParams("other name", "key_spacen_"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "name with leading dash",
params: aiGatewayKeyParams("-other-name", "key_leadng_"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "name longer than 64 characters",
params: aiGatewayKeyParams(strings.Repeat("a", 65), "key_longna_"),
expectCheckErr: database.CheckAiGatewayKeysNameCheck,
expectCheckErr: database.CheckAIGatewayKeysNameCheck,
},
{
name: "empty secret prefix",
params: aiGatewayKeyParams("check-empty-pfx", ""),
expectCheckErr: database.CheckAiGatewayKeysSecretPrefixCheck,
expectCheckErr: database.CheckAIGatewayKeysSecretPrefixCheck,
},
{
name: "invalid secret prefix length",
params: aiGatewayKeyParams("check-short-pfx", "key_short"),
expectCheckErr: database.CheckAiGatewayKeysSecretPrefixCheck,
expectCheckErr: database.CheckAIGatewayKeysSecretPrefixCheck,
},
{
name: "empty hashed secret",
params: database.InsertAIGatewayKeyParams{ID: uuid.New(), Name: "check-empty-hash", SecretPrefix: "key_ehash__", HashedSecret: []byte{}},
expectCheckErr: database.CheckAiGatewayKeysHashedSecretCheck,
expectCheckErr: database.CheckAIGatewayKeysHashedSecretCheck,
},
}