feat: make database.Chat auditable (#24485)

Wire database.Chat into the audit system so chat lifecycle events
(creation, patches, etc.) produce audit log entries.

Part of CODAGT-200.

> 🤖
This commit is contained in:
Cian Johnston
2026-04-21 11:11:56 +01:00
committed by GitHub
parent 5f3effd839
commit c968a1f3a3
18 changed files with 271 additions and 28 deletions
+2 -1
View File
@@ -33,7 +33,8 @@ type Auditable interface {
idpsync.GroupSyncSettings |
idpsync.RoleSyncSettings |
database.TaskTable |
database.AiSeatState
database.AiSeatState |
database.Chat
}
// Map is a map of changed fields in an audited resource. It maps field names to
+1 -1
View File
@@ -25,7 +25,7 @@ func BackgroundTaskFieldsBytes(ctx context.Context, logger slog.Logger, subsyste
wriBytes, err := json.Marshal(af)
if err != nil {
logger.Error(ctx, "marshal additional fields for dormancy audit", slog.Error(err))
logger.Error(ctx, "marshal additional fields for background audit", slog.Error(err))
return []byte("{}")
}
+10
View File
@@ -134,6 +134,8 @@ func ResourceTarget[T Auditable](tgt T) string {
return typed.Name
case database.AiSeatState:
return "AI Seat"
case database.Chat:
return typed.Title
default:
panic(fmt.Sprintf("unknown resource %T for ResourceTarget", tgt))
}
@@ -200,6 +202,8 @@ func ResourceID[T Auditable](tgt T) uuid.UUID {
return typed.ID
case database.AiSeatState:
return typed.UserID
case database.Chat:
return typed.ID
default:
panic(fmt.Sprintf("unknown resource %T for ResourceID", tgt))
}
@@ -257,6 +261,8 @@ func ResourceType[T Auditable](tgt T) database.ResourceType {
return database.ResourceTypeTask
case database.AiSeatState:
return database.ResourceTypeAiSeat
case database.Chat:
return database.ResourceTypeChat
default:
panic(fmt.Sprintf("unknown resource %T for ResourceType", typed))
}
@@ -317,6 +323,10 @@ func ResourceRequiresOrgID[T Auditable]() bool {
return true
case database.AiSeatState:
return false
case database.Chat:
// Chats always have a non-null organization_id (since
// migration 000467).
return true
default:
panic(fmt.Sprintf("unknown resource %T for ResourceRequiresOrgID", tgt))
}