- Archiver 131 .md dans docs/archive/root-md/ - Archiver 22 .json dans docs/archive/root-json/ - Conserver 7 .md utiles (README, CONTRIBUTING, CHANGELOG, etc.) - Conserver package.json, package-lock.json, turbo.json - Ajouter README d'index dans chaque archive
4.3 KiB
4.3 KiB
Pagination Format Standardization
INT-007: Standardize pagination format
Date: 2025-12-25
Status: Completed
Summary
All paginated API responses in Veza now use a consistent, standardized format that matches frontend expectations.
Standard Pagination Format
All paginated responses follow this structure:
{
"success": true,
"data": {
"items": [...],
"pagination": {
"page": 1,
"limit": 20,
"total": 100,
"total_pages": 5,
"has_next": true,
"has_prev": false,
"next_cursor": "optional_cursor_string",
"prev_cursor": "optional_cursor_string"
}
}
}
Pagination Object Fields
- page (number, required): Current page number (1-based)
- limit (number, required): Number of items per page
- total (number, required): Total number of items across all pages
- total_pages (number, required): Total number of pages
- has_next (boolean, required): Whether there is a next page
- has_prev (boolean, required): Whether there is a previous page
- next_cursor (string, optional): Cursor for cursor-based pagination
- prev_cursor (string, optional): Cursor for cursor-based pagination
Implementation
Backend
All paginated responses are now standardized through:
-
PaginationData(internal/handlers/common.go):- Standardized struct with snake_case field names
- Changed
HasPrevious→has_prevfor consistency - Changed
PreviousCursor→prev_cursorfor consistency
-
BuildPaginationData(internal/handlers/common.go):- Helper function to create standardized pagination data
- Calculates
total_pages,has_next,has_prevautomatically - Used by all handlers for consistent pagination
-
BuildPaginationDataWithCursor(internal/handlers/common.go):- Helper for cursor-based pagination
- Supports both cursor and offset-based pagination
-
Handler Updates:
ListTracks: UsesBuildPaginationDataListUsers: UsesBuildPaginationDataSearchUsers: UsesBuildPaginationDataGetComments: UsesBuildPaginationDataSearchLogs: UsesBuildPaginationData
Frontend
The frontend already expects the standardized format:
PaginationDatatype matches backend structure- Components use
has_next,has_prev,total_pages - Pagination component handles all standard fields
Changes Made
Backend Changes
-
internal/handlers/common.go:- Updated
PaginationDatastruct to use snake_case consistently - Changed
HasPrevious→HasPrev - Changed
PreviousCursor→PrevCursor - Added
BuildPaginationDatahelper function - Added
BuildPaginationDataWithCursorhelper function
- Updated
-
internal/core/track/handler.go:- Updated
ListTracksto useBuildPaginationData - Standardized pagination response format
- Updated
-
internal/handlers/profile_handler.go:- Updated
ListUsersto useBuildPaginationData - Updated
SearchUsersto useBuildPaginationData - Standardized pagination response format
- Updated
-
internal/handlers/comment_handler.go:- Updated
GetCommentsto useBuildPaginationData - Added
has_nextandhas_prevfields
- Updated
-
internal/handlers/audit.go:- Updated
SearchLogsto useBuildPaginationData - Standardized pagination format for both page-based and offset-based
- Updated
Frontend Compatibility
The frontend already supports the standardized format:
PaginationDatatype matches backend structure- All pagination components use standard fields
- No frontend changes required
Migration Notes
- All handlers now use
BuildPaginationDatahelper - Consistent field naming (snake_case)
- All paginated responses include
has_nextandhas_prev - Cursor-based pagination supported via optional fields
Files Modified
veza-backend-api/internal/handlers/common.goveza-backend-api/internal/core/track/handler.goveza-backend-api/internal/handlers/profile_handler.goveza-backend-api/internal/handlers/comment_handler.goveza-backend-api/internal/handlers/audit.go- Created:
PAGINATION_STANDARD.md(this document)
Next Steps
- ✅ Standardize PaginationData struct
- ✅ Create BuildPaginationData helper
- ✅ Update all handlers to use standardized format
- ✅ Verify frontend compatibility
- ⏳ Add integration tests for pagination format validation