MCPcopy Create free account
hub / github.com/cloudbase/garm / ListFileObjects

Method ListFileObjects

database/sql/file_store.go:460–525  ·  view source on GitHub ↗
(_ context.Context, page, pageSize uint64)

Source from the content-addressed store, hash-verified

458}
459
460func (s *sqlDatabase) ListFileObjects(_ context.Context, page, pageSize uint64) (params.FileObjectPaginatedResponse, error) {
461 if page == 0 {
462 page = 1
463 }
464 if pageSize == 0 {
465 pageSize = 20
466 }
467
468 var total int64
469 if err := s.objectsConn.Model(&FileObject{}).Count(&total).Error; err != nil {
470 return params.FileObjectPaginatedResponse{}, fmt.Errorf("failed to count file objects: %w", err)
471 }
472
473 totalPages := uint64(0)
474 if total > 0 {
475 totalPages = (uint64(total) + pageSize - 1) / pageSize
476 }
477
478 offset := (page - 1) * pageSize
479
480 queryPageSize := math.MaxInt
481 if pageSize <= math.MaxInt {
482 queryPageSize = int(pageSize)
483 }
484
485 var queryOffset int
486 if offset <= math.MaxInt {
487 queryOffset = int(offset)
488 } else {
489 return params.FileObjectPaginatedResponse{}, fmt.Errorf("offset excedes max int size: %d", math.MaxInt)
490 }
491
492 var fileObjs []FileObject
493 if err := s.objectsConn.Preload("TagsList").Omit("content").
494 Limit(queryPageSize).
495 Offset(queryOffset).
496 Order("id DESC").
497 Find(&fileObjs).Error; err != nil {
498 return params.FileObjectPaginatedResponse{}, fmt.Errorf("failed to list file objects: %w", err)
499 }
500
501 results := make([]params.FileObject, len(fileObjs))
502 for i, obj := range fileObjs {
503 results[i] = s.sqlFileObjectToCommonParams(obj)
504 }
505
506 // Calculate next and previous page numbers
507 var nextPage, previousPage *uint64
508 if page < totalPages {
509 next := page + 1
510 nextPage = &next
511 }
512 if page > 1 {
513 prev := page - 1
514 previousPage = &prev
515 }
516
517 return params.FileObjectPaginatedResponse{

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected