(ctx context.Context, db database.Store, query string, page codersdk.Pagination, actorID uuid.UUID, afterSessionID string)
| 406 | } |
| 407 | |
| 408 | func AIBridgeSessions(ctx context.Context, db database.Store, query string, page codersdk.Pagination, actorID uuid.UUID, afterSessionID string) (database.ListAIBridgeSessionsParams, []codersdk.ValidationError) { |
| 409 | // nolint:exhaustruct // Empty values just means "don't filter by that field". |
| 410 | filter := database.ListAIBridgeSessionsParams{ |
| 411 | AfterSessionID: afterSessionID, |
| 412 | // #nosec G115 - Safe conversion for pagination limit which is expected to be within int32 range |
| 413 | Limit: int32(page.Limit), |
| 414 | // #nosec G115 - Safe conversion for pagination offset which is expected to be within int32 range |
| 415 | Offset: int32(page.Offset), |
| 416 | } |
| 417 | |
| 418 | if query == "" { |
| 419 | return filter, nil |
| 420 | } |
| 421 | |
| 422 | values, errors := searchTerms(query, func(string, url.Values) error { |
| 423 | // Do not specify a default search key; let's be explicit to prevent user confusion. |
| 424 | return xerrors.New("no search key specified") |
| 425 | }) |
| 426 | if len(errors) > 0 { |
| 427 | return filter, errors |
| 428 | } |
| 429 | |
| 430 | parser := httpapi.NewQueryParamParser() |
| 431 | filter.InitiatorID = parseUser(ctx, db, parser, values, "initiator", actorID) |
| 432 | filter.Provider = parser.String(values, "", "provider") |
| 433 | filter.ProviderName = parseAIProviderName(ctx, db, parser, values) |
| 434 | filter.Model = parser.String(values, "", "model") |
| 435 | filter.Client = parser.String(values, "", "client") |
| 436 | filter.SessionID = parser.String(values, "", "session_id") |
| 437 | |
| 438 | // Time must be between started_after and started_before. |
| 439 | filter.StartedAfter = parser.Time3339Nano(values, time.Time{}, "started_after") |
| 440 | filter.StartedBefore = parser.Time3339Nano(values, time.Time{}, "started_before") |
| 441 | if !filter.StartedBefore.IsZero() && !filter.StartedAfter.IsZero() && !filter.StartedBefore.After(filter.StartedAfter) { |
| 442 | parser.Errors = append(parser.Errors, codersdk.ValidationError{ |
| 443 | Field: "started_before", |
| 444 | Detail: `Query param "started_before" has invalid value: "started_before" must be after "started_after" if set`, |
| 445 | }) |
| 446 | } |
| 447 | |
| 448 | parser.ErrorExcessParams(values) |
| 449 | return filter, parser.Errors |
| 450 | } |
| 451 | |
| 452 | func AIBridgeModels(query string, page codersdk.Pagination) (database.ListAIBridgeModelsParams, []codersdk.ValidationError) { |
| 453 | // nolint:exhaustruct // Empty values just means "don't filter by that field". |
no test coverage detected