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
@@ -37,7 +37,7 @@ func TestBackfillBedrockProviderTypeEncryptedSettings(t *testing.T) {
})
require.NoError(t, err)
provider := dbgen.AIProvider(t, cryptDB, database.AIProvider{
Type: database.AiProviderTypeAnthropic,
Type: database.AIProviderTypeAnthropic,
Settings: sql.NullString{String: string(rawSettings), Valid: true},
})
@@ -46,6 +46,6 @@ func TestBackfillBedrockProviderTypeEncryptedSettings(t *testing.T) {
// Verify via raw DB: type is not encrypted so it is directly readable.
row, err := rawDB.GetAIProviderByName(ctx, provider.Name)
require.NoError(t, err)
require.Equal(t, database.AiProviderTypeBedrock, row.Type, "encrypted legacy row must be promoted")
require.Equal(t, database.AIProviderTypeBedrock, row.Type, "encrypted legacy row must be promoted")
require.True(t, row.SettingsKeyID.Valid, "settings must remain encrypted after backfill")
}
+4 -4
View File
@@ -575,7 +575,7 @@ func (api *API) upsertGroupAIBudget(rw http.ResponseWriter, r *http.Request) {
ctx = r.Context()
group = httpmw.GroupParam(r)
auditor = api.AGPL.Auditor.Load()
aReq, commitAudit = audit.InitRequest[database.AuditableGroupAiBudget](rw, &audit.RequestParams{
aReq, commitAudit = audit.InitRequest[database.AuditableGroupAIBudget](rw, &audit.RequestParams{
Audit: *auditor,
Log: api.Logger,
Request: r,
@@ -630,7 +630,7 @@ func (api *API) deleteGroupAIBudget(rw http.ResponseWriter, r *http.Request) {
ctx = r.Context()
group = httpmw.GroupParam(r)
auditor = api.AGPL.Auditor.Load()
aReq, commitAudit = audit.InitRequest[database.AuditableGroupAiBudget](rw, &audit.RequestParams{
aReq, commitAudit = audit.InitRequest[database.AuditableGroupAIBudget](rw, &audit.RequestParams{
Audit: *auditor,
Log: api.Logger,
Request: r,
@@ -714,7 +714,7 @@ func (api *API) upsertUserAIBudgetOverride(rw http.ResponseWriter, r *http.Reque
}
auditor := api.AGPL.Auditor.Load()
aReq, commitAudit := audit.InitRequest[database.AuditableUserAiBudgetOverride](rw, &audit.RequestParams{
aReq, commitAudit := audit.InitRequest[database.AuditableUserAIBudgetOverride](rw, &audit.RequestParams{
Audit: *auditor,
Log: api.Logger,
Request: r,
@@ -809,7 +809,7 @@ func (api *API) deleteUserAIBudgetOverride(rw http.ResponseWriter, r *http.Reque
}
auditor := api.AGPL.Auditor.Load()
aReq, commitAudit := audit.InitRequest[database.AuditableUserAiBudgetOverride](rw, &audit.RequestParams{
aReq, commitAudit := audit.InitRequest[database.AuditableUserAIBudgetOverride](rw, &audit.RequestParams{
Audit: *auditor,
Log: api.Logger,
Request: r,
+9 -9
View File
@@ -2208,7 +2208,7 @@ func TestGroupAIBudget(t *testing.T) {
rows, err := db.GetAuditLogsOffset(
ctx,
database.GetAuditLogsOffsetParams{
ResourceType: string(database.ResourceTypeGroupAiBudget),
ResourceType: string(database.ResourceTypeGroupAIBudget),
LimitOpt: 10,
},
)
@@ -2220,7 +2220,7 @@ func TestGroupAIBudget(t *testing.T) {
require.Equal(t, database.AuditActionWrite, upsertLog.Action)
require.Equal(t, group.ID, upsertLog.ResourceID)
require.Equal(t, database.ResourceTypeGroupAiBudget, upsertLog.ResourceType)
require.Equal(t, database.ResourceTypeGroupAIBudget, upsertLog.ResourceType)
require.Equal(t, group.Name, upsertLog.ResourceTarget)
require.Equal(t, owner.OrganizationID, upsertLog.OrganizationID)
@@ -2238,7 +2238,7 @@ func TestGroupAIBudget(t *testing.T) {
require.Equal(t, database.AuditActionDelete, deleteLog.Action)
require.Equal(t, group.ID, deleteLog.ResourceID)
require.Equal(t, database.ResourceTypeGroupAiBudget, deleteLog.ResourceType)
require.Equal(t, database.ResourceTypeGroupAIBudget, deleteLog.ResourceType)
require.Equal(t, group.Name, deleteLog.ResourceTarget)
require.Equal(t, owner.OrganizationID, deleteLog.OrganizationID)
@@ -2495,7 +2495,7 @@ func TestUserAIBudgetOverride(t *testing.T) {
rows, err := db.GetAuditLogsOffset(
ctx,
database.GetAuditLogsOffsetParams{
ResourceType: string(database.ResourceTypeUserAiBudgetOverride),
ResourceType: string(database.ResourceTypeUserAIBudgetOverride),
LimitOpt: 10,
},
)
@@ -2507,7 +2507,7 @@ func TestUserAIBudgetOverride(t *testing.T) {
require.Equal(t, database.AuditActionWrite, upsertLog.Action)
require.Equal(t, targetUser.ID, upsertLog.ResourceID)
require.Equal(t, database.ResourceTypeUserAiBudgetOverride, upsertLog.ResourceType)
require.Equal(t, database.ResourceTypeUserAIBudgetOverride, upsertLog.ResourceType)
require.Equal(t, targetUser.Username, upsertLog.ResourceTarget)
require.Equal(t, owner.OrganizationID, upsertLog.OrganizationID)
@@ -2531,7 +2531,7 @@ func TestUserAIBudgetOverride(t *testing.T) {
require.Equal(t, database.AuditActionDelete, deleteLog.Action)
require.Equal(t, targetUser.ID, deleteLog.ResourceID)
require.Equal(t, database.ResourceTypeUserAiBudgetOverride, deleteLog.ResourceType)
require.Equal(t, database.ResourceTypeUserAIBudgetOverride, deleteLog.ResourceType)
require.Equal(t, targetUser.Username, deleteLog.ResourceTarget)
require.Equal(t, owner.OrganizationID, deleteLog.OrganizationID)
@@ -2564,7 +2564,7 @@ func TestUserAIBudgetOverride(t *testing.T) {
rows, err := db.GetAuditLogsOffset(
ctx,
database.GetAuditLogsOffsetParams{
ResourceType: string(database.ResourceTypeUserAiBudgetOverride),
ResourceType: string(database.ResourceTypeUserAIBudgetOverride),
LimitOpt: 10,
},
)
@@ -2616,7 +2616,7 @@ func TestUserAIBudgetOverride(t *testing.T) {
rows, err := db.GetAuditLogsOffset(
ctx,
database.GetAuditLogsOffsetParams{
ResourceType: string(database.ResourceTypeUserAiBudgetOverride),
ResourceType: string(database.ResourceTypeUserAIBudgetOverride),
LimitOpt: 10,
},
)
@@ -2673,7 +2673,7 @@ func TestUserAIBudgetOverride(t *testing.T) {
rows, err := db.GetAuditLogsOffset(
ctx,
database.GetAuditLogsOffsetParams{
ResourceType: string(database.ResourceTypeUserAiBudgetOverride),
ResourceType: string(database.ResourceTypeUserAIBudgetOverride),
LimitOpt: 10,
},
)
+2 -2
View File
@@ -87,14 +87,14 @@ func writeKeyInsertError(ctx context.Context, rw http.ResponseWriter, err error)
switch {
case httpapi.IsUnauthorizedError(err):
httpapi.Forbidden(rw)
case database.IsCheckViolation(err, database.CheckAiGatewayKeysNameCheck):
case database.IsCheckViolation(err, database.CheckAIGatewayKeysNameCheck):
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
Message: "Invalid key name.",
Validations: []codersdk.ValidationError{
{Field: "name", Detail: nameFormatDetail},
},
})
case database.IsUniqueViolation(err, database.UniqueAiGatewayKeysNameIndex):
case database.IsUniqueViolation(err, database.UniqueAIGatewayKeysNameIndex):
httpapi.Write(ctx, rw, http.StatusBadRequest, codersdk.Response{
Message: "Key name must be unique.",
Validations: []codersdk.ValidationError{