{"id":20230383,"url":"https://github.com/manuelarte/pagorminator","last_synced_at":"2026-03-12T00:06:58.560Z","repository":{"id":262010444,"uuid":"885978741","full_name":"manuelarte/pagorminator","owner":"manuelarte","description":"Pagination plugin for Gorm","archived":false,"fork":false,"pushed_at":"2024-12-24T13:34:21.000Z","size":34,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-24T14:41:56.123Z","etag":null,"topics":["go","golang","golang-library","gorm","gorm-orm","gorm-plugin","library","pagination","plugin"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/manuelarte.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-09T21:36:31.000Z","updated_at":"2024-12-24T13:33:11.000Z","dependencies_parsed_at":null,"dependency_job_id":"323abf44-743e-4d39-9abc-5ad8ef837b47","html_url":"https://github.com/manuelarte/pagorminator","commit_stats":null,"previous_names":["manuelarte/pagorminator"],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelarte%2Fpagorminator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelarte%2Fpagorminator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelarte%2Fpagorminator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/manuelarte%2Fpagorminator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/manuelarte","download_url":"https://codeload.github.com/manuelarte/pagorminator/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233824488,"owners_count":18736009,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","golang","golang-library","gorm","gorm-orm","gorm-plugin","library","pagination","plugin"],"created_at":"2024-11-14T07:42:21.952Z","updated_at":"2026-02-18T11:07:35.935Z","avatar_url":"https://github.com/manuelarte.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📃 PaGorminator\n\n[![CI](https://github.com/manuelarte/pagorminator/actions/workflows/ci.yml/badge.svg)](https://github.com/manuelarte/pagorminator/actions/workflows/ci.yml)\n![coverage](https://raw.githubusercontent.com/manuelarte/pagorminator/badges/.badges/main/coverage.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/manuelarte/pagorminator)](https://goreportcard.com/report/github.com/manuelarte/pagorminator)\n[![Go Reference](https://pkg.go.dev/badge/github.com/manuelarte/pagorminator.svg)](https://pkg.go.dev/github.com/manuelarte/pagorminator)\n[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/10813/badge)](https://www.bestpractices.dev/projects/10813)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=manuelarte_pagorminator\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=manuelarte_pagorminator)\n![version](https://img.shields.io/github/v/release/manuelarte/pagorminator)\n\nGorm plugin to add **Pagination** to your select queries\n\n\u003cimg src=\"pagorminator_logo.png\" alt=\"logo\" width=\"256\" height=\"256\"/\u003e\n\n## ⬇️ How to install it\n\n```bash\ngo get -u -v github.com/manuelarte/pagorminator\n```\n\n## 🎯 How to use it\n\n### Basic Usage\n\n```go\n// Initialize GORM with PaGorminator plugin\ndb, err := gorm.Open(sqlite.Open(\"file:mem?mode=memory\u0026cache=shared\"), \u0026gorm.Config{})\nif err != nil {\n    panic(\"failed to connect database\")\n}\ndb.Use(pagorminator.PaGorminator{})\n\n// Create a page request (page 0, size 10)\npageRequest, err := pagorminator.NewPageRequest(0, 10)\nif err != nil {\n    // Handle error\n}\n\n// Apply pagination to your query\nvar products []*Product\ndb.Clauses(pageRequest).Find(\u0026products)\n\n// Access pagination information\nfmt.Printf(\"Total elements: %d\\n\", pageRequest.GetTotalElements())\nfmt.Printf(\"Total pages: %d\\n\", pageRequest.GetTotalPages())\n```\n\n### Pagination Parameters\n\nThe pagination struct contains the following data:\n\n+ `page`: page number, e.g. `0` (zero-based indexing)\n+ `size`: page size, e.g. `10`\n+ `sort`: to apply sorting, e.g. `id desc`\n\n**The plugin will automatically calculate the total amount of elements**.\nThe pagination instance provides `GetTotalElements()` and `GetTotalPages()` methods to retrieve the total counts.\nThe pagination starts at index `0`, e.g., if the total pages is `6`, then the pagination index goes from `0` to `5`.\n\n## 🚀 Features\n\n### Sorting\n\nYou can add sorting to your pagination request:\n\n```go\n// Single sort criterion\npageRequest, err := pagorminator.NewPageRequest(0, 10, pagorminator.Desc(\"id\"))\n\n// Multiple sort criteria\npageRequest, err := pagorminator.NewPageRequest(\n\t0, \n\t10, \n    pagorminator.Asc(\"name\"),\n    pagorminator.Desc(\"price\")\n)\n```\n\n### Unpaged Requests\n\nIf you want to retrieve all records without pagination:\n\n```go\n// Create an unpaged request\nunpaged := pagorminator.UnPaged()\ndb.Clauses(unpaged).Find(\u0026products)\n```\n\n#### Debug Mode\n\nYou can enable debug mode to see the SQL queries:\n\n```go\n// Enable debug mode\ndb.Use(pagorminator.PaGorminator{Debug: true})\n```\n\n## Examples\n\nCheck the examples in the [./examples](./examples) folder for more detailed usage patterns.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelarte%2Fpagorminator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmanuelarte%2Fpagorminator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmanuelarte%2Fpagorminator/lists"}