[{"data":1,"prerenderedAt":1502},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-dbx-seed":442,"-hu-dbx-seed-surround":1497},[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":427,"body":444,"description":1490,"extension":1491,"links":1492,"meta":1493,"navigation":1494,"path":428,"seo":1495,"stem":429,"__hash__":1496},"docs_hu\u002Fhu\u002F8.dbx\u002F5.seed.md",{"type":445,"value":446,"toc":1483},"minimark",[447,474,524,529,556,691,762,792,796,806,906,935,946,950,967,1055,1065,1244,1248,1258,1433,1443,1461,1465,1479],[448,449,450,451,455,456,460,461,465,466,469,470,473],"p",{},"A ",[452,453,454],"a",{"href":273},"migrációk"," a sémát hozzák létre; a ",[457,458,459],"strong",{},"seederek"," az adatot: egy admin usert, szerepköröket, lookup táblákat. A gpsystem ehhez a ",[462,463,464],"code",{},"seed"," csomagot és egy központi ",[462,467,468],{},"seeds\u002F"," package-et generál minden projektbe, a ",[462,471,472],{},"cmd\u002Fmigrate"," binárison keresztül futtatva.",[475,476,481],"pre",{"className":477,"code":478,"language":479,"meta":480,"style":480},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go run .\u002Fcmd\u002Fmigrate up --seed   # migrál, majd seedel\ngo run .\u002Fcmd\u002Fmigrate seed        # csak seedel, migráció nélkül\n","sh","",[462,482,483,509],{"__ignoreMap":480},[484,485,488,492,496,499,502,505],"span",{"class":486,"line":487},"line",1,[484,489,491],{"class":490},"sBMFI","go",[484,493,495],{"class":494},"sfazB"," run",[484,497,498],{"class":494}," .\u002Fcmd\u002Fmigrate",[484,500,501],{"class":494}," up",[484,503,504],{"class":494}," --seed",[484,506,508],{"class":507},"sHwdD","   # migrál, majd seedel\n",[484,510,512,514,516,518,521],{"class":486,"line":511},2,[484,513,491],{"class":490},[484,515,495],{"class":494},[484,517,498],{"class":494},[484,519,520],{"class":494}," seed",[484,522,523],{"class":507},"        # csak seedel, migráció nélkül\n",[525,526,528],"h2",{"id":527},"a-registry-és-a-seeder","A Registry és a Seeder",[448,530,531,532,535,536,539,540,543,544,547,548,552,553,555],{},"Egy seeder egy ",[462,533,534],{},"seed.Seeder"," érték: ",[457,537,538],{},"név",", opcionális ",[457,541,542],{},"Guard"," (eldönti, lefusson-e egyáltalán) és a ",[457,545,546],{},"Run"," törzs. Az ",[452,549,550],{"href":316},[462,551,315],{}," parancs generálja és regisztrálja a ",[462,554,468],{}," package-ben:",[475,557,561],{"className":558,"code":559,"filename":560,"language":491,"meta":480,"style":480},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","func adminUser(deps Deps) seed.Seeder {\n    return seed.Seeder{\n        Name: \"admin_user\",\n        Run: func(ctx context.Context) error {\n            return nil\n        },\n    }\n}\n","seeds\u002Fadmin_user.go",[462,562,563,597,612,634,664,673,679,685],{"__ignoreMap":480},[484,564,565,569,573,576,580,583,586,588,591,594],{"class":486,"line":487},[484,566,568],{"class":567},"sMK4o","func",[484,570,572],{"class":571},"s2Zo4"," adminUser",[484,574,575],{"class":567},"(",[484,577,579],{"class":578},"sHdIc","deps",[484,581,582],{"class":490}," Deps",[484,584,585],{"class":567},")",[484,587,520],{"class":490},[484,589,590],{"class":567},".",[484,592,593],{"class":490},"Seeder",[484,595,596],{"class":567}," {\n",[484,598,599,603,605,607,609],{"class":486,"line":511},[484,600,602],{"class":601},"s7zQu","    return",[484,604,520],{"class":490},[484,606,590],{"class":567},[484,608,593],{"class":490},[484,610,611],{"class":567},"{\n",[484,613,615,619,622,625,628,631],{"class":486,"line":614},3,[484,616,618],{"class":617},"sTEyZ","        Name",[484,620,621],{"class":567},":",[484,623,624],{"class":567}," \"",[484,626,627],{"class":494},"admin_user",[484,629,630],{"class":567},"\"",[484,632,633],{"class":567},",\n",[484,635,637,640,642,645,648,651,653,656,658,662],{"class":486,"line":636},4,[484,638,639],{"class":617},"        Run",[484,641,621],{"class":567},[484,643,644],{"class":567}," func(",[484,646,647],{"class":578},"ctx",[484,649,650],{"class":490}," context",[484,652,590],{"class":567},[484,654,655],{"class":490},"Context",[484,657,585],{"class":567},[484,659,661],{"class":660},"spNyl"," error",[484,663,596],{"class":567},[484,665,667,670],{"class":486,"line":666},5,[484,668,669],{"class":601},"            return",[484,671,672],{"class":567}," nil\n",[484,674,676],{"class":486,"line":675},6,[484,677,678],{"class":567},"        },\n",[484,680,682],{"class":486,"line":681},7,[484,683,684],{"class":567},"    }\n",[484,686,688],{"class":486,"line":687},8,[484,689,690],{"class":567},"}\n",[475,692,695],{"className":558,"code":693,"filename":694,"language":491,"meta":480,"style":480},"func Register(reg *seed.Registry, deps Deps) {\n    reg.Add(adminUser(deps))\n    \u002F\u002F gpsystem:seeds\n}\n","seeds\u002Fregister.go",[462,696,697,731,753,758],{"__ignoreMap":480},[484,698,699,701,704,706,709,712,714,716,719,722,725,727,729],{"class":486,"line":487},[484,700,568],{"class":567},[484,702,703],{"class":571}," Register",[484,705,575],{"class":567},[484,707,708],{"class":578},"reg",[484,710,711],{"class":567}," *",[484,713,464],{"class":490},[484,715,590],{"class":567},[484,717,718],{"class":490},"Registry",[484,720,721],{"class":567},",",[484,723,724],{"class":578}," deps",[484,726,582],{"class":490},[484,728,585],{"class":567},[484,730,596],{"class":567},[484,732,733,736,738,741,743,746,748,750],{"class":486,"line":511},[484,734,735],{"class":617},"    reg",[484,737,590],{"class":567},[484,739,740],{"class":571},"Add",[484,742,575],{"class":567},[484,744,745],{"class":571},"adminUser",[484,747,575],{"class":567},[484,749,579],{"class":617},[484,751,752],{"class":567},"))\n",[484,754,755],{"class":486,"line":614},[484,756,757],{"class":507},"    \u002F\u002F gpsystem:seeds\n",[484,759,760],{"class":486,"line":636},[484,761,690],{"class":567},[448,763,450,764,767,768,771,772,775,776,779,780,783,784,787,788,791],{},[462,765,766],{},"Deps"," a modulok ",[462,769,770],{},"Dependencies","-ét tükrözi: a query-felület (",[462,773,774],{},"*pg.DB"," vagy ",[462,777,778],{},"*bun.DB",", a projekt ",[462,781,782],{},"--db"," választása szerint) és a ",[462,785,786],{},"dbx.Transactor",". A ",[462,789,790],{},"Registry.Run"," regisztrálási sorrendben futtatja a seedereket: számít, ha az egyik egy másik által létrehozott sorra hivatkozik (pl. a szerepkörök az admin user előtt).",[525,793,795],{"id":794},"a-lelke-first-or-create","A lelke: first-or-create",[448,797,798,799,802,803,621],{},"A seederek ",[457,800,801],{},"idempotensek",": kétszeri futtatás nem duplikál. A bun-alapú projektekhez ehhez van egy generikus primitív, a ",[462,804,805],{},"seed\u002Fbunx.FirstOrCreate",[475,807,809],{"className":558,"code":808,"language":491,"meta":480,"style":480},"user := &User{Email: \"admin@example.com\", Name: \"Admin\"}\ncreated, err := bunx.FirstOrCreate(ctx, deps.DB, user, \"email\")\n",[462,810,811,856],{"__ignoreMap":480},[484,812,813,816,819,822,825,828,831,833,835,838,840,842,845,847,849,852,854],{"class":486,"line":487},[484,814,815],{"class":617},"user ",[484,817,818],{"class":567},":=",[484,820,821],{"class":567}," &",[484,823,824],{"class":490},"User",[484,826,827],{"class":567},"{",[484,829,830],{"class":617},"Email",[484,832,621],{"class":567},[484,834,624],{"class":567},[484,836,837],{"class":494},"admin@example.com",[484,839,630],{"class":567},[484,841,721],{"class":567},[484,843,844],{"class":617}," Name",[484,846,621],{"class":567},[484,848,624],{"class":567},[484,850,851],{"class":494},"Admin",[484,853,630],{"class":567},[484,855,690],{"class":567},[484,857,858,861,863,866,868,871,873,876,878,880,882,884,886,889,891,894,896,898,901,903],{"class":486,"line":511},[484,859,860],{"class":617},"created",[484,862,721],{"class":567},[484,864,865],{"class":617}," err ",[484,867,818],{"class":567},[484,869,870],{"class":617}," bunx",[484,872,590],{"class":567},[484,874,875],{"class":571},"FirstOrCreate",[484,877,575],{"class":567},[484,879,647],{"class":617},[484,881,721],{"class":567},[484,883,724],{"class":617},[484,885,590],{"class":567},[484,887,888],{"class":617},"DB",[484,890,721],{"class":567},[484,892,893],{"class":617}," user",[484,895,721],{"class":567},[484,897,624],{"class":567},[484,899,900],{"class":494},"email",[484,902,630],{"class":567},[484,904,905],{"class":567},")\n",[448,907,908,909,911,912,915,916,918,919,922,923,926,927,930,931,934],{},"Megkeresi az ",[462,910,900],{}," oszlop alapján a meglévő sort; ha van, betölti ",[462,913,914],{},"user","-be (a mezők a valódi sor értékeire állnak), ha nincs, beszúrja ",[462,917,914],{},"-t úgy, ahogy van. A ",[462,920,921],{},"bunx.From","-on át fut, tehát csatlakozik egy ",[462,924,925],{},"WithinTransaction","-nal nyitott tranzakcióhoz, ha van ilyen. Összetettebb egyezésvizsgálathoz (nem sima oszlop-egyenlőség) ott a ",[462,928,929],{},"FirstOrCreateWhere",", ami egy tetszőleges ",[462,932,933],{},"*bun.SelectQuery"," lezárást vár.",[448,936,937,938,941,942,945],{},"Natív (pgx) projektekhez nincs kit-oldali helper: a seeder saját ",[462,939,940],{},"INSERT ... ON CONFLICT (oszlop) DO NOTHING"," SQL-t ír a ",[462,943,944],{},"pg.DBTX","-en, ugyanúgy, ahogy bármelyik más natív repository.",[525,947,949],{"id":948},"feltételes-futás-guard-és-errskip","Feltételes futás: Guard és ErrSkip",[448,951,952,953,955,956,958,959,962,963,966],{},"Egy seedernek el kell tudnia dönteni, hogy egyáltalán lefusson-e: erre való a ",[462,954,542],{},". Kiértékelése megelőzi a ",[462,957,546],{},"-t; ",[462,960,961],{},"false"," esetén a runner ",[457,964,965],{},"skipnek"," logolja, nem hibának:",[475,968,970],{"className":558,"code":969,"language":491,"meta":480,"style":480},"seed.Seeder{\n    Name:  \"demo_data\",\n    Guard: seed.OnlyEnv(currentEnv, \"dev\", \"staging\"),\n    Run:   loadDemoData,\n}\n",[462,971,972,982,999,1039,1051],{"__ignoreMap":480},[484,973,974,976,978,980],{"class":486,"line":487},[484,975,464],{"class":490},[484,977,590],{"class":567},[484,979,593],{"class":490},[484,981,611],{"class":567},[484,983,984,987,989,992,995,997],{"class":486,"line":511},[484,985,986],{"class":617},"    Name",[484,988,621],{"class":567},[484,990,991],{"class":567},"  \"",[484,993,994],{"class":494},"demo_data",[484,996,630],{"class":567},[484,998,633],{"class":567},[484,1000,1001,1004,1006,1008,1010,1013,1015,1018,1020,1022,1025,1027,1029,1031,1034,1036],{"class":486,"line":614},[484,1002,1003],{"class":617},"    Guard",[484,1005,621],{"class":567},[484,1007,520],{"class":617},[484,1009,590],{"class":567},[484,1011,1012],{"class":571},"OnlyEnv",[484,1014,575],{"class":567},[484,1016,1017],{"class":617},"currentEnv",[484,1019,721],{"class":567},[484,1021,624],{"class":567},[484,1023,1024],{"class":494},"dev",[484,1026,630],{"class":567},[484,1028,721],{"class":567},[484,1030,624],{"class":567},[484,1032,1033],{"class":494},"staging",[484,1035,630],{"class":567},[484,1037,1038],{"class":567},"),\n",[484,1040,1041,1044,1046,1049],{"class":486,"line":636},[484,1042,1043],{"class":617},"    Run",[484,1045,621],{"class":567},[484,1047,1048],{"class":617},"   loadDemoData",[484,1050,633],{"class":567},[484,1052,1053],{"class":486,"line":666},[484,1054,690],{"class":567},[448,1056,1057,1058,1060,1061,1064],{},"Amikor a feltétel csak futásidőben derül ki (pl. a tenant tartalmától függ), a ",[462,1059,546],{}," maga is kiszállhat: a ",[462,1062,1063],{},"seed.ErrSkip"," visszaadása ugyanúgy skipnek számít, nem hibának.",[475,1066,1068],{"className":558,"code":1067,"language":491,"meta":480,"style":480},"Run: func(ctx context.Context) error {\n    t, _ := seed.TenantFromContext(ctx)\n    if t.Data.(TenantConfig).Plan != \"enterprise\" {\n        return seed.ErrSkip\n    }\n    _, err := bunx.FirstOrCreate(ctx, deps.DB, &EnterpriseDefaults{TenantID: t.ID}, \"tenant_id\")\n    return err\n},\n",[462,1069,1070,1092,1117,1154,1166,1170,1232,1239],{"__ignoreMap":480},[484,1071,1072,1074,1076,1078,1080,1082,1084,1086,1088,1090],{"class":486,"line":487},[484,1073,546],{"class":617},[484,1075,621],{"class":567},[484,1077,644],{"class":567},[484,1079,647],{"class":578},[484,1081,650],{"class":490},[484,1083,590],{"class":567},[484,1085,655],{"class":490},[484,1087,585],{"class":567},[484,1089,661],{"class":660},[484,1091,596],{"class":567},[484,1093,1094,1097,1099,1102,1104,1106,1108,1111,1113,1115],{"class":486,"line":511},[484,1095,1096],{"class":617},"    t",[484,1098,721],{"class":567},[484,1100,1101],{"class":617}," _ ",[484,1103,818],{"class":567},[484,1105,520],{"class":617},[484,1107,590],{"class":567},[484,1109,1110],{"class":571},"TenantFromContext",[484,1112,575],{"class":567},[484,1114,647],{"class":617},[484,1116,905],{"class":567},[484,1118,1119,1122,1125,1127,1130,1133,1136,1139,1142,1145,1147,1150,1152],{"class":486,"line":614},[484,1120,1121],{"class":601},"    if",[484,1123,1124],{"class":617}," t",[484,1126,590],{"class":567},[484,1128,1129],{"class":617},"Data",[484,1131,1132],{"class":567},".(",[484,1134,1135],{"class":490},"TenantConfig",[484,1137,1138],{"class":567},").",[484,1140,1141],{"class":617},"Plan ",[484,1143,1144],{"class":567},"!=",[484,1146,624],{"class":567},[484,1148,1149],{"class":494},"enterprise",[484,1151,630],{"class":567},[484,1153,596],{"class":567},[484,1155,1156,1159,1161,1163],{"class":486,"line":636},[484,1157,1158],{"class":601},"        return",[484,1160,520],{"class":617},[484,1162,590],{"class":567},[484,1164,1165],{"class":617},"ErrSkip\n",[484,1167,1168],{"class":486,"line":666},[484,1169,684],{"class":567},[484,1171,1172,1175,1177,1179,1181,1183,1185,1187,1189,1191,1193,1195,1197,1199,1201,1203,1206,1208,1211,1213,1215,1217,1220,1223,1225,1228,1230],{"class":486,"line":675},[484,1173,1174],{"class":617},"    _",[484,1176,721],{"class":567},[484,1178,865],{"class":617},[484,1180,818],{"class":567},[484,1182,870],{"class":617},[484,1184,590],{"class":567},[484,1186,875],{"class":571},[484,1188,575],{"class":567},[484,1190,647],{"class":617},[484,1192,721],{"class":567},[484,1194,724],{"class":617},[484,1196,590],{"class":567},[484,1198,888],{"class":617},[484,1200,721],{"class":567},[484,1202,821],{"class":567},[484,1204,1205],{"class":490},"EnterpriseDefaults",[484,1207,827],{"class":567},[484,1209,1210],{"class":617},"TenantID",[484,1212,621],{"class":567},[484,1214,1124],{"class":617},[484,1216,590],{"class":567},[484,1218,1219],{"class":617},"ID",[484,1221,1222],{"class":567},"},",[484,1224,624],{"class":567},[484,1226,1227],{"class":494},"tenant_id",[484,1229,630],{"class":567},[484,1231,905],{"class":567},[484,1233,1234,1236],{"class":486,"line":681},[484,1235,602],{"class":601},[484,1237,1238],{"class":617}," err\n",[484,1240,1241],{"class":486,"line":687},[484,1242,1243],{"class":567},"},\n",[525,1245,1247],{"id":1246},"multi-tenant-eltérő-tartalom-tenantonként","Multi-tenant: eltérő tartalom tenantonként",[448,1249,1250,1251,1253,1254,1257],{},"Egy seeder ugyanaz a kód lehet minden tenantra, miközben más-más adatot hoz létre: a ",[462,1252,790],{}," a ",[462,1255,1256],{},"seed.WithTenants"," opcióval tenantonként fut, a tenantot a contextbe téve.",[475,1259,1261],{"className":558,"code":1260,"language":491,"meta":480,"style":480},"tenants := []seed.Tenant{\n    {ID: \"acme\", Data: TenantConfig{Plan: \"enterprise\"}},\n    {ID: \"globex\", Data: TenantConfig{Plan: \"starter\"}},\n}\nif err := reg.Run(ctx, seed.WithTenants(tenants)); err != nil {\n    log.Fatal(err)\n}\n",[462,1262,1263,1282,1324,1362,1366,1412,1429],{"__ignoreMap":480},[484,1264,1265,1268,1270,1273,1275,1277,1280],{"class":486,"line":487},[484,1266,1267],{"class":617},"tenants ",[484,1269,818],{"class":567},[484,1271,1272],{"class":567}," []",[484,1274,464],{"class":490},[484,1276,590],{"class":567},[484,1278,1279],{"class":490},"Tenant",[484,1281,611],{"class":567},[484,1283,1284,1287,1289,1291,1293,1296,1298,1300,1303,1305,1308,1310,1313,1315,1317,1319,1321],{"class":486,"line":511},[484,1285,1286],{"class":567},"    {",[484,1288,1219],{"class":617},[484,1290,621],{"class":567},[484,1292,624],{"class":567},[484,1294,1295],{"class":494},"acme",[484,1297,630],{"class":567},[484,1299,721],{"class":567},[484,1301,1302],{"class":617}," Data",[484,1304,621],{"class":567},[484,1306,1307],{"class":490}," TenantConfig",[484,1309,827],{"class":567},[484,1311,1312],{"class":617},"Plan",[484,1314,621],{"class":567},[484,1316,624],{"class":567},[484,1318,1149],{"class":494},[484,1320,630],{"class":567},[484,1322,1323],{"class":567},"}},\n",[484,1325,1326,1328,1330,1332,1334,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1358,1360],{"class":486,"line":614},[484,1327,1286],{"class":567},[484,1329,1219],{"class":617},[484,1331,621],{"class":567},[484,1333,624],{"class":567},[484,1335,1336],{"class":494},"globex",[484,1338,630],{"class":567},[484,1340,721],{"class":567},[484,1342,1302],{"class":617},[484,1344,621],{"class":567},[484,1346,1307],{"class":490},[484,1348,827],{"class":567},[484,1350,1312],{"class":617},[484,1352,621],{"class":567},[484,1354,624],{"class":567},[484,1356,1357],{"class":494},"starter",[484,1359,630],{"class":567},[484,1361,1323],{"class":567},[484,1363,1364],{"class":486,"line":636},[484,1365,690],{"class":567},[484,1367,1368,1371,1373,1375,1378,1380,1382,1384,1386,1388,1390,1392,1395,1397,1400,1403,1405,1407,1410],{"class":486,"line":666},[484,1369,1370],{"class":601},"if",[484,1372,865],{"class":617},[484,1374,818],{"class":567},[484,1376,1377],{"class":617}," reg",[484,1379,590],{"class":567},[484,1381,546],{"class":571},[484,1383,575],{"class":567},[484,1385,647],{"class":617},[484,1387,721],{"class":567},[484,1389,520],{"class":617},[484,1391,590],{"class":567},[484,1393,1394],{"class":571},"WithTenants",[484,1396,575],{"class":567},[484,1398,1399],{"class":617},"tenants",[484,1401,1402],{"class":567},"));",[484,1404,865],{"class":617},[484,1406,1144],{"class":567},[484,1408,1409],{"class":567}," nil",[484,1411,596],{"class":567},[484,1413,1414,1417,1419,1422,1424,1427],{"class":486,"line":675},[484,1415,1416],{"class":617},"    log",[484,1418,590],{"class":567},[484,1420,1421],{"class":571},"Fatal",[484,1423,575],{"class":567},[484,1425,1426],{"class":617},"err",[484,1428,905],{"class":567},[484,1430,1431],{"class":486,"line":681},[484,1432,690],{"class":567},[448,1434,450,1435,1438,1439,1442],{},[462,1436,1437],{},"Tenant.Data"," tetszőleges, projekt-specifikus payload; a seeder típuskonverzióval (type assertion) éri el. A ",[462,1440,1441],{},"seed.OnlyTenants(ids...)"," egy kész Guard arra az esetre, ha egy seeder csak bizonyos tenantokra fusson.",[1444,1445,1446,1447,1450,1451,1454,1455,1457,1458,1460],"note",{},"A kit ",[457,1448,1449],{},"nem"," ad kész tenant-forrást (nincs tenant tábla, nincs ",[462,1452,1453],{},"search_path","-váltás, nincs RLS): a ",[462,1456,1279],{},"-lista honnan jön (env, egy tábla, egy admin API) a projektre van bízva. A ",[462,1459,1394],{}," egy kampó, nem egy kész multi-tenant infrastruktúra.",[525,1462,1464],{"id":1463},"miért-nem-a-migrációk-része","Miért nem a migrációk része?",[448,1466,1467,1468,1471,1472,1474,1475,1478],{},"A migráció és a seedelés más-más életciklust futhat: egy migráció mindig lefut, egy seeder gyakran csak fejlesztésben vagy első telepítéskor kell. Ezért a ",[462,1469,1470],{},"--seed"," flag és a ",[462,1473,464],{}," subcommand explicit: ",[462,1476,1477],{},"go run .\u002Fcmd\u002Fmigrate up"," önmagában sosem ír adatot, csak sémát. Éles környezetben ez azt jelenti, hogy a seedelés bekapcsolása (vagy kihagyása) a deploy-pipeline döntése, nem a migrációs lépés hallgatólagos mellékhatása.",[1480,1481,1482],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":480,"searchDepth":511,"depth":511,"links":1484},[1485,1486,1487,1488,1489],{"id":527,"depth":511,"text":528},{"id":794,"depth":511,"text":795},{"id":948,"depth":511,"text":949},{"id":1246,"depth":511,"text":1247},{"id":1463,"depth":511,"text":1464},"Idempotens alapadat-betöltés migráció után, first-or-create-cel, opcionális feltétellel és multi-tenant támogatással.","md",null,{},{"icon":318},{"title":427,"description":1490},"V88L8YaVA-asVZahFkrs4XtcHlR4InNg-4UBrr_nFlo",[1498,1500],{"title":422,"path":423,"stem":424,"description":1499,"icon":425,"children":-1},"Kereszt-repository tranzakciók a contextben, plumbing nélkül.",{"title":52,"path":436,"stem":437,"description":1501,"icon":55,"children":-1},"Offset- (page\u002Fper-page) lapozás a paginate modullal, normalizált paraméterek és egy típusos page-wrapper.",1785445887611]