# retoor import math from molodetz.database.core import db def paginate(table_name, before=None, order="desc", cursor_field="created_at", limit=25, **filters): if table_name not in db.tables: return [], None table = db[table_name] criteria = dict(filters) if "deleted_at" not in criteria: criteria["deleted_at"] = None if before: criteria[cursor_field] = {"<": before} if order == "desc" else {">": before} order_by = [f"-{cursor_field}"] if order == "desc" else [cursor_field] rows = list(table.find(_limit=limit + 1, order_by=order_by, **criteria)) next_cursor = None if len(rows) > limit: rows = rows[:limit] next_cursor = rows[-1][cursor_field] return rows, next_cursor def build_pagination(page, total, per_page): pages = max(1, math.ceil(total / per_page)) if per_page else 1 page = min(max(1, page), pages) return { "page": page, "pages": pages, "total": total, "per_page": per_page, "offset": (page - 1) * per_page, "has_prev": page > 1, "has_next": page < pages, }