chatFromAutoArchiveRow reshapes the query row into a database.Chat for audit.Auditable[database.Chat].
(logger slog.Logger, r database.AutoArchiveInactiveChatsRow)
| 419 | // chatFromAutoArchiveRow reshapes the query row into a database.Chat for |
| 420 | // audit.Auditable[database.Chat]. |
| 421 | func chatFromAutoArchiveRow(logger slog.Logger, r database.AutoArchiveInactiveChatsRow) database.Chat { |
| 422 | var labels database.StringMap |
| 423 | // sqlc's StringMap override doesn't reach CTE-aliased columns, so Labels |
| 424 | // arrives as raw JSON bytes. StringMap.Scan handles []byte and nil. |
| 425 | if err := labels.Scan([]byte(r.Labels)); err != nil { |
| 426 | logger.Warn(context.Background(), "failed to parse chat labels from auto-archive row", |
| 427 | slog.F("chat_id", r.ID), |
| 428 | slog.F("raw_labels", string(r.Labels)), |
| 429 | slog.Error(err), |
| 430 | ) |
| 431 | } |
| 432 | |
| 433 | var userACL database.ChatACL |
| 434 | if err := userACL.Scan([]byte(r.UserACL)); err != nil { |
| 435 | logger.Warn(context.Background(), "failed to parse chat user ACL from auto-archive row", |
| 436 | slog.F("chat_id", r.ID), |
| 437 | slog.F("raw_user_acl", string(r.UserACL)), |
| 438 | slog.Error(err), |
| 439 | ) |
| 440 | } |
| 441 | |
| 442 | var groupACL database.ChatACL |
| 443 | if err := groupACL.Scan([]byte(r.GroupACL)); err != nil { |
| 444 | logger.Warn(context.Background(), "failed to parse chat group ACL from auto-archive row", |
| 445 | slog.F("chat_id", r.ID), |
| 446 | slog.F("raw_group_acl", string(r.GroupACL)), |
| 447 | slog.Error(err), |
| 448 | ) |
| 449 | } |
| 450 | |
| 451 | return database.Chat{ |
| 452 | ID: r.ID, |
| 453 | OwnerID: r.OwnerID, |
| 454 | OrganizationID: r.OrganizationID, |
| 455 | WorkspaceID: r.WorkspaceID, |
| 456 | BuildID: r.BuildID, |
| 457 | AgentID: r.AgentID, |
| 458 | Title: r.Title, |
| 459 | Status: r.Status, |
| 460 | WorkerID: r.WorkerID, |
| 461 | StartedAt: r.StartedAt, |
| 462 | HeartbeatAt: r.HeartbeatAt, |
| 463 | CreatedAt: r.CreatedAt, |
| 464 | UpdatedAt: r.UpdatedAt, |
| 465 | ParentChatID: r.ParentChatID, |
| 466 | RootChatID: r.RootChatID, |
| 467 | LastModelConfigID: r.LastModelConfigID, |
| 468 | Archived: r.Archived, |
| 469 | LastError: r.LastError, |
| 470 | Mode: r.Mode, |
| 471 | MCPServerIDs: r.MCPServerIDs, |
| 472 | Labels: labels, |
| 473 | UserACL: userACL, |
| 474 | GroupACL: groupACL, |
| 475 | PinOrder: r.PinOrder, |
| 476 | LastReadMessageID: r.LastReadMessageID, |
| 477 | LastInjectedContext: r.LastInjectedContext, |
| 478 | DynamicTools: r.DynamicTools, |
no test coverage detected