[{"data":1,"prerenderedAt":1544},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-httperr-error-responses":442,"-hu-httperr-error-responses-surround":1539},[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":395,"body":444,"description":1532,"extension":1533,"links":1534,"meta":1535,"navigation":1536,"path":396,"seo":1537,"stem":397,"__hash__":1538},"docs_hu\u002Fhu\u002F7.httperr\u002F2.error-responses.md",{"type":445,"value":446,"toc":1521},"minimark",[447,482,511,544,549,704,729,805,845,859,863,871,971,974,1053,1067,1070,1122,1126,1165,1169,1193,1330,1371,1378,1382,1404,1412,1416,1444,1448,1474,1481,1485,1517],[448,449,450,451,458,459,463,464,466,467,471,472,477,478,481],"p",{},"Minden hiba, ami egy gpsystem service-ből kimegy a dróton (validációs bukás, 404, panic, adatbázis-timeout), ",[452,453,457],"a",{"href":454,"rel":455},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9457",[456],"nofollow","RFC 9457"," problem dokumentum, ",[460,461,462],"code",{},"Content-Type: application\u002Fproblem+json","-nel. Ezt a ",[460,465,386],{}," garantálja: ő a drót felé néző hibaforma és az egyetlen hely, ahol Go-hibából HTTP-válasz lesz. A hibák ",[468,469,470],"em",{},"építését"," (stack, kód, publikus üzenet) az ",[452,473,474,476],{"href":225},[460,475,358],{}," csomag és a hibamodell"," írja le, ez az oldal a renderelő oldalt, sima ",[460,479,480],{},"net\u002Fhttp","-n.",[483,484,489],"pre",{"className":485,"code":486,"language":487,"meta":488,"style":488},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import \"github.com\u002Fgp-system\u002Fhttperr\"\n","go","",[460,490,491],{"__ignoreMap":488},[492,493,496,500,504,508],"span",{"class":494,"line":495},"line",1,[492,497,499],{"class":498},"s7zQu","import",[492,501,503],{"class":502},"sMK4o"," \"",[492,505,507],{"class":506},"sBMFI","github.com\u002Fgp-system\u002Fhttperr",[492,509,510],{"class":502},"\"\n",[448,512,513,514,517,518,521,522,525,526,525,529,532,533,535,536,540,541,543],{},"A ",[460,515,516],{},"Problem","\u002F",[460,519,520],{},"FieldError"," forma és a gyors konstruktorok (",[460,523,524],{},"BadRequest",", ",[460,527,528],{},"NotFound",[460,530,531],{},"Validation",", ...) az ",[452,534,52],{"href":392}," oldalon vannak; ez az oldal arról szól, hogyan lesz ",[537,538,539],"strong",{},"bármilyen"," hibából, nem csak egy kézzel épített ",[460,542,516],{},"-ből, ilyen forma.",[545,546,548],"h2",{"id":547},"writeerror-és-newwriteerror","WriteError és NewWriteError",[483,550,552],{"className":485,"code":551,"language":487,"meta":488,"style":488},"func WriteError(w http.ResponseWriter, r *http.Request, err error)              \u002F\u002F default opciókkal\nfunc NewWriteError(opts ...HandlerOption) func(http.ResponseWriter, *http.Request, error)\n\nfunc WriteBadRequest(w http.ResponseWriter, r *http.Request, err error)\n",[460,553,554,612,659,666],{"__ignoreMap":488},[492,555,556,559,563,566,570,573,576,579,582,585,588,591,593,596,598,601,605,608],{"class":494,"line":495},[492,557,558],{"class":502},"func",[492,560,562],{"class":561},"s2Zo4"," WriteError",[492,564,565],{"class":502},"(",[492,567,569],{"class":568},"sHdIc","w",[492,571,572],{"class":506}," http",[492,574,575],{"class":502},".",[492,577,578],{"class":506},"ResponseWriter",[492,580,581],{"class":502},",",[492,583,584],{"class":568}," r",[492,586,587],{"class":502}," *",[492,589,590],{"class":506},"http",[492,592,575],{"class":502},[492,594,595],{"class":506},"Request",[492,597,581],{"class":502},[492,599,600],{"class":568}," err",[492,602,604],{"class":603},"spNyl"," error",[492,606,607],{"class":502},")",[492,609,611],{"class":610},"sHwdD","              \u002F\u002F default opciókkal\n",[492,613,615,617,620,622,625,628,631,633,636,638,640,642,644,646,648,650,652,654,656],{"class":494,"line":614},2,[492,616,558],{"class":502},[492,618,619],{"class":561}," NewWriteError",[492,621,565],{"class":502},[492,623,624],{"class":568},"opts",[492,626,627],{"class":502}," ...",[492,629,630],{"class":506},"HandlerOption",[492,632,607],{"class":502},[492,634,635],{"class":502}," func(",[492,637,590],{"class":506},[492,639,575],{"class":502},[492,641,578],{"class":506},[492,643,581],{"class":502},[492,645,587],{"class":502},[492,647,590],{"class":506},[492,649,575],{"class":502},[492,651,595],{"class":506},[492,653,581],{"class":502},[492,655,604],{"class":603},[492,657,658],{"class":502},")\n",[492,660,662],{"class":494,"line":661},3,[492,663,665],{"emptyLinePlaceholder":664},true,"\n",[492,667,669,671,674,676,678,680,682,684,686,688,690,692,694,696,698,700,702],{"class":494,"line":668},4,[492,670,558],{"class":502},[492,672,673],{"class":561}," WriteBadRequest",[492,675,565],{"class":502},[492,677,569],{"class":568},[492,679,572],{"class":506},[492,681,575],{"class":502},[492,683,578],{"class":506},[492,685,581],{"class":502},[492,687,584],{"class":568},[492,689,587],{"class":502},[492,691,590],{"class":506},[492,693,575],{"class":502},[492,695,595],{"class":506},[492,697,581],{"class":502},[492,699,600],{"class":568},[492,701,604],{"class":603},[492,703,658],{"class":502},[448,705,513,706,709,710,714,715,717,718,721,722,725,726,728],{},[460,707,708],{},"WriteError"," lefuttatja az alábbi ",[452,711,713],{"href":712},"#a-mapping","mappinget",", és a kapott ",[460,716,516],{},"-et ",[460,719,720],{},"application\u002Fproblem+json","-ként írja ki. A ",[460,723,724],{},"NewWriteError"," ",[460,727,630],{},"-ökkel testreszabott writert épít:",[483,730,732],{"className":485,"code":731,"language":487,"meta":488,"style":488},"type HandlerOption func(*handlerConfig)\n\nfunc WithExposeInternal(expose bool) HandlerOption \u002F\u002F 5xx detail + stack\u002Fchain a válaszban, csak dev!\nfunc WithLogger(l *slog.Logger) HandlerOption      \u002F\u002F az 5xx okok loggere (default: slog.Default())\n",[460,733,734,750,754,776],{"__ignoreMap":488},[492,735,736,739,742,745,748],{"class":494,"line":495},[492,737,738],{"class":502},"type",[492,740,741],{"class":506}," HandlerOption",[492,743,744],{"class":502}," func(*",[492,746,747],{"class":506},"handlerConfig",[492,749,658],{"class":502},[492,751,752],{"class":494,"line":614},[492,753,665],{"emptyLinePlaceholder":664},[492,755,756,758,761,763,766,769,771,773],{"class":494,"line":661},[492,757,558],{"class":502},[492,759,760],{"class":561}," WithExposeInternal",[492,762,565],{"class":502},[492,764,765],{"class":568},"expose",[492,767,768],{"class":603}," bool",[492,770,607],{"class":502},[492,772,741],{"class":506},[492,774,775],{"class":610}," \u002F\u002F 5xx detail + stack\u002Fchain a válaszban, csak dev!\n",[492,777,778,780,783,785,788,790,793,795,798,800,802],{"class":494,"line":668},[492,779,558],{"class":502},[492,781,782],{"class":561}," WithLogger",[492,784,565],{"class":502},[492,786,787],{"class":568},"l",[492,789,587],{"class":502},[492,791,792],{"class":506},"slog",[492,794,575],{"class":502},[492,796,797],{"class":506},"Logger",[492,799,607],{"class":502},[492,801,741],{"class":506},[492,803,804],{"class":610},"      \u002F\u002F az 5xx okok loggere (default: slog.Default())\n",[448,806,513,807,809,810,815,816,819,820,827,828,830,831,834,835,837,838,517,841,844],{},[460,808,708],{}," szignatúrája szándékosan az ",[452,811,814],{"href":812,"rel":813},"https:\u002F\u002Fgithub.com\u002Foapi-codegen\u002Foapi-codegen",[456],"oapi-codegen"," strict-szerverének ",[460,817,818],{},"ResponseErrorHandlerFunc"," hookjához igazodik, így a ",[452,821,823,824],{"href":822},"\u002Fhu\u002Fkit\u002Fserver#registerfunc-%C3%A9s-strictvalidator","generált ",[460,825,826],{},"register.go"," közvetlenül oda köti be: a handlered által visszaadott hiba a ",[460,829,708],{},"-on megy át, ragasztókód nélkül. A ",[460,832,833],{},"WriteBadRequest"," mindent 400-ra képez, a már kész ",[460,836,516],{}," és a 413-as body-limit hiba kivételével, mert egy paraméter-parseolási vagy body-dekódolási hiba sosem 500; az oapi-codegen ",[460,839,840],{},"RequestErrorHandlerFunc",[460,842,843],{},"ErrorHandlerFunc"," hookjaihoz igazodik, ott, ahol a dekódolás, nem a handlered termelte a hibát.",[448,846,847,848,850,851,854,855,858],{},"Csomagszintű ",[460,849,516],{},"-sentinelek (",[460,852,853],{},"var ErrX = httperr.NotFound(...)",") így biztonságosan írhatók: a writerek másolatot vesznek, mielőtt ",[460,856,857],{},"Instance","-t vagy dev-módú membereket pecsételnének bele, így kérések közt nem szivárog állapot.",[545,860,862],{"id":861},"a-mapping","A mapping",[448,864,513,865,867,868,870],{},[460,866,708],{}," és a ",[460,869,833],{}," ugyanazon a mappingen fut, ebben a sorrendben:",[872,873,874,887],"table",{},[875,876,877],"thead",{},[878,879,880,884],"tr",{},[881,882,883],"th",{},"Hiba a láncban",[881,885,886],{},"Válasz",[888,889,890,901,922,933,960],"tbody",{},[878,891,892,898],{},[893,894,895],"td",{},[460,896,897],{},"*httperr.Problem",[893,899,900],{},"változtatás nélkül renderelve (másolat, a sentinel nem mutálódik)",[878,902,903,912],{},[893,904,905,906,911],{},"validációs bukás a ",[452,907,908],{"href":401},[460,909,910],{},"httperr\u002Fvalidate","-ből",[893,913,914,915,918,919,921],{},"422, mezőnkénti ",[460,916,917],{},"errors[]","-szel (a validátor már ",[460,920,516],{},"-et ad)",[878,923,924,930],{},[893,925,926,929],{},[460,927,928],{},"*http.MaxBytesError"," (body a beállított limit felett)",[893,931,932],{},"413",[878,934,935,942],{},[893,936,937,941],{},[452,938,939],{"href":225},[460,940,358],{}," hiba",[893,943,944,947,948,951,952,525,955,951,957],{},[460,945,946],{},"errs.StatusOf"," (ha nincs: 500); ",[460,949,950],{},"detail"," = ",[460,953,954],{},"errs.PublicOf",[460,956,460],{},[460,958,959],{},"errs.CodeOf",[878,961,962,965],{},[893,963,964],{},"minden más",[893,966,967,968,970],{},"500, ",[460,969,950],{}," nélkül",[448,972,973],{},"Két keresztirányú szabály egészíti ki:",[975,976,977,1017],"ul",{},[978,979,980,983,984,986,987,990,991,994,995,997,998,1002,1003,725,1006,1008,1009,1012,1013,1016],"li",{},[537,981,982],{},"Minden 5xx logolódik",": a mögöttes hiba a ",[460,985,792],{},"-ba megy (a ",[460,988,989],{},"WithLogger"," loggerén keresztül, egyébként ",[460,992,993],{},"slog.Default()","-tel) a kérés metódusával, útvonalával és trace-kontextusával; ",[460,996,358],{}," hibánál a strukturált lánccal és stackkel együtt (lásd ",[452,999,1001],{"href":1000},"\u002Fhu\u002Ferrs\u002Fintegration#log-kimenet","errs: Integráció","). Egy státusz-mappelt ",[537,1004,1005],{},"4xx",[460,1007,358],{}," hiba (pl. egy ",[460,1010,1011],{},"errs.Status(404)","-gyel deklarált definition) viszont ",[537,1014,1015],{},"nem"," generál logsort és Sentry-eventet: az elvárt kliens-viselkedés nem incidens.",[978,1018,1019,1022,1023,1026,1027,1029,1030,1032,1033,1036,1037,1040,1041,517,1044,1047,1048,1052],{},[537,1020,1021],{},"Dev módban több látszik",": ",[460,1024,1025],{},"WithExposeInternal(true)"," mellett az ismeretlen hibák ",[460,1028,950],{},"-je kitöltődik, és ha a láncban ",[460,1031,358],{}," hiba van, a válasz ",[460,1034,1035],{},"stack"," és ",[460,1038,1039],{},"chain"," extension membereket kap (",[460,1042,1043],{},"errs.Frames",[460,1045,1046],{},"errs.Chain",", lásd ",[452,1049,1051],{"href":1050},"\u002Fhu\u002Ferrs\u002Fapi#introspekci%C3%B3-frames-fullframes-chain","errs: API","). Productionben a kliens sosem lát belső részletet.",[448,1054,1055,1056,1062,1063,1066],{},"Egy elkapott panic, ami ",[452,1057,1059],{"href":1058},"\u002Fhu\u002Ferrs\u002Fapi#konstruktorok",[460,1060,1061],{},"errs.NewPanic","-kal alakul ",[460,1064,1065],{},"*errs.Error","-rá (a stackje a panic helyére mutat), pontosan úgy renderelődik és logolódik, mint bármely más 500, mihelyt ehhez a mappinghez ér.",[545,1068,1069],{"id":1069},"errs-integráció",[448,1071,1072,1073,1075,1076,1078,1079,1083,1084,1087,1088,867,1091,1094,1095,1098,1099,725,1101,525,1103,1036,1105,1108,1109,1115,1116,1118,1119,1121],{},"A mapping ",[460,1074,358],{},"-sora az a pont, ahol a ",[460,1077,386],{}," és az ",[452,1080,1081],{"href":363},[460,1082,358],{}," találkozik: a ",[460,1085,1086],{},"Code",", a ",[460,1089,1090],{},"Public",[460,1092,1093],{},"Status",", bármelyik attribútummal is épült vagy ",[460,1096,1097],{},"Define","-olódott a hiba, közvetlenül a ",[460,1100,516],{},[460,1102,460],{},[460,1104,950],{},[460,1106,1107],{},"status"," mezője lesz, fordítási réteg nélkül. Ezért elég egy hibamódot egyszer, ",[452,1110,1112],{"href":1111},"\u002Fhu\u002Ferrs\u002Fapi#errsdefine-elnevezett-hibam%C3%B3dok",[460,1113,1114],{},"errs.Define","-dal deklarálni ahhoz, hogy mindenhol helyesen renderelődjön, ahol visszaadják: a ",[460,1117,516],{}," mezői közvetlen olvasatai az ",[460,1120,358],{}," attribútumoknak, nem egy handler dönt eseti alapon.",[545,1123,1125],{"id":1124},"dev-mode-kié-ez-a-beállítás","Dev mode: kié ez a beállítás?",[448,1127,513,1128,1131,1132,1134,1135,725,1140,1143,1144,1147,1148,1151,1152,1154,1155,1157,1158,1160,1161,1164],{},[460,1129,1130],{},"WithExposeInternal"," a ",[460,1133,386],{}," saját opciója, de egy generált gpsystem projektben sosem hívod közvetlenül: a ",[452,1136,1137],{"href":259},[460,1138,1139],{},"server.Config",[460,1141,1142],{},"ExposeInternalErrors"," mezője (",[460,1145,1146],{},"HTTP_EXPOSE_INTERNAL_ERRORS"," env-változó) a kit beállítása, és a ",[460,1149,1150],{},"server.Run"," adja át a ",[460,1153,386],{}," writernek, amit neked bedrótoz. Ha a ",[460,1156,386],{},"-t önállóan, kit nélkül használod, a ",[460,1159,1025],{}," az a kapcsoló, amit magadnak kell felkapcsolnod, a saját projekted env-változójával vagy build tag-jével őrizve; csak tartsd ",[537,1162,1163],{},"ki","kapcsolva productionben, ugyanúgy, ahogy a kit teszi, hogy a belső részletek a logba és a Sentrybe menjenek, sose a válaszba.",[545,1166,1168],{"id":1167},"a-shop-mit-lát-a-kliens-ha-elfogyott-a-készlet","A shop: mit lát a kliens, ha elfogyott a készlet",[448,1170,513,1171,1174,1175,1178,1179,525,1182,1185,1186,1188,1189,1192],{},[460,1172,1173],{},"PlaceOrder"," service-e az ",[460,1176,1177],{},"ErrOutOfStock"," definitiont adja vissza (",[460,1180,1181],{},"errs.Status(409)",[460,1183,1184],{},"errs.Public(...)",", a deklarációt lásd a ",[452,1187,224],{"href":225}," oldalon). Mire a ",[460,1190,1191],{},"POST \u002Fapi\u002Fv1\u002Fshop\u002Forders"," válasza kiér:",[483,1194,1198],{"className":1195,"code":1196,"language":1197,"meta":488,"style":488},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"type\": \"about:blank\",\n  \"title\": \"Conflict\",\n  \"status\": 409,\n  \"detail\": \"A termék elfogyott.\",\n  \"instance\": \"\u002Fapi\u002Fv1\u002Fshop\u002Forders\",\n  \"code\": \"shop_api_out_of_stock\"\n}\n","json",[460,1199,1200,1205,1229,1249,1265,1285,1306,1324],{"__ignoreMap":488},[492,1201,1202],{"class":494,"line":495},[492,1203,1204],{"class":502},"{\n",[492,1206,1207,1210,1212,1215,1218,1220,1224,1226],{"class":494,"line":614},[492,1208,1209],{"class":502},"  \"",[492,1211,738],{"class":603},[492,1213,1214],{"class":502},"\"",[492,1216,1217],{"class":502},":",[492,1219,503],{"class":502},[492,1221,1223],{"class":1222},"sfazB","about:blank",[492,1225,1214],{"class":502},[492,1227,1228],{"class":502},",\n",[492,1230,1231,1233,1236,1238,1240,1242,1245,1247],{"class":494,"line":661},[492,1232,1209],{"class":502},[492,1234,1235],{"class":603},"title",[492,1237,1214],{"class":502},[492,1239,1217],{"class":502},[492,1241,503],{"class":502},[492,1243,1244],{"class":1222},"Conflict",[492,1246,1214],{"class":502},[492,1248,1228],{"class":502},[492,1250,1251,1253,1255,1257,1259,1263],{"class":494,"line":668},[492,1252,1209],{"class":502},[492,1254,1107],{"class":603},[492,1256,1214],{"class":502},[492,1258,1217],{"class":502},[492,1260,1262],{"class":1261},"sbssI"," 409",[492,1264,1228],{"class":502},[492,1266,1268,1270,1272,1274,1276,1278,1281,1283],{"class":494,"line":1267},5,[492,1269,1209],{"class":502},[492,1271,950],{"class":603},[492,1273,1214],{"class":502},[492,1275,1217],{"class":502},[492,1277,503],{"class":502},[492,1279,1280],{"class":1222},"A termék elfogyott.",[492,1282,1214],{"class":502},[492,1284,1228],{"class":502},[492,1286,1288,1290,1293,1295,1297,1299,1302,1304],{"class":494,"line":1287},6,[492,1289,1209],{"class":502},[492,1291,1292],{"class":603},"instance",[492,1294,1214],{"class":502},[492,1296,1217],{"class":502},[492,1298,503],{"class":502},[492,1300,1301],{"class":1222},"\u002Fapi\u002Fv1\u002Fshop\u002Forders",[492,1303,1214],{"class":502},[492,1305,1228],{"class":502},[492,1307,1309,1311,1313,1315,1317,1319,1322],{"class":494,"line":1308},7,[492,1310,1209],{"class":502},[492,1312,460],{"class":603},[492,1314,1214],{"class":502},[492,1316,1217],{"class":502},[492,1318,503],{"class":502},[492,1320,1321],{"class":1222},"shop_api_out_of_stock",[492,1323,510],{"class":502},[492,1325,1327],{"class":494,"line":1326},8,[492,1328,1329],{"class":502},"}\n",[975,1331,1332,1342,1353,1364],{},[978,1333,1334,1335,1338,1339,1341],{},"a ",[537,1336,1337],{},"409"," az ",[460,1340,946],{},"-ból jött,",[978,1343,1334,1344,1348,1349,1352],{},[537,1345,1346],{},[460,1347,950],{}," a publikus üzenet: a belső ",[460,1350,1351],{},"Error()"," szöveg (query, wrap-lánc) soha nem kerül ide,",[978,1354,1334,1355,1359,1360,1363],{},[537,1356,1357],{},[460,1358,460],{}," stabil, gépi olvasású: a frontend erre ágazhat el (",[460,1361,1362],{},"if (body.code === \"shop_api_out_of_stock\")","), az üzenetszöveg változásától függetlenül,",[978,1365,1366,1367,1370],{},"log és Sentry: ",[537,1368,1369],{},"semmi"," (státusz-mappelt 4xx).",[448,1372,1373,1374,1377],{},"Ha ugyanez a hívás adatbázis-hibán bukik, a kliens egy 500-at kap ",[460,1375,1376],{},"shop_api_place_order_failed"," kóddal és a generikus publikus üzenettel, miközben a teljes lánc és stack a logban és a Sentryben landol.",[545,1379,1381],{"id":1380},"render-és-report-egyetlen-mappingben","Render és report egyetlen mappingben",[448,1383,1384,1385,1388,1389,517,1392,517,1394,1396,1397,1400,1401,1403],{},"A kliens felé látszó (render) és a logba\u002FSentrybe menő (report) oldal ",[537,1386,1387],{},"egyetlen"," központi mappingben él: a render-oldal a fenti táblázat (az inputja az ",[460,1390,1391],{},"errs.Status",[460,1393,1090],{},[460,1395,1086],{},"), a report-oldal pedig az automatikus 5xx-logolás és a ",[452,1398,1399],{"href":194},"Sentry-integráció",". Nem írsz semmilyen render-logikát hibánként: a hibamód deklarációja (",[460,1402,1114],{},") hordozza az összes információt, amiből a mapping dolgozik.",[1405,1406,1407,1408,1411],"warning",{},"Ne kerüld meg a mappinget kézzel írt ",[460,1409,1410],{},"w.WriteHeader(500)"," válaszokkal a handlerben. Adj vissza hibát: így a válasz formája, a logolás és a Sentry-jelentés is konzisztens marad, és a tesztjeid is ugyanazt látják, mint a kliens.",[545,1413,1415],{"id":1414},"a-spec-oldala","A spec oldala",[448,1417,1418,1419,1131,1422,1425,1426,1428,1429,1431,1432,1036,1434,1436,1437,1440,1441,1443],{},"A generált ",[460,1420,1421],{},"spec\u002Ftypespec\u002Fshared\u002Ferrors.tsp",[460,1423,1424],{},"httperr.Problem"," tükre (a ",[460,1427,520],{},"-ral együtt), így az OpenAPI-ból generált frontend-kliensek pontosan ezt a formát kapják; lásd a ",[452,1430,233],{"href":234}," oldalt. Ha az egyiket bővíted, bővítsd a másikat is. A dev-only ",[460,1433,1035],{},[460,1435,1039],{}," membereket az ",[460,1438,1439],{},"errors.tsp"," szándékosan ",[537,1442,1015],{}," tükrözi: productionben soha nem jelennek meg, így kliens nem építhet rájuk.",[545,1445,1447],{"id":1446},"használt-patternek","Használt patternek",[975,1449,1450,1462],{},[978,1451,1452,1455,1456,1458,1459,575],{},[537,1453,1454],{},"RFC 9457 Problem Details",": a ",[460,1457,516],{}," struct és a szabvány maga, lásd ",[452,1460,238],{"href":1461},"\u002Fhu\u002Fconcepts\u002Fdesign-patterns#rfc-9457-problem-details",[978,1463,1464,1022,1471,575],{},[537,1465,1466,1467,1470],{},"Kaszkádoló ",[460,1468,1469],{},"errors.As"," mapping",[452,1472,238],{"href":1473},"\u002Fhu\u002Fconcepts\u002Fdesign-patterns#kaszk%C3%A1dol%C3%B3-errorsas-mapping",[448,1475,1476,1477,575],{},"A szabvány hivatalos szövege: ",[452,1478,1480],{"href":454,"rel":1479},[456],"RFC 9457: Problem Details for HTTP APIs",[545,1482,1484],{"id":1483},"kapcsolódó-oldalak","Kapcsolódó oldalak",[975,1486,1487,1495,1500,1507],{},[978,1488,1489,1455,1492,1494],{},[452,1490,1491],{"href":392},"httperr: Áttekintés",[460,1493,516],{}," forma és a gyors konstruktorok.",[978,1496,1497,1499],{},[452,1498,400],{"href":401},": a 422-es forma, amit a mapping validációs sora olvas.",[978,1501,1502,1036,1504,1506],{},[452,1503,1051],{"href":367},[452,1505,224],{"href":225},": honnan jönnek az ezen az oldalon renderelt hibák.",[978,1508,1509,1511,1512,517,1514,1516],{},[452,1510,258],{"href":259},": hogyan drótozza be a kit a ",[460,1513,708],{},[460,1515,833],{},"-et a generált strict szerverbe.",[1518,1519,1520],"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 .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 .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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":488,"searchDepth":614,"depth":614,"links":1522},[1523,1524,1525,1526,1527,1528,1529,1530,1531],{"id":547,"depth":614,"text":548},{"id":861,"depth":614,"text":862},{"id":1069,"depth":614,"text":1069},{"id":1124,"depth":614,"text":1125},{"id":1167,"depth":614,"text":1168},{"id":1380,"depth":614,"text":1381},{"id":1414,"depth":614,"text":1415},{"id":1446,"depth":614,"text":1447},{"id":1483,"depth":614,"text":1484},"A httperr csomag, RFC 9457 problem+json minden hibára, egyetlen központi mappinggel.","md",null,{},{"icon":398},{"title":395,"description":1532},"sXkzsOzpK6oprV4udsvsDwtJcICZmxUjKzCHL36sShk",[1540,1542],{"title":52,"path":392,"stem":393,"description":1541,"icon":387,"children":-1},"RFC 9457 problem details HTTP handlerekhez.",{"title":400,"path":401,"stem":402,"description":1543,"icon":403,"children":-1},"Struct-tag-alapú kérés-validáció go-playground\u002Fvalidatorral, strict middleware-ként futtatva, 422 problem-válaszokkal.",1785445887081]