Database
Repository and Pagination
Generic repository pattern, query options, and pagination utilities
Generic Repository
Repository[T] wraps Bun queries with common CRUD operations.
Create Repository
repo := database.NewRepository[User](db)db can be *bun.DB or bun.Tx through the shared IDB interface.
Core Methods
FindByIDFindOneFindAllFindAllWithDeletedExistsCountCreateCreateManyUpdateUpdateColumnsDeleteDeleteManySoftDeleteRestoreSoftDeletedTruncate
Query Options
Built-in query option helpers:
WithLimit(limit)WithOffset(offset)WithOrder(column, direction...)WhereActive()WhereDeleted()WithRelation(relation)WithRelations(relations...)
Bulk Operations
Batch-oriented operations:
BulkInsertBulkInsertWithOptionsBulkUpdateBulkUpsertBulkDeleteBulkSoftDeleteBulkInsertWithProgressBulkUpdateWithProgressChunkSlice
DefaultBatchSize is 1000 when not specified.
Offset Pagination
Use OffsetPagination + Paginate[T] for classic page/limit APIs.
result, err := database.Paginate[User](ctx, query, database.OffsetPagination{
Page: 2,
PageSize: 20,
Sort: "created_at",
Order: "desc",
})Result includes:
DataPage,PageSizeTotalPages,TotalCountHasNext,HasPrev
Cursor Pagination
Use CursorPagination + PaginateCursor[T] for large datasets and stable pagination.
result, err := database.PaginateCursor[User](ctx, query, database.CursorPagination{
Cursor: cursor,
PageSize: 50,
Sort: "id",
Direction: "forward",
})Result includes:
DataNextCursorPrevCursorHasNext,HasPrev
Mapping Utilities
For DTO conversions and data shaping:
MapTo,MapSlice,MapPointerMapPaginated,MapCursorMapErrorvariantsFilterSlice,GroupBy,IndexBy,Pluck,Unique,Partition
These are useful when keeping repository models separate from API response models.
How is this guide?