[{"data":1,"prerenderedAt":1794},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-paginate-overview":442,"-hu-paginate-overview-surround":1789},[4,45,60,81,112,129,146,173,197,213,242,280,357,373,385,404,430],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Kezdő lépések","i-lucide-rocket","\u002Fhu\u002Fgetting-started","hu\u002F1.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Bevezetés","\u002Fhu\u002Fgetting-started\u002Fintroduction","hu\u002F1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Laravelből érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-laravel","hu\u002F1.getting-started\u002F2.coming-from-laravel","i-lucide-arrow-right-left",{"title":21,"path":22,"stem":23,"icon":19},"Symfonyból érkezőknek","\u002Fhu\u002Fgetting-started\u002Fcoming-from-symfony","hu\u002F1.getting-started\u002F3.coming-from-symfony",{"title":25,"path":26,"stem":27,"icon":28},"Telepítés","\u002Fhu\u002Fgetting-started\u002Finstallation","hu\u002F1.getting-started\u002F4.installation","i-lucide-download",{"title":30,"path":31,"stem":32,"icon":33},"Az első modulod","\u002Fhu\u002Fgetting-started\u002Ffirst-module","hu\u002F1.getting-started\u002F5.first-module","i-lucide-package-plus",{"title":35,"path":36,"stem":37,"icon":38},"Projektstruktúra","\u002Fhu\u002Fgetting-started\u002Fproject-structure","hu\u002F1.getting-started\u002F6.project-structure","i-lucide-folder-tree",{"title":40,"path":41,"stem":42,"icon":43},"A shop mintaalkalmazás","\u002Fhu\u002Fgetting-started\u002Fsample-app","hu\u002F1.getting-started\u002F7.sample-app","i-lucide-shopping-cart",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"queue","i-lucide-layers","\u002Fhu\u002Fqueue","hu\u002F10.queue",[51,56],{"title":52,"path":53,"stem":54,"icon":55},"Áttekintés","\u002Fhu\u002Fqueue\u002Foverview","hu\u002F10.queue\u002F1.overview","i-lucide-list-ordered",{"title":57,"path":58,"stem":59,"icon":47},"Taskok","\u002Fhu\u002Fqueue\u002Ftasks","hu\u002F10.queue\u002F2.tasks",{"title":61,"icon":62,"path":63,"stem":64,"children":65,"page":44},"events","i-lucide-workflow","\u002Fhu\u002Fevents","hu\u002F11.events",[66,71,76],{"title":67,"path":68,"stem":69,"icon":70},"Események","\u002Fhu\u002Fevents\u002Foverview","hu\u002F11.events\u002F1.overview","i-lucide-radio",{"title":72,"path":73,"stem":74,"icon":75},"Outbox","\u002Fhu\u002Fevents\u002Foutbox","hu\u002F11.events\u002F2.outbox","i-lucide-inbox",{"title":77,"path":78,"stem":79,"icon":80},"Ütemezés","\u002Fhu\u002Fevents\u002Fscheduler","hu\u002F11.events\u002F3.scheduler","i-lucide-calendar-clock",{"title":82,"icon":83,"path":84,"stem":85,"children":86,"page":44},"auth","i-lucide-shield-check","\u002Fhu\u002Fauth","hu\u002F12.auth",[87,92,97,102,107],{"title":88,"path":89,"stem":90,"icon":91},"Autentikáció","\u002Fhu\u002Fauth\u002Foverview","hu\u002F12.auth\u002F1.overview","i-lucide-key-round",{"title":93,"path":94,"stem":95,"icon":96},"RBAC","\u002Fhu\u002Fauth\u002Frbac","hu\u002F12.auth\u002F2.rbac","i-lucide-users",{"title":98,"path":99,"stem":100,"icon":101},"Policy-k","\u002Fhu\u002Fauth\u002Fpolicy","hu\u002F12.auth\u002F3.policy","i-lucide-gavel",{"title":103,"path":104,"stem":105,"icon":106},"Az auth önálló használata","\u002Fhu\u002Fauth\u002Fstandalone","hu\u002F12.auth\u002F4.standalone","i-lucide-plug",{"title":108,"path":109,"stem":110,"icon":111},"Social login goth-tal, önállóan","\u002Fhu\u002Fauth\u002Fsocial-standalone","hu\u002F12.auth\u002F5.social-standalone","i-lucide-log-in",{"title":113,"icon":114,"path":115,"stem":116,"children":117,"page":44},"mail","i-lucide-mail","\u002Fhu\u002Fmail","hu\u002F13.mail",[118,121,125],{"title":52,"path":119,"stem":120,"icon":114},"\u002Fhu\u002Fmail\u002Foverview","hu\u002F13.mail\u002F1.overview",{"title":122,"path":123,"stem":124,"icon":114},"SMTP","\u002Fhu\u002Fmail\u002Fsmtp","hu\u002F13.mail\u002F2.smtp",{"title":126,"path":127,"stem":128,"icon":114},"MJML","\u002Fhu\u002Fmail\u002Fmjml","hu\u002F13.mail\u002F3.mjml",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":44},"notify","i-lucide-bell","\u002Fhu\u002Fnotify","hu\u002F14.notify",[135,138,142],{"title":52,"path":136,"stem":137,"icon":131},"\u002Fhu\u002Fnotify\u002Foverview","hu\u002F14.notify\u002F1.overview",{"title":139,"path":140,"stem":141,"icon":131},"Database csatorna","\u002Fhu\u002Fnotify\u002Fdatabase","hu\u002F14.notify\u002F2.database",{"title":143,"path":144,"stem":145,"icon":131},"Broadcast csatorna","\u002Fhu\u002Fnotify\u002Fbroadcast","hu\u002F14.notify\u002F3.broadcast",{"title":147,"icon":148,"path":149,"stem":150,"children":151,"page":44},"storage","i-lucide-hard-drive","\u002Fhu\u002Fstorage","hu\u002F15.storage",[152,155,159,163,168],{"title":52,"path":153,"stem":154,"icon":148},"\u002Fhu\u002Fstorage\u002Foverview","hu\u002F15.storage\u002F1.overview",{"title":156,"path":157,"stem":158},"Disk API","\u002Fhu\u002Fstorage\u002Fdisk-api","hu\u002F15.storage\u002F2.disk-api",{"title":160,"path":161,"stem":162,"icon":148},"Memória és helyi lemez","\u002Fhu\u002Fstorage\u002Flocal","hu\u002F15.storage\u002F3.local",{"title":164,"path":165,"stem":166,"icon":167},"S3","\u002Fhu\u002Fstorage\u002Fs3","hu\u002F15.storage\u002F4.s3","i-lucide-cloud",{"title":169,"path":170,"stem":171,"icon":172},"Tesztelés","\u002Fhu\u002Fstorage\u002Ftesting","hu\u002F15.storage\u002F5.testing","i-lucide-flask-conical",{"title":174,"icon":175,"path":176,"stem":177,"children":178,"page":44},"telemetry","i-lucide-activity","\u002Fhu\u002Ftelemetry","hu\u002F16.telemetry",[179,182,187,192],{"title":52,"path":180,"stem":181,"icon":175},"\u002Fhu\u002Ftelemetry\u002Foverview","hu\u002F16.telemetry\u002F1.overview",{"title":183,"path":184,"stem":185,"icon":186},"Logolás","\u002Fhu\u002Ftelemetry\u002Flogging","hu\u002F16.telemetry\u002F2.logging","i-lucide-scroll-text",{"title":188,"path":189,"stem":190,"icon":191},"OpenTelemetry","\u002Fhu\u002Ftelemetry\u002Fopentelemetry","hu\u002F16.telemetry\u002F3.opentelemetry","i-lucide-radar",{"title":193,"path":194,"stem":195,"icon":196},"Sentry","\u002Fhu\u002Ftelemetry\u002Fsentry","hu\u002F16.telemetry\u002F4.sentry","i-lucide-bug",{"title":198,"icon":199,"path":200,"stem":201,"children":202,"page":44},"Referencia","i-lucide-book-open","\u002Fhu\u002Freference","hu\u002F17.reference",[203,208],{"title":204,"path":205,"stem":206,"icon":207},"Konfiguráció","\u002Fhu\u002Freference\u002Fconfiguration","hu\u002F17.reference\u002F1.configuration","i-lucide-settings",{"title":209,"path":210,"stem":211,"icon":212},"Külső függőségek","\u002Fhu\u002Freference\u002Fdependencies","hu\u002F17.reference\u002F2.dependencies","i-lucide-package",{"title":214,"icon":215,"path":216,"stem":217,"children":218,"page":44},"Koncepciók","i-lucide-lightbulb","\u002Fhu\u002Fconcepts","hu\u002F2.concepts",[219,223,228,232,237],{"title":220,"path":221,"stem":222,"icon":47},"Architektúra","\u002Fhu\u002Fconcepts\u002Farchitecture","hu\u002F2.concepts\u002F1.architecture",{"title":224,"path":225,"stem":226,"icon":227},"Hibamodell","\u002Fhu\u002Fconcepts\u002Ferror-model","hu\u002F2.concepts\u002F2.error-model","i-lucide-shield-alert",{"title":204,"path":229,"stem":230,"icon":231},"\u002Fhu\u002Fconcepts\u002Fconfiguration","hu\u002F2.concepts\u002F3.configuration","i-lucide-settings-2",{"title":233,"path":234,"stem":235,"icon":236},"Codegen pipeline","\u002Fhu\u002Fconcepts\u002Fcodegen-pipeline","hu\u002F2.concepts\u002F4.codegen-pipeline","i-lucide-file-json",{"title":238,"path":239,"stem":240,"icon":241},"Design patternek","\u002Fhu\u002Fconcepts\u002Fdesign-patterns","hu\u002F2.concepts\u002F5.design-patterns","i-lucide-puzzle",{"title":243,"icon":244,"path":245,"stem":246,"children":247,"page":44},"A kit","i-lucide-box","\u002Fhu\u002Fkit","hu\u002F3.kit",[248,252,257,262,267,271,276],{"title":249,"path":250,"stem":251,"icon":244},"A kit áttekintése","\u002Fhu\u002Fkit\u002Foverview","hu\u002F3.kit\u002F1.overview",{"title":253,"path":254,"stem":255,"icon":256},"Alkalmazás-életciklus","\u002Fhu\u002Fkit\u002Fapp","hu\u002F3.kit\u002F2.app","i-lucide-power",{"title":258,"path":259,"stem":260,"icon":261},"Szerver","\u002Fhu\u002Fkit\u002Fserver","hu\u002F3.kit\u002F3.server","i-lucide-server",{"title":263,"path":264,"stem":265,"icon":266},"Worker","\u002Fhu\u002Fkit\u002Fworker","hu\u002F3.kit\u002F4.worker","i-lucide-cog",{"title":268,"path":269,"stem":270,"icon":70},"Realtime","\u002Fhu\u002Fkit\u002Frealtime","hu\u002F3.kit\u002F5.realtime",{"title":272,"path":273,"stem":274,"icon":275},"Migrációk","\u002Fhu\u002Fkit\u002Fmigrations","hu\u002F3.kit\u002F6.migrations","i-lucide-file-stack",{"title":277,"path":278,"stem":279,"icon":111},"Social login","\u002Fhu\u002Fkit\u002Fsocial-login","hu\u002F3.kit\u002F7.social-login",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":44},"CLI referencia","i-lucide-terminal","\u002Fhu\u002Fcli","hu\u002F4.cli",[286,289,294,299,304,309,314,319,324,329,334,338,343,348,352],{"title":52,"path":287,"stem":288,"icon":282},"\u002Fhu\u002Fcli\u002Foverview","hu\u002F4.cli\u002F1.overview",{"title":290,"path":291,"stem":292,"icon":293},"add db","\u002Fhu\u002Fcli\u002Fadd-db","hu\u002F4.cli\u002F10.add-db","i-lucide-database-zap",{"title":295,"path":296,"stem":297,"icon":298},"add compose \u002F add docker","\u002Fhu\u002Fcli\u002Fadd-compose","hu\u002F4.cli\u002F11.add-compose","i-lucide-container",{"title":300,"path":301,"stem":302,"icon":303},"add mail","\u002Fhu\u002Fcli\u002Fadd-mail","hu\u002F4.cli\u002F12.add-mail","i-lucide-mail-plus",{"title":305,"path":306,"stem":307,"icon":308},"add notification","\u002Fhu\u002Fcli\u002Fadd-notification","hu\u002F4.cli\u002F13.add-notification","i-lucide-bell-plus",{"title":310,"path":311,"stem":312,"icon":313},"add realtime","\u002Fhu\u002Fcli\u002Fadd-realtime","hu\u002F4.cli\u002F14.add-realtime","i-lucide-radio-tower",{"title":315,"path":316,"stem":317,"icon":318},"add seeder","\u002Fhu\u002Fcli\u002Fadd-seeder","hu\u002F4.cli\u002F15.add-seeder","i-lucide-sprout",{"title":320,"path":321,"stem":322,"icon":323},"new project","\u002Fhu\u002Fcli\u002Fnew-project","hu\u002F4.cli\u002F2.new-project","i-lucide-folder-plus",{"title":325,"path":326,"stem":327,"icon":328},"new module","\u002Fhu\u002Fcli\u002Fnew-module","hu\u002F4.cli\u002F3.new-module","i-lucide-blocks",{"title":330,"path":331,"stem":332,"icon":333},"add surface","\u002Fhu\u002Fcli\u002Fadd-surface","hu\u002F4.cli\u002F4.add-surface","i-lucide-layers-2",{"title":335,"path":336,"stem":337,"icon":244},"add core","\u002Fhu\u002Fcli\u002Fadd-core","hu\u002F4.cli\u002F5.add-core",{"title":339,"path":340,"stem":341,"icon":342},"add handler","\u002Fhu\u002Fcli\u002Fadd-handler","hu\u002F4.cli\u002F6.add-handler","i-lucide-webhook",{"title":344,"path":345,"stem":346,"icon":347},"new migration","\u002Fhu\u002Fcli\u002Fnew-migration","hu\u002F4.cli\u002F7.new-migration","i-lucide-file-plus",{"title":349,"path":350,"stem":351,"icon":266},"worker generátorok","\u002Fhu\u002Fcli\u002Fworker-generators","hu\u002F4.cli\u002F8.worker-generators",{"title":353,"path":354,"stem":355,"icon":356},"upgrade templates","\u002Fhu\u002Fcli\u002Fupgrade-templates","hu\u002F4.cli\u002F9.upgrade-templates","i-lucide-refresh-cw",{"title":358,"icon":227,"path":359,"stem":360,"children":361,"page":44},"errs","\u002Fhu\u002Ferrs","hu\u002F5.errs",[362,365,369],{"title":52,"path":363,"stem":364,"icon":227},"\u002Fhu\u002Ferrs\u002Foverview","hu\u002F5.errs\u002F1.overview",{"title":366,"path":367,"stem":368},"API","\u002Fhu\u002Ferrs\u002Fapi","hu\u002F5.errs\u002F2.api",{"title":370,"path":371,"stem":372,"icon":227},"Integráció","\u002Fhu\u002Ferrs\u002Fintegration","hu\u002F5.errs\u002F3.integration",{"title":374,"icon":231,"path":375,"stem":376,"children":377,"page":44},"envconf","\u002Fhu\u002Fenvconf","hu\u002F6.envconf",[378,381],{"title":52,"path":379,"stem":380,"icon":231},"\u002Fhu\u002Fenvconf\u002Foverview","hu\u002F6.envconf\u002F1.overview",{"title":382,"path":383,"stem":384},"Receptek","\u002Fhu\u002Fenvconf\u002Frecipes","hu\u002F6.envconf\u002F2.recipes",{"title":386,"icon":387,"path":388,"stem":389,"children":390,"page":44},"httperr","i-lucide-globe","\u002Fhu\u002Fhttperr","hu\u002F7.httperr",[391,394,399],{"title":52,"path":392,"stem":393,"icon":387},"\u002Fhu\u002Fhttperr\u002Foverview","hu\u002F7.httperr\u002F1.overview",{"title":395,"path":396,"stem":397,"icon":398},"Hibaválaszok","\u002Fhu\u002Fhttperr\u002Ferror-responses","hu\u002F7.httperr\u002F2.error-responses","i-lucide-octagon-alert",{"title":400,"path":401,"stem":402,"icon":403},"Validáció","\u002Fhu\u002Fhttperr\u002Fvalidation","hu\u002F7.httperr\u002F3.validation","i-lucide-badge-check",{"title":405,"icon":406,"path":407,"stem":408,"children":409,"page":44},"dbx","i-lucide-database","\u002Fhu\u002Fdbx","hu\u002F8.dbx",[410,413,417,421,426],{"title":52,"path":411,"stem":412,"icon":406},"\u002Fhu\u002Fdbx\u002Foverview","hu\u002F8.dbx\u002F1.overview",{"title":414,"path":415,"stem":416,"icon":106},"pgx","\u002Fhu\u002Fdbx\u002Fpg","hu\u002F8.dbx\u002F2.pg",{"title":418,"path":419,"stem":420,"icon":47},"bun","\u002Fhu\u002Fdbx\u002Fbunx","hu\u002F8.dbx\u002F3.bunx",{"title":422,"path":423,"stem":424,"icon":425},"Tranzakciók","\u002Fhu\u002Fdbx\u002Ftransactions","hu\u002F8.dbx\u002F4.transactions","i-lucide-git-merge",{"title":427,"path":428,"stem":429,"icon":318},"Seederek","\u002Fhu\u002Fdbx\u002Fseed","hu\u002F8.dbx\u002F5.seed",{"title":431,"icon":55,"path":432,"stem":433,"children":434,"page":44},"paginate","\u002Fhu\u002Fpaginate","hu\u002F9.paginate",[435,438],{"title":52,"path":436,"stem":437,"icon":55},"\u002Fhu\u002Fpaginate\u002Foverview","hu\u002F9.paginate\u002F1.overview",{"title":439,"path":440,"stem":441,"icon":19},"Cursor-lapozás","\u002Fhu\u002Fpaginate\u002Fcursor","hu\u002F9.paginate\u002F2.cursor",{"id":443,"title":52,"body":444,"description":1782,"extension":1783,"links":1784,"meta":1785,"navigation":1786,"path":436,"seo":1787,"stem":437,"__hash__":1788},"docs_hu\u002Fhu\u002F9.paginate\u002F1.overview.md",{"type":445,"value":446,"toc":1774},"minimark",[447,473,501,505,537,552,556,570,704,824,827,921,948,955,1079,1092,1108,1112,1121,1687,1691,1712,1716,1749,1753,1770],[448,449,450,451,454,455,458,459,463,464,467,468,472],"p",{},"A ",[452,453,431],"code",{}," egy önálló Go modul (",[452,456,457],{},"github.com\u002Fgp-system\u002Fpaginate","), ami a lapozás két unalmas-de-veszélyes felét központosítja: a kliensinput ",[460,461,462],"strong",{},"normalizálását"," (határok, defaultok, túlcsordulás-védelem) és az eredmény ",[460,465,466],{},"becsomagolását"," a válaszmodellhez. Két módot ad: a klasszikus page\u002Fper-page (offset) lapozást, amit ez az oldal tárgyal, és a ",[469,470,471],"a",{"href":440},"cursor- (keyset-) lapozást",", aminek saját oldala van, mert más a paraméter-alakja és más a helyességi szabályok köre.",[474,475,480],"pre",{"className":476,"code":477,"language":478,"meta":479,"style":479},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import \"github.com\u002Fgp-system\u002Fpaginate\"\n","go","",[452,481,482],{"__ignoreMap":479},[483,484,487,491,495,498],"span",{"class":485,"line":486},"line",1,[483,488,490],{"class":489},"s7zQu","import",[483,492,494],{"class":493},"sMK4o"," \"",[483,496,457],{"class":497},"sBMFI",[483,499,500],{"class":493},"\"\n",[502,503,25],"h2",{"id":504},"telepítés",[474,506,510],{"className":507,"code":508,"language":509,"meta":479,"style":479},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go get github.com\u002Fgp-system\u002Fpaginate@v0.1.0 # a kit is ezt a taget használja\ngo get github.com\u002Fgp-system\u002Fpaginate@latest\n","sh",[452,511,512,527],{"__ignoreMap":479},[483,513,514,516,520,523],{"class":485,"line":486},[483,515,478],{"class":497},[483,517,519],{"class":518},"sfazB"," get",[483,521,522],{"class":518}," github.com\u002Fgp-system\u002Fpaginate@v0.1.0",[483,524,526],{"class":525},"sHwdD"," # a kit is ezt a taget használja\n",[483,528,530,532,534],{"class":485,"line":529},2,[483,531,478],{"class":497},[483,533,519],{"class":518},[483,535,536],{"class":518}," github.com\u002Fgp-system\u002Fpaginate@latest\n",[448,538,539,540,542,543,547,548,551],{},"Go 1.25+. A ",[452,541,431],{}," csak az ",[469,544,545],{"href":363},[452,546,358],{},"-től függ (az ",[452,549,550],{},"ErrInvalidCursor"," miatt); nincs query builder, nincs adatbázis-driver, más nem kerül be vele.",[502,553,555],{"id":554},"offset-lapozás","Offset lapozás",[448,557,450,558,561,562,565,566,569],{},[469,559,560],{"href":234},"generált"," request-paraméterek opcionális pointerként érkeznek (",[452,563,564],{},"*int","); a ",[452,567,568],{},"Normalize"," egyszer szorítja őket határok közé, nem minden handlerben külön:",[474,571,573],{"className":476,"code":572,"language":478,"meta":479,"style":479},"func Normalize(page, perPage *int, opts ...Option) Params\n\ntype Params struct{ Page, PerPage int }\nfunc (p Params) Limit() int  \u002F\u002F SQL LIMIT\nfunc (p Params) Offset() int \u002F\u002F SQL OFFSET: (Page-1)*PerPage\n",[452,574,575,621,627,653,681],{"__ignoreMap":479},[483,576,577,580,584,587,591,594,597,600,604,606,609,612,615,618],{"class":485,"line":486},[483,578,579],{"class":493},"func",[483,581,583],{"class":582},"s2Zo4"," Normalize",[483,585,586],{"class":493},"(",[483,588,590],{"class":589},"sHdIc","page",[483,592,593],{"class":493},",",[483,595,596],{"class":589}," perPage",[483,598,599],{"class":493}," *",[483,601,603],{"class":602},"spNyl","int",[483,605,593],{"class":493},[483,607,608],{"class":589}," opts",[483,610,611],{"class":493}," ...",[483,613,614],{"class":497},"Option",[483,616,617],{"class":493},")",[483,619,620],{"class":497}," Params\n",[483,622,623],{"class":485,"line":529},[483,624,626],{"emptyLinePlaceholder":625},true,"\n",[483,628,630,633,636,639,643,645,648,650],{"class":485,"line":629},3,[483,631,632],{"class":493},"type",[483,634,635],{"class":497}," Params",[483,637,638],{"class":493}," struct{",[483,640,642],{"class":641},"sTEyZ"," Page",[483,644,593],{"class":493},[483,646,647],{"class":641}," PerPage ",[483,649,603],{"class":602},[483,651,652],{"class":493}," }\n",[483,654,656,658,661,664,667,669,672,675,678],{"class":485,"line":655},4,[483,657,579],{"class":493},[483,659,660],{"class":493}," (",[483,662,663],{"class":589},"p ",[483,665,666],{"class":497},"Params",[483,668,617],{"class":493},[483,670,671],{"class":582}," Limit",[483,673,674],{"class":493},"()",[483,676,677],{"class":602}," int",[483,679,680],{"class":525},"  \u002F\u002F SQL LIMIT\n",[483,682,684,686,688,690,692,694,697,699,701],{"class":485,"line":683},5,[483,685,579],{"class":493},[483,687,660],{"class":493},[483,689,663],{"class":589},[483,691,666],{"class":497},[483,693,617],{"class":493},[483,695,696],{"class":582}," Offset",[483,698,674],{"class":493},[483,700,677],{"class":602},[483,702,703],{"class":525}," \u002F\u002F SQL OFFSET: (Page-1)*PerPage\n",[474,705,707],{"className":476,"code":706,"language":478,"meta":479,"style":479},"p := paginate.Normalize(req.Params.Page, req.Params.PerPage) \u002F\u002F defaultok: page 1, perPage 20\nrows, err := r.db.Query(ctx,\n    `SELECT ... ORDER BY created_at DESC LIMIT $1 OFFSET $2`, p.Limit(), p.Offset())\n",[452,708,709,757,790],{"__ignoreMap":479},[483,710,711,713,716,719,722,724,726,729,731,733,735,738,740,743,745,747,749,752,754],{"class":485,"line":486},[483,712,663],{"class":641},[483,714,715],{"class":493},":=",[483,717,718],{"class":641}," paginate",[483,720,721],{"class":493},".",[483,723,568],{"class":582},[483,725,586],{"class":493},[483,727,728],{"class":641},"req",[483,730,721],{"class":493},[483,732,666],{"class":641},[483,734,721],{"class":493},[483,736,737],{"class":641},"Page",[483,739,593],{"class":493},[483,741,742],{"class":641}," req",[483,744,721],{"class":493},[483,746,666],{"class":641},[483,748,721],{"class":493},[483,750,751],{"class":641},"PerPage",[483,753,617],{"class":493},[483,755,756],{"class":525}," \u002F\u002F defaultok: page 1, perPage 20\n",[483,758,759,762,764,767,769,772,774,777,779,782,784,787],{"class":485,"line":529},[483,760,761],{"class":641},"rows",[483,763,593],{"class":493},[483,765,766],{"class":641}," err ",[483,768,715],{"class":493},[483,770,771],{"class":641}," r",[483,773,721],{"class":493},[483,775,776],{"class":641},"db",[483,778,721],{"class":493},[483,780,781],{"class":582},"Query",[483,783,586],{"class":493},[483,785,786],{"class":641},"ctx",[483,788,789],{"class":493},",\n",[483,791,792,795,798,801,803,806,808,811,814,816,818,821],{"class":485,"line":629},[483,793,794],{"class":493},"    `",[483,796,797],{"class":518},"SELECT ... ORDER BY created_at DESC LIMIT $1 OFFSET $2",[483,799,800],{"class":493},"`",[483,802,593],{"class":493},[483,804,805],{"class":641}," p",[483,807,721],{"class":493},[483,809,810],{"class":582},"Limit",[483,812,813],{"class":493},"(),",[483,815,805],{"class":641},[483,817,721],{"class":493},[483,819,820],{"class":582},"Offset",[483,822,823],{"class":493},"())\n",[448,825,826],{},"A határok opciókkal hangolhatók:",[474,828,830],{"className":476,"code":829,"language":478,"meta":479,"style":479},"p := paginate.Normalize(page, perPage,\n    paginate.WithDefaultPerPage(15), \u002F\u002F ha a kérés nem ad perPage-et (default: 20)\n    paginate.WithMaxPerPage(50),     \u002F\u002F felső sapka, bármit is kér a kliens (default: 100)\n    paginate.WithMaxPage(10_000))    \u002F\u002F a page number sapkája (default: 1 000 000)\n",[452,831,832,854,876,895],{"__ignoreMap":479},[483,833,834,836,838,840,842,844,846,848,850,852],{"class":485,"line":486},[483,835,663],{"class":641},[483,837,715],{"class":493},[483,839,718],{"class":641},[483,841,721],{"class":493},[483,843,568],{"class":582},[483,845,586],{"class":493},[483,847,590],{"class":641},[483,849,593],{"class":493},[483,851,596],{"class":641},[483,853,789],{"class":493},[483,855,856,859,861,864,866,870,873],{"class":485,"line":529},[483,857,858],{"class":641},"    paginate",[483,860,721],{"class":493},[483,862,863],{"class":582},"WithDefaultPerPage",[483,865,586],{"class":493},[483,867,869],{"class":868},"sbssI","15",[483,871,872],{"class":493},"),",[483,874,875],{"class":525}," \u002F\u002F ha a kérés nem ad perPage-et (default: 20)\n",[483,877,878,880,882,885,887,890,892],{"class":485,"line":629},[483,879,858],{"class":641},[483,881,721],{"class":493},[483,883,884],{"class":582},"WithMaxPerPage",[483,886,586],{"class":493},[483,888,889],{"class":868},"50",[483,891,872],{"class":493},[483,893,894],{"class":525},"     \u002F\u002F felső sapka, bármit is kér a kliens (default: 100)\n",[483,896,897,899,901,904,906,909,912,915,918],{"class":485,"line":655},[483,898,858],{"class":641},[483,900,721],{"class":493},[483,902,903],{"class":582},"WithMaxPage",[483,905,586],{"class":493},[483,907,908],{"class":868},"10",[483,910,911],{"class":493},"_",[483,913,914],{"class":868},"000",[483,916,917],{"class":493},"))",[483,919,920],{"class":525},"    \u002F\u002F a page number sapkája (default: 1 000 000)\n",[448,922,450,923,925,926,929,930,933,934,937,938,941,942,944,945,947],{},[452,924,903],{}," nem kozmetika: az ",[452,927,928],{},"Offset()"," a ",[452,931,932],{},"(page-1)*perPage"," szorzat. Sapka nélkül egy ellenséges ",[452,935,936],{},"?page="," érték int-túlcsordulást vagy patologikus ",[452,939,940],{},"OFFSET","-et provokálhatna. A ",[452,943,568],{}," után az ",[452,946,928],{}," garantáltan biztonságos.",[448,949,950,951,954],{},"Az eredményt a ",[452,952,953],{},"Page[T]"," csomagolja a válaszhoz:",[474,956,958],{"className":476,"code":957,"language":478,"meta":479,"style":479},"func NewPage[T any](items []T, total int64, p Params) Page[T]\n\ntype Page[T any] struct {\n    Items   []T\n    Total   int64\n    Page    int\n    PerPage int\n}\n",[452,959,960,1012,1016,1037,1048,1056,1065,1073],{"__ignoreMap":479},[483,961,962,964,967,970,973,976,979,982,985,987,989,992,995,997,999,1001,1003,1005,1007,1009],{"class":485,"line":486},[483,963,579],{"class":493},[483,965,966],{"class":582}," NewPage",[483,968,969],{"class":493},"[",[483,971,972],{"class":589},"T",[483,974,975],{"class":497}," any",[483,977,978],{"class":493},"](",[483,980,981],{"class":589},"items",[483,983,984],{"class":493}," []",[483,986,972],{"class":497},[483,988,593],{"class":493},[483,990,991],{"class":589}," total",[483,993,994],{"class":602}," int64",[483,996,593],{"class":493},[483,998,805],{"class":589},[483,1000,635],{"class":497},[483,1002,617],{"class":493},[483,1004,642],{"class":497},[483,1006,969],{"class":493},[483,1008,972],{"class":497},[483,1010,1011],{"class":493},"]\n",[483,1013,1014],{"class":485,"line":529},[483,1015,626],{"emptyLinePlaceholder":625},[483,1017,1018,1020,1022,1024,1026,1028,1031,1034],{"class":485,"line":629},[483,1019,632],{"class":493},[483,1021,642],{"class":497},[483,1023,969],{"class":493},[483,1025,972],{"class":589},[483,1027,975],{"class":497},[483,1029,1030],{"class":493},"]",[483,1032,1033],{"class":493}," struct",[483,1035,1036],{"class":493}," {\n",[483,1038,1039,1042,1045],{"class":485,"line":655},[483,1040,1041],{"class":641},"    Items   ",[483,1043,1044],{"class":493},"[]",[483,1046,1047],{"class":497},"T\n",[483,1049,1050,1053],{"class":485,"line":683},[483,1051,1052],{"class":641},"    Total   ",[483,1054,1055],{"class":602},"int64\n",[483,1057,1059,1062],{"class":485,"line":1058},6,[483,1060,1061],{"class":641},"    Page    ",[483,1063,1064],{"class":602},"int\n",[483,1066,1068,1071],{"class":485,"line":1067},7,[483,1069,1070],{"class":641},"    PerPage ",[483,1072,1064],{"class":602},[483,1074,1076],{"class":485,"line":1075},8,[483,1077,1078],{"class":493},"}\n",[448,1080,450,1081,1083,1084,1087,1088,1091],{},[452,1082,953],{}," a scaffoldolt ",[452,1085,1086],{},"shared\u002Fpaginator.tsp"," ",[452,1089,1090],{},"Paginated\u003CT>"," modelljének tükre, így a generált válaszmodellre mappelés mechanikus.",[1093,1094,1095,1096,1099,1100,1103,1104,721],"note",{},"Az offset lapozás a kényelmes default kis, admin-jellegű listákhoz, ahol a ",[452,1097,1098],{},"Total"," és az adott oldalra ugrás jobban számít, mint a nyers áteresztőképesség. Egy nagy vagy gyorsan növő táblán a ",[469,1101,1102],{"href":440},"cursor-lapozás"," az, ami gyors és stabil marad, ahogy a tábla nő; a teljes összevetéshez lásd ",[469,1105,1107],{"href":1106},"\u002Fhu\u002Fpaginate\u002Fcursor#mikor-melyiket","Mikor melyiket",[502,1109,1111],{"id":1110},"önálló-példa","Önálló példa",[448,1113,450,1114,1116,1117,1120],{},[452,1115,431],{},"-hez semmi nem kell a kitből: egy sima ",[452,1118,1119],{},"net\u002Fhttp"," handler elég a normalizálj-majd-csomagold alak bemutatásához.",[474,1122,1125],{"className":476,"code":1123,"filename":1124,"language":478,"meta":479,"style":479},"package main\n\nimport (\n    \"encoding\u002Fjson\"\n    \"net\u002Fhttp\"\n    \"strconv\"\n\n    \"github.com\u002Fgp-system\u002Fpaginate\"\n)\n\ntype Product struct {\n    ID   string `json:\"id\"`\n    Name string `json:\"name\"`\n}\n\nfunc listProducts(w http.ResponseWriter, r *http.Request) {\n    page := atoiPtr(r.URL.Query().Get(\"page\"))\n    perPage := atoiPtr(r.URL.Query().Get(\"per_page\"))\n    p := paginate.Normalize(page, perPage, paginate.WithMaxPerPage(50))\n\n    items, total := fetchProducts(p.Limit(), p.Offset()) \u002F\u002F saját query\n    json.NewEncoder(w).Encode(paginate.NewPage(items, total, p))\n}\n\nfunc atoiPtr(s string) *int {\n    if s == \"\" {\n        return nil\n    }\n    n, err := strconv.Atoi(s)\n    if err != nil {\n        return nil\n    }\n    return &n\n}\n\nfunc fetchProducts(limit, offset int) ([]Product, int64) {\n    return nil, 0 \u002F\u002F saját repository-hívás\n}\n","main.go",[452,1126,1127,1135,1139,1146,1156,1164,1173,1177,1185,1191,1196,1208,1226,1241,1246,1251,1290,1333,1370,1406,1411,1449,1493,1498,1503,1526,1543,1552,1558,1584,1599,1606,1611,1623,1628,1633,1668,1682],{"__ignoreMap":479},[483,1128,1129,1132],{"class":485,"line":486},[483,1130,1131],{"class":493},"package",[483,1133,1134],{"class":497}," main\n",[483,1136,1137],{"class":485,"line":529},[483,1138,626],{"emptyLinePlaceholder":625},[483,1140,1141,1143],{"class":485,"line":629},[483,1142,490],{"class":489},[483,1144,1145],{"class":493}," (\n",[483,1147,1148,1151,1154],{"class":485,"line":655},[483,1149,1150],{"class":493},"    \"",[483,1152,1153],{"class":497},"encoding\u002Fjson",[483,1155,500],{"class":493},[483,1157,1158,1160,1162],{"class":485,"line":683},[483,1159,1150],{"class":493},[483,1161,1119],{"class":497},[483,1163,500],{"class":493},[483,1165,1166,1168,1171],{"class":485,"line":1058},[483,1167,1150],{"class":493},[483,1169,1170],{"class":497},"strconv",[483,1172,500],{"class":493},[483,1174,1175],{"class":485,"line":1067},[483,1176,626],{"emptyLinePlaceholder":625},[483,1178,1179,1181,1183],{"class":485,"line":1075},[483,1180,1150],{"class":493},[483,1182,457],{"class":497},[483,1184,500],{"class":493},[483,1186,1188],{"class":485,"line":1187},9,[483,1189,1190],{"class":493},")\n",[483,1192,1194],{"class":485,"line":1193},10,[483,1195,626],{"emptyLinePlaceholder":625},[483,1197,1199,1201,1204,1206],{"class":485,"line":1198},11,[483,1200,632],{"class":493},[483,1202,1203],{"class":497}," Product",[483,1205,1033],{"class":493},[483,1207,1036],{"class":493},[483,1209,1211,1214,1217,1220,1223],{"class":485,"line":1210},12,[483,1212,1213],{"class":641},"    ID   ",[483,1215,1216],{"class":602},"string",[483,1218,1219],{"class":493}," `",[483,1221,1222],{"class":518},"json:\"id\"",[483,1224,1225],{"class":493},"`\n",[483,1227,1229,1232,1234,1236,1239],{"class":485,"line":1228},13,[483,1230,1231],{"class":641},"    Name ",[483,1233,1216],{"class":602},[483,1235,1219],{"class":493},[483,1237,1238],{"class":518},"json:\"name\"",[483,1240,1225],{"class":493},[483,1242,1244],{"class":485,"line":1243},14,[483,1245,1078],{"class":493},[483,1247,1249],{"class":485,"line":1248},15,[483,1250,626],{"emptyLinePlaceholder":625},[483,1252,1254,1256,1259,1261,1264,1267,1269,1272,1274,1276,1278,1281,1283,1286,1288],{"class":485,"line":1253},16,[483,1255,579],{"class":493},[483,1257,1258],{"class":582}," listProducts",[483,1260,586],{"class":493},[483,1262,1263],{"class":589},"w",[483,1265,1266],{"class":497}," http",[483,1268,721],{"class":493},[483,1270,1271],{"class":497},"ResponseWriter",[483,1273,593],{"class":493},[483,1275,771],{"class":589},[483,1277,599],{"class":493},[483,1279,1280],{"class":497},"http",[483,1282,721],{"class":493},[483,1284,1285],{"class":497},"Request",[483,1287,617],{"class":493},[483,1289,1036],{"class":493},[483,1291,1293,1296,1298,1301,1303,1306,1308,1311,1313,1315,1318,1321,1323,1326,1328,1330],{"class":485,"line":1292},17,[483,1294,1295],{"class":641},"    page ",[483,1297,715],{"class":493},[483,1299,1300],{"class":582}," atoiPtr",[483,1302,586],{"class":493},[483,1304,1305],{"class":641},"r",[483,1307,721],{"class":493},[483,1309,1310],{"class":641},"URL",[483,1312,721],{"class":493},[483,1314,781],{"class":582},[483,1316,1317],{"class":493},"().",[483,1319,1320],{"class":582},"Get",[483,1322,586],{"class":493},[483,1324,1325],{"class":493},"\"",[483,1327,590],{"class":518},[483,1329,1325],{"class":493},[483,1331,1332],{"class":493},"))\n",[483,1334,1336,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1366,1368],{"class":485,"line":1335},18,[483,1337,1338],{"class":641},"    perPage ",[483,1340,715],{"class":493},[483,1342,1300],{"class":582},[483,1344,586],{"class":493},[483,1346,1305],{"class":641},[483,1348,721],{"class":493},[483,1350,1310],{"class":641},[483,1352,721],{"class":493},[483,1354,781],{"class":582},[483,1356,1317],{"class":493},[483,1358,1320],{"class":582},[483,1360,586],{"class":493},[483,1362,1325],{"class":493},[483,1364,1365],{"class":518},"per_page",[483,1367,1325],{"class":493},[483,1369,1332],{"class":493},[483,1371,1373,1376,1378,1380,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404],{"class":485,"line":1372},19,[483,1374,1375],{"class":641},"    p ",[483,1377,715],{"class":493},[483,1379,718],{"class":641},[483,1381,721],{"class":493},[483,1383,568],{"class":582},[483,1385,586],{"class":493},[483,1387,590],{"class":641},[483,1389,593],{"class":493},[483,1391,596],{"class":641},[483,1393,593],{"class":493},[483,1395,718],{"class":641},[483,1397,721],{"class":493},[483,1399,884],{"class":582},[483,1401,586],{"class":493},[483,1403,889],{"class":868},[483,1405,1332],{"class":493},[483,1407,1409],{"class":485,"line":1408},20,[483,1410,626],{"emptyLinePlaceholder":625},[483,1412,1414,1417,1419,1422,1424,1427,1429,1431,1433,1435,1437,1439,1441,1443,1446],{"class":485,"line":1413},21,[483,1415,1416],{"class":641},"    items",[483,1418,593],{"class":493},[483,1420,1421],{"class":641}," total ",[483,1423,715],{"class":493},[483,1425,1426],{"class":582}," fetchProducts",[483,1428,586],{"class":493},[483,1430,448],{"class":641},[483,1432,721],{"class":493},[483,1434,810],{"class":582},[483,1436,813],{"class":493},[483,1438,805],{"class":641},[483,1440,721],{"class":493},[483,1442,820],{"class":582},[483,1444,1445],{"class":493},"())",[483,1447,1448],{"class":525}," \u002F\u002F saját query\n",[483,1450,1452,1455,1457,1460,1462,1464,1467,1470,1472,1474,1476,1479,1481,1483,1485,1487,1489,1491],{"class":485,"line":1451},22,[483,1453,1454],{"class":641},"    json",[483,1456,721],{"class":493},[483,1458,1459],{"class":582},"NewEncoder",[483,1461,586],{"class":493},[483,1463,1263],{"class":641},[483,1465,1466],{"class":493},").",[483,1468,1469],{"class":582},"Encode",[483,1471,586],{"class":493},[483,1473,431],{"class":641},[483,1475,721],{"class":493},[483,1477,1478],{"class":582},"NewPage",[483,1480,586],{"class":493},[483,1482,981],{"class":641},[483,1484,593],{"class":493},[483,1486,991],{"class":641},[483,1488,593],{"class":493},[483,1490,805],{"class":641},[483,1492,1332],{"class":493},[483,1494,1496],{"class":485,"line":1495},23,[483,1497,1078],{"class":493},[483,1499,1501],{"class":485,"line":1500},24,[483,1502,626],{"emptyLinePlaceholder":625},[483,1504,1506,1508,1510,1512,1515,1518,1520,1522,1524],{"class":485,"line":1505},25,[483,1507,579],{"class":493},[483,1509,1300],{"class":582},[483,1511,586],{"class":493},[483,1513,1514],{"class":589},"s",[483,1516,1517],{"class":602}," string",[483,1519,617],{"class":493},[483,1521,599],{"class":493},[483,1523,603],{"class":602},[483,1525,1036],{"class":493},[483,1527,1529,1532,1535,1538,1541],{"class":485,"line":1528},26,[483,1530,1531],{"class":489},"    if",[483,1533,1534],{"class":641}," s ",[483,1536,1537],{"class":493},"==",[483,1539,1540],{"class":493}," \"\"",[483,1542,1036],{"class":493},[483,1544,1546,1549],{"class":485,"line":1545},27,[483,1547,1548],{"class":489},"        return",[483,1550,1551],{"class":493}," nil\n",[483,1553,1555],{"class":485,"line":1554},28,[483,1556,1557],{"class":493},"    }\n",[483,1559,1561,1564,1566,1568,1570,1573,1575,1578,1580,1582],{"class":485,"line":1560},29,[483,1562,1563],{"class":641},"    n",[483,1565,593],{"class":493},[483,1567,766],{"class":641},[483,1569,715],{"class":493},[483,1571,1572],{"class":641}," strconv",[483,1574,721],{"class":493},[483,1576,1577],{"class":582},"Atoi",[483,1579,586],{"class":493},[483,1581,1514],{"class":641},[483,1583,1190],{"class":493},[483,1585,1587,1589,1591,1594,1597],{"class":485,"line":1586},30,[483,1588,1531],{"class":489},[483,1590,766],{"class":641},[483,1592,1593],{"class":493},"!=",[483,1595,1596],{"class":493}," nil",[483,1598,1036],{"class":493},[483,1600,1602,1604],{"class":485,"line":1601},31,[483,1603,1548],{"class":489},[483,1605,1551],{"class":493},[483,1607,1609],{"class":485,"line":1608},32,[483,1610,1557],{"class":493},[483,1612,1614,1617,1620],{"class":485,"line":1613},33,[483,1615,1616],{"class":489},"    return",[483,1618,1619],{"class":493}," &",[483,1621,1622],{"class":641},"n\n",[483,1624,1626],{"class":485,"line":1625},34,[483,1627,1078],{"class":493},[483,1629,1631],{"class":485,"line":1630},35,[483,1632,626],{"emptyLinePlaceholder":625},[483,1634,1636,1638,1640,1642,1645,1647,1650,1652,1654,1657,1660,1662,1664,1666],{"class":485,"line":1635},36,[483,1637,579],{"class":493},[483,1639,1426],{"class":582},[483,1641,586],{"class":493},[483,1643,1644],{"class":589},"limit",[483,1646,593],{"class":493},[483,1648,1649],{"class":589}," offset",[483,1651,677],{"class":602},[483,1653,617],{"class":493},[483,1655,1656],{"class":493}," ([]",[483,1658,1659],{"class":497},"Product",[483,1661,593],{"class":493},[483,1663,994],{"class":602},[483,1665,617],{"class":493},[483,1667,1036],{"class":493},[483,1669,1671,1673,1676,1679],{"class":485,"line":1670},37,[483,1672,1616],{"class":489},[483,1674,1675],{"class":493}," nil,",[483,1677,1678],{"class":868}," 0",[483,1680,1681],{"class":525}," \u002F\u002F saját repository-hívás\n",[483,1683,1685],{"class":485,"line":1684},38,[483,1686,1078],{"class":493},[502,1688,1690],{"id":1689},"a-sql-a-tiéd","A SQL a tiéd",[448,1692,1693,1694,1696,1697,1700,1701,1704,1705,1708,1709,1711],{},"Fontos tulajdonság: a ",[452,1695,431],{}," nem rejti el a lapozást egy query builder mögé: itt a SQL a tiéd, a modul csak a paraméter-fegyelmet és a lapmechanikát adja (",[452,1698,1699],{},"paginate.Normalize"," a bemenethez, ",[452,1702,1703],{},"paginate.NewPage"," a válaszhoz). Cserébe a ",[452,1706,1707],{},"LIMIT","\u002F",[452,1710,940],{}," (vagy cursoroknál a seek-predikátum és az indexe) a te kezedben van.",[502,1713,1715],{"id":1714},"használt-patternek","Használt patternek",[1717,1718,1719,1736],"ul",{},[1720,1721,1722,660,1725,1727,1728,1731,1732,1735],"li",{},[460,1723,1724],{},"Generikus eredmény-wrapper",[452,1726,953],{},"): a ",[469,1729,238],{"href":1730},"\u002Fhu\u002Fconcepts\u002Fdesign-patterns#opaque-manipul%C3%A1ci%C3%B3-v%C3%A9dett-cursor"," oldal a cursor-testvérét, a ",[452,1733,1734],{},"CursorPage[T]","-t tárgyalja mélységében.",[1720,1737,1738,1741,1742,1745,1746,721],{},[460,1739,1740],{},"Functional options"," (a ",[452,1743,1744],{},"With*"," határ-hangolás): ",[469,1747,238],{"href":1748},"\u002Fhu\u002Fconcepts\u002Fdesign-patterns#functional-options",[502,1750,1752],{"id":1751},"merre-tovább","Merre tovább",[1717,1754,1755],{},[1720,1756,1757,1759,1760,1763,1764,1763,1767,1769],{},[469,1758,439],{"href":440},": ",[452,1761,1762],{},"CursorParams",", ",[452,1765,1766],{},"NormalizeCursor",[452,1768,1734],{},", a seek-predikátum, és mikor éri meg offset helyett.",[1771,1772,1773],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":479,"searchDepth":529,"depth":529,"links":1775},[1776,1777,1778,1779,1780,1781],{"id":504,"depth":529,"text":25},{"id":554,"depth":529,"text":555},{"id":1110,"depth":529,"text":1111},{"id":1689,"depth":529,"text":1690},{"id":1714,"depth":529,"text":1715},{"id":1751,"depth":529,"text":1752},"Offset- (page\u002Fper-page) lapozás a paginate modullal, normalizált paraméterek és egy típusos page-wrapper.","md",null,{},{"icon":55},{"title":52,"description":1782},"o8YH7ER2HtGEThZ1ZTFwK6T653fQgyEC98-vBluN-aE",[1790,1792],{"title":427,"path":428,"stem":429,"description":1791,"icon":318,"children":-1},"Idempotens alapadat-betöltés migráció után, first-or-create-cel, opcionális feltétellel és multi-tenant támogatással.",{"title":439,"path":440,"stem":441,"description":1793,"icon":19,"children":-1},"Keyset-lapozás opak cursorral és Postgres tuple-összehasonlításos seekkel, nagy vagy gyorsan növő táblákhoz.",1785445883086]