[{"data":1,"prerenderedAt":2722},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-concepts-error-model":442,"-hu-concepts-error-model-surround":2717},[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":224,"body":444,"description":2710,"extension":2711,"links":2712,"meta":2713,"navigation":2714,"path":225,"seo":2715,"stem":226,"__hash__":2716},"docs_hu\u002Fhu\u002F2.concepts\u002F2.error-model.md",{"type":445,"value":446,"toc":2700},"minimark",[447,469,686,732,747,828,833,858,877,881,904,1043,1174,1177,1443,1594,1597,1743,1746,1755,1872,1886,1908,1912,1918,1991,2016,2044,2048,2063,2543,2563,2566,2586,2590,2617,2621,2654,2658,2696],[448,449,450,451,455,456,463,464,468],"p",{},"A gpsystem hibamodellje két rétegből áll, és egyetlen elvből: ",[452,453,454],"strong",{},"egy hibaforma a dróton, egy mapping a kódban."," Minden hiba, amit egy gpsystem service visszaad (validációs bukás, 404, panic, adatbázis-timeout), ",[457,458,462],"a",{"href":459,"rel":460},"https:\u002F\u002Fwww.rfc-editor.org\u002Frfc\u002Frfc9457",[461],"nofollow","RFC 9457"," problem dokumentumként érkezik a klienshez, ",[465,466,467],"code",{},"Content-Type: application\u002Fproblem+json","-nel:",[470,471,476],"pre",{"className":472,"code":473,"language":474,"meta":475,"style":475},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"type\": \"about:blank\",\n  \"title\": \"Unprocessable Entity\",\n  \"status\": 422,\n  \"detail\": \"One or more fields failed validation.\",\n  \"instance\": \"\u002Fapi\u002Fv1\u002Fshop\u002Forders\",\n  \"errors\": [\n    { \"field\": \"quantity\", \"rule\": \"min\", \"message\": \"must be at least 1\" }\n  ]\n}\n","json","",[465,477,478,487,515,536,554,575,596,611,674,680],{"__ignoreMap":475},[479,480,483],"span",{"class":481,"line":482},"line",1,[479,484,486],{"class":485},"sMK4o","{\n",[479,488,490,493,497,500,503,506,510,512],{"class":481,"line":489},2,[479,491,492],{"class":485},"  \"",[479,494,496],{"class":495},"spNyl","type",[479,498,499],{"class":485},"\"",[479,501,502],{"class":485},":",[479,504,505],{"class":485}," \"",[479,507,509],{"class":508},"sfazB","about:blank",[479,511,499],{"class":485},[479,513,514],{"class":485},",\n",[479,516,518,520,523,525,527,529,532,534],{"class":481,"line":517},3,[479,519,492],{"class":485},[479,521,522],{"class":495},"title",[479,524,499],{"class":485},[479,526,502],{"class":485},[479,528,505],{"class":485},[479,530,531],{"class":508},"Unprocessable Entity",[479,533,499],{"class":485},[479,535,514],{"class":485},[479,537,539,541,544,546,548,552],{"class":481,"line":538},4,[479,540,492],{"class":485},[479,542,543],{"class":495},"status",[479,545,499],{"class":485},[479,547,502],{"class":485},[479,549,551],{"class":550},"sbssI"," 422",[479,553,514],{"class":485},[479,555,557,559,562,564,566,568,571,573],{"class":481,"line":556},5,[479,558,492],{"class":485},[479,560,561],{"class":495},"detail",[479,563,499],{"class":485},[479,565,502],{"class":485},[479,567,505],{"class":485},[479,569,570],{"class":508},"One or more fields failed validation.",[479,572,499],{"class":485},[479,574,514],{"class":485},[479,576,578,580,583,585,587,589,592,594],{"class":481,"line":577},6,[479,579,492],{"class":485},[479,581,582],{"class":495},"instance",[479,584,499],{"class":485},[479,586,502],{"class":485},[479,588,505],{"class":485},[479,590,591],{"class":508},"\u002Fapi\u002Fv1\u002Fshop\u002Forders",[479,593,499],{"class":485},[479,595,514],{"class":485},[479,597,599,601,604,606,608],{"class":481,"line":598},7,[479,600,492],{"class":485},[479,602,603],{"class":495},"errors",[479,605,499],{"class":485},[479,607,502],{"class":485},[479,609,610],{"class":485}," [\n",[479,612,614,617,619,623,625,627,629,632,634,637,639,642,644,646,648,651,653,655,657,660,662,664,666,669,671],{"class":481,"line":613},8,[479,615,616],{"class":485},"    {",[479,618,505],{"class":485},[479,620,622],{"class":621},"sBMFI","field",[479,624,499],{"class":485},[479,626,502],{"class":485},[479,628,505],{"class":485},[479,630,631],{"class":508},"quantity",[479,633,499],{"class":485},[479,635,636],{"class":485},",",[479,638,505],{"class":485},[479,640,641],{"class":621},"rule",[479,643,499],{"class":485},[479,645,502],{"class":485},[479,647,505],{"class":485},[479,649,650],{"class":508},"min",[479,652,499],{"class":485},[479,654,636],{"class":485},[479,656,505],{"class":485},[479,658,659],{"class":621},"message",[479,661,499],{"class":485},[479,663,502],{"class":485},[479,665,505],{"class":485},[479,667,668],{"class":508},"must be at least 1",[479,670,499],{"class":485},[479,672,673],{"class":485}," }\n",[479,675,677],{"class":481,"line":676},9,[479,678,679],{"class":485},"  ]\n",[479,681,683],{"class":481,"line":682},10,[479,684,685],{"class":485},"}\n",[448,687,688,689,694,695,699,700,702,703,706,707,709,710,712,713,716,717,716,720,723,724,727,728,731],{},"A drót felé néző forma a ",[457,690,691],{"href":396},[465,692,693],{},"httperr.Problem","; alatta a service-ek és repository-k hagyományos, ",[457,696,697],{"href":363},[465,698,358],{},"-szel épített Go hibákat adnak vissza: az ",[465,701,358],{}," önálló, csak standard librarytől függő modul (",[465,704,705],{},"github.com\u002Fgp-system\u002Ferrs","). Ezek a hibák stack trace-t, gépi olvasású kódot és kliensbiztos publikus üzenetet hordoznak. Az ",[465,708,358],{}," a kittel és a kit nélkül is ugyanúgy működik, bármilyen Go programban; ez az oldal a teljes pipeline szintjén marad. A teljes ",[465,711,358],{}," API-hoz (",[465,714,715],{},"New",", ",[465,718,719],{},"Wrap",[465,721,722],{},"Define",", attribútumok, accessorok, stack-szemantika) lásd az ",[457,725,726],{"href":363},"errs: Áttekintés"," és az ",[457,729,730],{"href":367},"errs: API"," oldalt.",[448,733,734,735,738,739,742,743,746],{},"A kettősség attribútumokkal fejeződik ki: a ",[465,736,737],{},"Public"," és a ",[465,740,741],{},"Status"," a render-oldal (mit lát a kliens), a ",[465,744,745],{},"Code",", a wrap-lánc és a stack a report-oldal (mi megy a logba\u002FSentrybe). A renderelést nem az egyes hiba végzi, hanem egyetlen központi mapping, és a láncnak négy különböző modul felel meg, egy-egy láncszemért:",[748,749,750,766],"table",{},[751,752,753],"thead",{},[754,755,756,760,763],"tr",{},[757,758,759],"th",{},"Ki",[757,761,762],{},"Mit csinál",[757,764,765],{},"Oldal",[767,768,769,783,800,814],"tbody",{},[754,770,771,776,779],{},[772,773,774],"td",{},[465,775,358],{},[772,777,778],{},"épít és wrappel hibákat: stack, kód, publikus üzenet",[772,780,781],{},[457,782,726],{"href":363},[754,784,785,789,796],{},[772,786,787],{},[465,788,386],{},[772,790,791,792,795],{},"renderel egy HTTP ",[465,793,794],{},"problem+json"," válasszá",[772,797,798],{},[457,799,395],{"href":396},[754,801,802,807,810],{},[772,803,804],{},[465,805,806],{},"telemetry\u002Flogx",[772,808,809],{},"strukturált rekordként logolja",[772,811,812],{},[457,813,183],{"href":184},[754,815,816,821,824],{},[772,817,818],{},[465,819,820],{},"telemetry\u002Fsentryx",[772,822,823],{},"Sentrybe riportolja, kód szerint csoportosítva",[772,825,826],{},[457,827,193],{"href":194},[829,830,832],"h2",{"id":831},"miért-két-üzenet","Miért két üzenet",[448,834,835,836,839,840,843,844,847,848,850,851,854,855,857],{},"Egy hibának két közönsége van. A belső üzenet (",[465,837,838],{},"Error()",") neked szól: teljes részlet, becsomagolt okok, a hibázó query. A ",[452,841,842],{},"publikus"," üzenet az egyetlen szöveg, amit a kliens láthat. A kettő szétválasztása azt jelenti, hogy egy elszabadult ",[465,845,846],{},"err.Error()"," a válaszban nem szivárogtathat ki belső részletet: a ",[465,849,386],{}," mapping a ",[465,852,853],{},"errs.PublicOf","-ot olvassa, soha nem az ",[465,856,838],{},"-t.",[448,859,860,861,864,865,868,869,872,873,876],{},"A stack trace és a wrap-lánc minden 5xx-nél a logba kerül. HTTP-válaszba ",[452,862,863],{},"csak"," dev módban (",[465,866,867],{},"HTTP_EXPOSE_INTERNAL_ERRORS=true",") jut el, a Problem ",[465,870,871],{},"stack"," és ",[465,874,875],{},"chain"," extension membereként; productionben kizárólag a logban.",[829,878,880],{"id":879},"a-shop-példa-elfogyott-a-készlet","A shop példa: elfogyott a készlet",[448,882,883,884,887,888,891,892,895,896,899,900,903],{},"A várt üzleti hiba (",[465,885,886],{},"ErrOutOfStock",") ott van deklarálva, ahol természetesen keletkezik: a modul-szintű repositoryban. A handler viszont soha nem importálja a repositoryt, ezért a sentinel a láncon fölfelé re-exportálódik: a ",[465,889,890],{},"core"," továbbadja (",[465,893,894],{},"var ErrOutOfStock = repository.ErrOutOfStock","), a surface ",[465,897,898],{},"service"," pedig szintén, így a handler és a service mindig csak a saját surface-e service csomagját ellenőrzi. A surface-specifikus wrap-hiba (",[465,901,902],{},"ErrPlaceOrder",") a surface service-ében él:",[470,905,910],{"className":906,"code":907,"filename":908,"language":909,"meta":475,"style":475},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","package repository\n\nimport (\n    \"net\u002Fhttp\"\n\n    \"github.com\u002Fgp-system\u002Ferrs\"\n)\n\nvar ErrOutOfStock = errs.Define(\"shop_out_of_stock\",\n    errs.Public(\"A termék elfogyott.\"),\n    errs.Status(http.StatusConflict))\n","internal\u002Fmodules\u002Fshop\u002Frepository\u002Ferrors.go","go",[465,911,912,920,926,935,946,950,958,963,967,1000,1021],{"__ignoreMap":475},[479,913,914,917],{"class":481,"line":482},[479,915,916],{"class":485},"package",[479,918,919],{"class":621}," repository\n",[479,921,922],{"class":481,"line":489},[479,923,925],{"emptyLinePlaceholder":924},true,"\n",[479,927,928,932],{"class":481,"line":517},[479,929,931],{"class":930},"s7zQu","import",[479,933,934],{"class":485}," (\n",[479,936,937,940,943],{"class":481,"line":538},[479,938,939],{"class":485},"    \"",[479,941,942],{"class":621},"net\u002Fhttp",[479,944,945],{"class":485},"\"\n",[479,947,948],{"class":481,"line":556},[479,949,925],{"emptyLinePlaceholder":924},[479,951,952,954,956],{"class":481,"line":577},[479,953,939],{"class":485},[479,955,705],{"class":621},[479,957,945],{"class":485},[479,959,960],{"class":481,"line":598},[479,961,962],{"class":485},")\n",[479,964,965],{"class":481,"line":613},[479,966,925],{"emptyLinePlaceholder":924},[479,968,969,972,976,979,982,985,988,991,993,996,998],{"class":481,"line":676},[479,970,971],{"class":485},"var",[479,973,975],{"class":974},"sTEyZ"," ErrOutOfStock ",[479,977,978],{"class":485},"=",[479,980,981],{"class":974}," errs",[479,983,984],{"class":485},".",[479,986,722],{"class":987},"s2Zo4",[479,989,990],{"class":485},"(",[479,992,499],{"class":485},[479,994,995],{"class":508},"shop_out_of_stock",[479,997,499],{"class":485},[479,999,514],{"class":485},[479,1001,1002,1005,1007,1009,1011,1013,1016,1018],{"class":481,"line":682},[479,1003,1004],{"class":974},"    errs",[479,1006,984],{"class":485},[479,1008,737],{"class":987},[479,1010,990],{"class":485},[479,1012,499],{"class":485},[479,1014,1015],{"class":508},"A termék elfogyott.",[479,1017,499],{"class":485},[479,1019,1020],{"class":485},"),\n",[479,1022,1024,1026,1028,1030,1032,1035,1037,1040],{"class":481,"line":1023},11,[479,1025,1004],{"class":974},[479,1027,984],{"class":485},[479,1029,741],{"class":987},[479,1031,990],{"class":485},[479,1033,1034],{"class":974},"http",[479,1036,984],{"class":485},[479,1038,1039],{"class":974},"StatusConflict",[479,1041,1042],{"class":485},"))\n",[470,1044,1047],{"className":906,"code":1045,"filename":1046,"language":909,"meta":475,"style":475},"package service\n\nimport (\n    \"github.com\u002Fgp-system\u002Ferrs\"\n\n    \"github.com\u002Facme\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Fcore\"\n)\n\n\u002F\u002F Re-export a core-ból (ami a repositoryból exportálja tovább): a handler\n\u002F\u002F csak a saját surface-e service csomagját importálja.\nvar ErrOutOfStock = core.ErrOutOfStock\n\nvar ErrPlaceOrder = errs.Define(\"shop_api_place_order_failed\",\n    errs.Public(\"A rendelés feladása nem sikerült, próbáld újra később.\"))\n","internal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fservice\u002Ferrors.go",[465,1048,1049,1056,1060,1066,1074,1078,1087,1091,1095,1101,1106,1122,1127,1154],{"__ignoreMap":475},[479,1050,1051,1053],{"class":481,"line":482},[479,1052,916],{"class":485},[479,1054,1055],{"class":621}," service\n",[479,1057,1058],{"class":481,"line":489},[479,1059,925],{"emptyLinePlaceholder":924},[479,1061,1062,1064],{"class":481,"line":517},[479,1063,931],{"class":930},[479,1065,934],{"class":485},[479,1067,1068,1070,1072],{"class":481,"line":538},[479,1069,939],{"class":485},[479,1071,705],{"class":621},[479,1073,945],{"class":485},[479,1075,1076],{"class":481,"line":556},[479,1077,925],{"emptyLinePlaceholder":924},[479,1079,1080,1082,1085],{"class":481,"line":577},[479,1081,939],{"class":485},[479,1083,1084],{"class":621},"github.com\u002Facme\u002Fshop\u002Finternal\u002Fmodules\u002Fshop\u002Fcore",[479,1086,945],{"class":485},[479,1088,1089],{"class":481,"line":598},[479,1090,962],{"class":485},[479,1092,1093],{"class":481,"line":613},[479,1094,925],{"emptyLinePlaceholder":924},[479,1096,1097],{"class":481,"line":676},[479,1098,1100],{"class":1099},"sHwdD","\u002F\u002F Re-export a core-ból (ami a repositoryból exportálja tovább): a handler\n",[479,1102,1103],{"class":481,"line":682},[479,1104,1105],{"class":1099},"\u002F\u002F csak a saját surface-e service csomagját importálja.\n",[479,1107,1108,1110,1112,1114,1117,1119],{"class":481,"line":1023},[479,1109,971],{"class":485},[479,1111,975],{"class":974},[479,1113,978],{"class":485},[479,1115,1116],{"class":974}," core",[479,1118,984],{"class":485},[479,1120,1121],{"class":974},"ErrOutOfStock\n",[479,1123,1125],{"class":481,"line":1124},12,[479,1126,925],{"emptyLinePlaceholder":924},[479,1128,1130,1132,1135,1137,1139,1141,1143,1145,1147,1150,1152],{"class":481,"line":1129},13,[479,1131,971],{"class":485},[479,1133,1134],{"class":974}," ErrPlaceOrder ",[479,1136,978],{"class":485},[479,1138,981],{"class":974},[479,1140,984],{"class":485},[479,1142,722],{"class":987},[479,1144,990],{"class":485},[479,1146,499],{"class":485},[479,1148,1149],{"class":508},"shop_api_place_order_failed",[479,1151,499],{"class":485},[479,1153,514],{"class":485},[479,1155,1157,1159,1161,1163,1165,1167,1170,1172],{"class":481,"line":1156},14,[479,1158,1004],{"class":974},[479,1160,984],{"class":485},[479,1162,737],{"class":987},[479,1164,990],{"class":485},[479,1166,499],{"class":485},[479,1168,1169],{"class":508},"A rendelés feladása nem sikerült, próbáld újra később.",[479,1171,499],{"class":485},[479,1173,1042],{"class":485},[448,1175,1176],{},"A hiba a repositoryban keletkezik (itt capture-ölődik a stack), és minden réteg a saját kontextusával wrappeli fölfelé:",[470,1178,1181],{"className":906,"code":1179,"filename":1180,"language":909,"meta":475,"style":475},"func (r *Orders) DecrementStock(ctx context.Context, productID string, qty int) error {\n    tag, err := r.db.Exec(ctx, decrementStockSQL, productID, qty)\n    if err != nil {\n        return errs.Wrap(err, \"orders: decrement stock\",\n            errs.With(\"product_id\", productID))\n    }\n    if tag.RowsAffected() == 0 {\n        return ErrOutOfStock.New(\"orders: decrement stock\",\n            errs.With(\"product_id\", productID))\n    }\n    return nil\n}\n","internal\u002Fmodules\u002Fshop\u002Frepository\u002Forders.go",[465,1182,1183,1244,1289,1304,1331,1356,1361,1384,1405,1427,1431,1439],{"__ignoreMap":475},[479,1184,1185,1188,1191,1195,1198,1201,1204,1207,1209,1212,1215,1217,1220,1222,1225,1228,1230,1233,1236,1238,1241],{"class":481,"line":482},[479,1186,1187],{"class":485},"func",[479,1189,1190],{"class":485}," (",[479,1192,1194],{"class":1193},"sHdIc","r ",[479,1196,1197],{"class":485},"*",[479,1199,1200],{"class":621},"Orders",[479,1202,1203],{"class":485},")",[479,1205,1206],{"class":987}," DecrementStock",[479,1208,990],{"class":485},[479,1210,1211],{"class":1193},"ctx",[479,1213,1214],{"class":621}," context",[479,1216,984],{"class":485},[479,1218,1219],{"class":621},"Context",[479,1221,636],{"class":485},[479,1223,1224],{"class":1193}," productID",[479,1226,1227],{"class":495}," string",[479,1229,636],{"class":485},[479,1231,1232],{"class":1193}," qty",[479,1234,1235],{"class":495}," int",[479,1237,1203],{"class":485},[479,1239,1240],{"class":495}," error",[479,1242,1243],{"class":485}," {\n",[479,1245,1246,1249,1251,1254,1257,1260,1262,1265,1267,1270,1272,1274,1276,1279,1281,1283,1285,1287],{"class":481,"line":489},[479,1247,1248],{"class":974},"    tag",[479,1250,636],{"class":485},[479,1252,1253],{"class":974}," err ",[479,1255,1256],{"class":485},":=",[479,1258,1259],{"class":974}," r",[479,1261,984],{"class":485},[479,1263,1264],{"class":974},"db",[479,1266,984],{"class":485},[479,1268,1269],{"class":987},"Exec",[479,1271,990],{"class":485},[479,1273,1211],{"class":974},[479,1275,636],{"class":485},[479,1277,1278],{"class":974}," decrementStockSQL",[479,1280,636],{"class":485},[479,1282,1224],{"class":974},[479,1284,636],{"class":485},[479,1286,1232],{"class":974},[479,1288,962],{"class":485},[479,1290,1291,1294,1296,1299,1302],{"class":481,"line":517},[479,1292,1293],{"class":930},"    if",[479,1295,1253],{"class":974},[479,1297,1298],{"class":485},"!=",[479,1300,1301],{"class":485}," nil",[479,1303,1243],{"class":485},[479,1305,1306,1309,1311,1313,1315,1317,1320,1322,1324,1327,1329],{"class":481,"line":538},[479,1307,1308],{"class":930},"        return",[479,1310,981],{"class":974},[479,1312,984],{"class":485},[479,1314,719],{"class":987},[479,1316,990],{"class":485},[479,1318,1319],{"class":974},"err",[479,1321,636],{"class":485},[479,1323,505],{"class":485},[479,1325,1326],{"class":508},"orders: decrement stock",[479,1328,499],{"class":485},[479,1330,514],{"class":485},[479,1332,1333,1336,1338,1341,1343,1345,1348,1350,1352,1354],{"class":481,"line":556},[479,1334,1335],{"class":974},"            errs",[479,1337,984],{"class":485},[479,1339,1340],{"class":987},"With",[479,1342,990],{"class":485},[479,1344,499],{"class":485},[479,1346,1347],{"class":508},"product_id",[479,1349,499],{"class":485},[479,1351,636],{"class":485},[479,1353,1224],{"class":974},[479,1355,1042],{"class":485},[479,1357,1358],{"class":481,"line":577},[479,1359,1360],{"class":485},"    }\n",[479,1362,1363,1365,1368,1370,1373,1376,1379,1382],{"class":481,"line":598},[479,1364,1293],{"class":930},[479,1366,1367],{"class":974}," tag",[479,1369,984],{"class":485},[479,1371,1372],{"class":987},"RowsAffected",[479,1374,1375],{"class":485},"()",[479,1377,1378],{"class":485}," ==",[479,1380,1381],{"class":550}," 0",[479,1383,1243],{"class":485},[479,1385,1386,1388,1391,1393,1395,1397,1399,1401,1403],{"class":481,"line":613},[479,1387,1308],{"class":930},[479,1389,1390],{"class":974}," ErrOutOfStock",[479,1392,984],{"class":485},[479,1394,715],{"class":987},[479,1396,990],{"class":485},[479,1398,499],{"class":485},[479,1400,1326],{"class":508},[479,1402,499],{"class":485},[479,1404,514],{"class":485},[479,1406,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425],{"class":481,"line":676},[479,1408,1335],{"class":974},[479,1410,984],{"class":485},[479,1412,1340],{"class":987},[479,1414,990],{"class":485},[479,1416,499],{"class":485},[479,1418,1347],{"class":508},[479,1420,499],{"class":485},[479,1422,636],{"class":485},[479,1424,1224],{"class":974},[479,1426,1042],{"class":485},[479,1428,1429],{"class":481,"line":682},[479,1430,1360],{"class":485},[479,1432,1433,1436],{"class":481,"line":1023},[479,1434,1435],{"class":930},"    return",[479,1437,1438],{"class":485}," nil\n",[479,1440,1441],{"class":481,"line":1124},[479,1442,685],{"class":485},[470,1444,1447],{"className":906,"code":1445,"filename":1446,"language":909,"meta":475,"style":475},"func (s *Service) PlaceOrder(ctx context.Context, in PlaceOrderInput) error {\n    err := s.core.PlaceOrder(ctx, in) \u002F\u002F tranzakció + készletcsökkentés + outbox a core-ban\n    if errors.Is(err, ErrOutOfStock) {\n        return err \u002F\u002F várt üzleti hiba: megy tovább változatlanul\n    }\n    return ErrPlaceOrder.Wrap(err, \"shop: place order\") \u002F\u002F nil-safe: nil-re nil\n}\n","internal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fservice\u002Fservice.go",[465,1448,1449,1492,1524,1548,1557,1561,1590],{"__ignoreMap":475},[479,1450,1451,1453,1455,1458,1460,1463,1465,1468,1470,1472,1474,1476,1478,1480,1483,1486,1488,1490],{"class":481,"line":482},[479,1452,1187],{"class":485},[479,1454,1190],{"class":485},[479,1456,1457],{"class":1193},"s ",[479,1459,1197],{"class":485},[479,1461,1462],{"class":621},"Service",[479,1464,1203],{"class":485},[479,1466,1467],{"class":987}," PlaceOrder",[479,1469,990],{"class":485},[479,1471,1211],{"class":1193},[479,1473,1214],{"class":621},[479,1475,984],{"class":485},[479,1477,1219],{"class":621},[479,1479,636],{"class":485},[479,1481,1482],{"class":1193}," in",[479,1484,1485],{"class":621}," PlaceOrderInput",[479,1487,1203],{"class":485},[479,1489,1240],{"class":495},[479,1491,1243],{"class":485},[479,1493,1494,1497,1499,1502,1504,1506,1508,1511,1513,1515,1517,1519,1521],{"class":481,"line":489},[479,1495,1496],{"class":974},"    err ",[479,1498,1256],{"class":485},[479,1500,1501],{"class":974}," s",[479,1503,984],{"class":485},[479,1505,890],{"class":974},[479,1507,984],{"class":485},[479,1509,1510],{"class":987},"PlaceOrder",[479,1512,990],{"class":485},[479,1514,1211],{"class":974},[479,1516,636],{"class":485},[479,1518,1482],{"class":974},[479,1520,1203],{"class":485},[479,1522,1523],{"class":1099}," \u002F\u002F tranzakció + készletcsökkentés + outbox a core-ban\n",[479,1525,1526,1528,1531,1533,1536,1538,1540,1542,1544,1546],{"class":481,"line":517},[479,1527,1293],{"class":930},[479,1529,1530],{"class":974}," errors",[479,1532,984],{"class":485},[479,1534,1535],{"class":987},"Is",[479,1537,990],{"class":485},[479,1539,1319],{"class":974},[479,1541,636],{"class":485},[479,1543,1390],{"class":974},[479,1545,1203],{"class":485},[479,1547,1243],{"class":485},[479,1549,1550,1552,1554],{"class":481,"line":538},[479,1551,1308],{"class":930},[479,1553,1253],{"class":974},[479,1555,1556],{"class":1099},"\u002F\u002F várt üzleti hiba: megy tovább változatlanul\n",[479,1558,1559],{"class":481,"line":556},[479,1560,1360],{"class":485},[479,1562,1563,1565,1568,1570,1572,1574,1576,1578,1580,1583,1585,1587],{"class":481,"line":577},[479,1564,1435],{"class":930},[479,1566,1567],{"class":974}," ErrPlaceOrder",[479,1569,984],{"class":485},[479,1571,719],{"class":987},[479,1573,990],{"class":485},[479,1575,1319],{"class":974},[479,1577,636],{"class":485},[479,1579,505],{"class":485},[479,1581,1582],{"class":508},"shop: place order",[479,1584,499],{"class":485},[479,1586,1203],{"class":485},[479,1588,1589],{"class":1099}," \u002F\u002F nil-safe: nil-re nil\n",[479,1591,1592],{"class":481,"line":598},[479,1593,685],{"class":485},[448,1595,1596],{},"A handler csak visszaadja, amit kap, a renderelés nem az ő dolga:",[470,1598,1601],{"className":906,"code":1599,"filename":1600,"language":909,"meta":475,"style":475},"func (h *Handler) PlaceOrder(ctx context.Context, req gen.PlaceOrderRequest) (gen.PlaceOrderResponse, error) {\n    if err := h.svc.PlaceOrder(ctx, toPlaceOrder(req)); err != nil {\n        return nil, err\n    }\n    return gen.PlaceOrder201Response{}, nil\n}\n","internal\u002Fmodules\u002Fshop\u002Fsurfaces\u002Fapi\u002Fhttp\u002Fhandler.go",[465,1602,1603,1664,1709,1719,1723,1739],{"__ignoreMap":475},[479,1604,1605,1607,1609,1612,1614,1617,1619,1621,1623,1625,1627,1629,1631,1633,1636,1639,1641,1644,1646,1648,1651,1653,1656,1658,1660,1662],{"class":481,"line":482},[479,1606,1187],{"class":485},[479,1608,1190],{"class":485},[479,1610,1611],{"class":1193},"h ",[479,1613,1197],{"class":485},[479,1615,1616],{"class":621},"Handler",[479,1618,1203],{"class":485},[479,1620,1467],{"class":987},[479,1622,990],{"class":485},[479,1624,1211],{"class":1193},[479,1626,1214],{"class":621},[479,1628,984],{"class":485},[479,1630,1219],{"class":621},[479,1632,636],{"class":485},[479,1634,1635],{"class":1193}," req",[479,1637,1638],{"class":621}," gen",[479,1640,984],{"class":485},[479,1642,1643],{"class":621},"PlaceOrderRequest",[479,1645,1203],{"class":485},[479,1647,1190],{"class":485},[479,1649,1650],{"class":621},"gen",[479,1652,984],{"class":485},[479,1654,1655],{"class":621},"PlaceOrderResponse",[479,1657,636],{"class":485},[479,1659,1240],{"class":495},[479,1661,1203],{"class":485},[479,1663,1243],{"class":485},[479,1665,1666,1668,1670,1672,1675,1677,1680,1682,1684,1686,1688,1690,1693,1695,1698,1701,1703,1705,1707],{"class":481,"line":489},[479,1667,1293],{"class":930},[479,1669,1253],{"class":974},[479,1671,1256],{"class":485},[479,1673,1674],{"class":974}," h",[479,1676,984],{"class":485},[479,1678,1679],{"class":974},"svc",[479,1681,984],{"class":485},[479,1683,1510],{"class":987},[479,1685,990],{"class":485},[479,1687,1211],{"class":974},[479,1689,636],{"class":485},[479,1691,1692],{"class":987}," toPlaceOrder",[479,1694,990],{"class":485},[479,1696,1697],{"class":974},"req",[479,1699,1700],{"class":485},"));",[479,1702,1253],{"class":974},[479,1704,1298],{"class":485},[479,1706,1301],{"class":485},[479,1708,1243],{"class":485},[479,1710,1711,1713,1716],{"class":481,"line":517},[479,1712,1308],{"class":930},[479,1714,1715],{"class":485}," nil,",[479,1717,1718],{"class":974}," err\n",[479,1720,1721],{"class":481,"line":538},[479,1722,1360],{"class":485},[479,1724,1725,1727,1729,1731,1734,1737],{"class":481,"line":556},[479,1726,1435],{"class":930},[479,1728,1638],{"class":621},[479,1730,984],{"class":485},[479,1732,1733],{"class":621},"PlaceOrder201Response",[479,1735,1736],{"class":485},"{},",[479,1738,1438],{"class":485},[479,1740,1741],{"class":481,"line":577},[479,1742,685],{"class":485},[448,1744,1745],{},"És ekkor a három közönség hármat lát:",[448,1747,1748,1751,1752,1754],{},[452,1749,1750],{},"A kliens"," (409, mert az ",[465,1753,886],{}," státusz-mappelt):",[470,1756,1758],{"className":472,"code":1757,"language":474,"meta":475,"style":475},"{\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_out_of_stock\"\n}\n",[465,1759,1760,1764,1782,1801,1816,1834,1852,1868],{"__ignoreMap":475},[479,1761,1762],{"class":481,"line":482},[479,1763,486],{"class":485},[479,1765,1766,1768,1770,1772,1774,1776,1778,1780],{"class":481,"line":489},[479,1767,492],{"class":485},[479,1769,496],{"class":495},[479,1771,499],{"class":485},[479,1773,502],{"class":485},[479,1775,505],{"class":485},[479,1777,509],{"class":508},[479,1779,499],{"class":485},[479,1781,514],{"class":485},[479,1783,1784,1786,1788,1790,1792,1794,1797,1799],{"class":481,"line":517},[479,1785,492],{"class":485},[479,1787,522],{"class":495},[479,1789,499],{"class":485},[479,1791,502],{"class":485},[479,1793,505],{"class":485},[479,1795,1796],{"class":508},"Conflict",[479,1798,499],{"class":485},[479,1800,514],{"class":485},[479,1802,1803,1805,1807,1809,1811,1814],{"class":481,"line":538},[479,1804,492],{"class":485},[479,1806,543],{"class":495},[479,1808,499],{"class":485},[479,1810,502],{"class":485},[479,1812,1813],{"class":550}," 409",[479,1815,514],{"class":485},[479,1817,1818,1820,1822,1824,1826,1828,1830,1832],{"class":481,"line":556},[479,1819,492],{"class":485},[479,1821,561],{"class":495},[479,1823,499],{"class":485},[479,1825,502],{"class":485},[479,1827,505],{"class":485},[479,1829,1015],{"class":508},[479,1831,499],{"class":485},[479,1833,514],{"class":485},[479,1835,1836,1838,1840,1842,1844,1846,1848,1850],{"class":481,"line":577},[479,1837,492],{"class":485},[479,1839,582],{"class":495},[479,1841,499],{"class":485},[479,1843,502],{"class":485},[479,1845,505],{"class":485},[479,1847,591],{"class":508},[479,1849,499],{"class":485},[479,1851,514],{"class":485},[479,1853,1854,1856,1858,1860,1862,1864,1866],{"class":481,"line":598},[479,1855,492],{"class":485},[479,1857,465],{"class":495},[479,1859,499],{"class":485},[479,1861,502],{"class":485},[479,1863,505],{"class":485},[479,1865,995],{"class":508},[479,1867,945],{"class":485},[479,1869,1870],{"class":481,"line":613},[479,1871,685],{"class":485},[448,1873,1874,1877,1878,1881,1882,1885],{},[452,1875,1876],{},"A log",": semmit. Egy státusz-mappelt 4xx elvárt kliens-viselkedés, nem incidens. Nem generál ",[465,1879,1880],{},"request failed"," logsort. ",[452,1883,1884],{},"A Sentry",": szintén semmit, ugyanezért.",[448,1887,1888,1889,1891,1892,1895,1896,1898,1899,1901,1902,1904,1905,1907],{},"Ha viszont a Postgres esik ki alóla, a lánc az ",[465,1890,902],{},"-en át 500-ként ér ki: a kliens csak a ",[465,1893,1894],{},"\"A rendelés feladása nem sikerült...\""," detailt és a ",[465,1897,1149],{}," kódot kapja, a log a teljes láncot és stacket (lásd ",[457,1900,183],{"href":184},"), a Sentry pedig egy ",[465,1903,1149],{}," című, kód szerint csoportosított issue-t a trace-re linkelve (lásd ",[457,1906,193],{"href":194},").",[829,1909,1911],{"id":1910},"a-mapping","A mapping",[448,1913,1914,1915,1917],{},"A központi mapping (a ",[465,1916,386],{}," renderelője, a generált szerver hibahookjaiba és a router panic\u002F404\u002F405 kezelőibe kötve) ebben a sorrendben dönt:",[748,1919,1920,1930],{},[751,1921,1922],{},[754,1923,1924,1927],{},[757,1925,1926],{},"Hiba",[757,1928,1929],{},"Válasz",[767,1931,1932,1942,1956,1964,1983],{},[754,1933,1934,1939],{},[772,1935,1936],{},[465,1937,1938],{},"*httperr.Problem",[772,1940,1941],{},"változtatás nélkül renderelve",[754,1943,1944,1947],{},[772,1945,1946],{},"validációs hiba a bindből",[772,1948,1949,1950,1953,1954,1203],{},"422, mezőnkénti ",[465,1951,1952],{},"errors[]","-szel (lásd ",[457,1955,400],{"href":401},[754,1957,1958,1961],{},[772,1959,1960],{},"kérés-dekódolási hiba (hibás body\u002Fparaméter)",[772,1962,1963],{},"400",[754,1965,1966,1971],{},[772,1967,1968,1970],{},[465,1969,358],{}," hiba a láncban",[772,1972,1973,1976,1977,1979,1980,1982],{},[465,1974,1975],{},"errs.StatusOf"," (default 500), ",[465,1978,561],{}," = a publikus üzenet, ",[465,1981,465],{}," member = a kód",[754,1984,1985,1988],{},[772,1986,1987],{},"minden más",[772,1989,1990],{},"500, detail nélkül",[448,1992,1993,1994,1997,1998,2001,2002,2004,2005,2007,2008,872,2010,2012,2013,2015],{},"5xx-nél a mögöttes hiba a ",[465,1995,1996],{},"slog","-ba megy ",[452,1999,2000],{},"a kérés trace-kontextusával",". A kliens nem kap belső részletet. Dev módban (",[465,2003,867],{},") a detail debug célból kitöltődik, és ha a láncban ",[465,2006,358],{}," hiba van, a válasz ",[465,2009,871],{},[465,2011,875],{}," extension membereket is kap. A teljes drót-oldali kép, az engine-hookok pontos leírásával, a ",[457,2014,395],{"href":396}," oldalon van.",[448,2017,2018,2019,2021,2022,716,2025,716,2028,2031,2032,2035,2036,2039,2040,2043],{},"A gyors 4xx-ekhez a ",[465,2020,386],{}," konstruktorai továbbra is rendelkezésre állnak (",[465,2023,2024],{},"httperr.NotFound(...)",[465,2026,2027],{},"httperr.Conflict(...)",[465,2029,2030],{},"httperr.Validation(...)","), de amint egy hibamódnak neve van, az ",[465,2033,2034],{},"errs.Define"," a jobb otthon: a felismerés (",[465,2037,2038],{},"errors.Is",") és a renderelés (státusz, kód, üzenet) egyetlen deklarációban él, nem egy handlerbeli ",[465,2041,2042],{},"if","-ágban.",[829,2045,2047],{"id":2046},"log-kimenet","Log kimenet",[448,2049,2050,2051,2054,2055,2058,2059,2062],{},"Az ",[465,2052,2053],{},"*errs.Error"," implementálja az ",[465,2056,2057],{},"slog.LogValuer","-t, így a ",[465,2060,2061],{},"slog.Any(\"error\", err)"," strukturált csoportot bocsát ki egy lapos string helyett, minden 5xx-nél automatikusan:",[470,2064,2066],{"className":472,"code":2065,"language":474,"meta":475,"style":475},"\"error\": {\n  \"msg\": \"shop: place order: orders: decrement stock: connection refused\",\n  \"code\": \"shop_api_place_order_failed\",\n  \"public\": \"A rendelés feladása nem sikerült, próbáld újra később.\",\n  \"chain\": [\n    { \"msg\": \"shop: place order\",\n      \"file\": \"api\u002Fservice\u002Fservice.go\", \"line\": 42, \"function\": \"service.(*Service).PlaceOrder\",\n      \"code\": \"shop_api_place_order_failed\" },\n    { \"msg\": \"orders: decrement stock\",\n      \"file\": \"repository\u002Forders.go\", \"line\": 31, \"function\": \"repository.(*Orders).DecrementStock\",\n      \"meta\": { \"product_id\": \"prod_42\" } },\n    { \"msg\": \"connection refused\" }\n  ],\n  \"stack\": [\n    { \"file\": \"repository\u002Forders.go\", \"line\": 31, \"function\": \"repository.(*Orders).DecrementStock\" },\n    { \"file\": \"api\u002Fservice\u002Fservice.go\", \"line\": 42, \"function\": \"service.(*Service).PlaceOrder\" },\n    { \"file\": \"api\u002Fhttp\u002Fhandler.go\", \"line\": 55, \"function\": \"http.(*Handler).PlaceOrder\" }\n  ]\n}\n",[465,2067,2068,2082,2102,2120,2139,2151,2171,2223,2242,2262,2311,2345,2366,2371,2383,2432,2481,2533,2538],{"__ignoreMap":475},[479,2069,2070,2072,2075,2077,2080],{"class":481,"line":482},[479,2071,499],{"class":485},[479,2073,2074],{"class":508},"error",[479,2076,499],{"class":485},[479,2078,2079],{"class":974},": ",[479,2081,486],{"class":485},[479,2083,2084,2086,2089,2091,2093,2095,2098,2100],{"class":481,"line":489},[479,2085,492],{"class":485},[479,2087,2088],{"class":495},"msg",[479,2090,499],{"class":485},[479,2092,502],{"class":485},[479,2094,505],{"class":485},[479,2096,2097],{"class":508},"shop: place order: orders: decrement stock: connection refused",[479,2099,499],{"class":485},[479,2101,514],{"class":485},[479,2103,2104,2106,2108,2110,2112,2114,2116,2118],{"class":481,"line":517},[479,2105,492],{"class":485},[479,2107,465],{"class":495},[479,2109,499],{"class":485},[479,2111,502],{"class":485},[479,2113,505],{"class":485},[479,2115,1149],{"class":508},[479,2117,499],{"class":485},[479,2119,514],{"class":485},[479,2121,2122,2124,2127,2129,2131,2133,2135,2137],{"class":481,"line":538},[479,2123,492],{"class":485},[479,2125,2126],{"class":495},"public",[479,2128,499],{"class":485},[479,2130,502],{"class":485},[479,2132,505],{"class":485},[479,2134,1169],{"class":508},[479,2136,499],{"class":485},[479,2138,514],{"class":485},[479,2140,2141,2143,2145,2147,2149],{"class":481,"line":556},[479,2142,492],{"class":485},[479,2144,875],{"class":495},[479,2146,499],{"class":485},[479,2148,502],{"class":485},[479,2150,610],{"class":485},[479,2152,2153,2155,2157,2159,2161,2163,2165,2167,2169],{"class":481,"line":577},[479,2154,616],{"class":485},[479,2156,505],{"class":485},[479,2158,2088],{"class":621},[479,2160,499],{"class":485},[479,2162,502],{"class":485},[479,2164,505],{"class":485},[479,2166,1582],{"class":508},[479,2168,499],{"class":485},[479,2170,514],{"class":485},[479,2172,2173,2176,2179,2181,2183,2185,2188,2190,2192,2194,2196,2198,2200,2203,2205,2207,2210,2212,2214,2216,2219,2221],{"class":481,"line":598},[479,2174,2175],{"class":485},"      \"",[479,2177,2178],{"class":621},"file",[479,2180,499],{"class":485},[479,2182,502],{"class":485},[479,2184,505],{"class":485},[479,2186,2187],{"class":508},"api\u002Fservice\u002Fservice.go",[479,2189,499],{"class":485},[479,2191,636],{"class":485},[479,2193,505],{"class":485},[479,2195,481],{"class":621},[479,2197,499],{"class":485},[479,2199,502],{"class":485},[479,2201,2202],{"class":550}," 42",[479,2204,636],{"class":485},[479,2206,505],{"class":485},[479,2208,2209],{"class":621},"function",[479,2211,499],{"class":485},[479,2213,502],{"class":485},[479,2215,505],{"class":485},[479,2217,2218],{"class":508},"service.(*Service).PlaceOrder",[479,2220,499],{"class":485},[479,2222,514],{"class":485},[479,2224,2225,2227,2229,2231,2233,2235,2237,2239],{"class":481,"line":613},[479,2226,2175],{"class":485},[479,2228,465],{"class":621},[479,2230,499],{"class":485},[479,2232,502],{"class":485},[479,2234,505],{"class":485},[479,2236,1149],{"class":508},[479,2238,499],{"class":485},[479,2240,2241],{"class":485}," },\n",[479,2243,2244,2246,2248,2250,2252,2254,2256,2258,2260],{"class":481,"line":676},[479,2245,616],{"class":485},[479,2247,505],{"class":485},[479,2249,2088],{"class":621},[479,2251,499],{"class":485},[479,2253,502],{"class":485},[479,2255,505],{"class":485},[479,2257,1326],{"class":508},[479,2259,499],{"class":485},[479,2261,514],{"class":485},[479,2263,2264,2266,2268,2270,2272,2274,2277,2279,2281,2283,2285,2287,2289,2292,2294,2296,2298,2300,2302,2304,2307,2309],{"class":481,"line":682},[479,2265,2175],{"class":485},[479,2267,2178],{"class":621},[479,2269,499],{"class":485},[479,2271,502],{"class":485},[479,2273,505],{"class":485},[479,2275,2276],{"class":508},"repository\u002Forders.go",[479,2278,499],{"class":485},[479,2280,636],{"class":485},[479,2282,505],{"class":485},[479,2284,481],{"class":621},[479,2286,499],{"class":485},[479,2288,502],{"class":485},[479,2290,2291],{"class":550}," 31",[479,2293,636],{"class":485},[479,2295,505],{"class":485},[479,2297,2209],{"class":621},[479,2299,499],{"class":485},[479,2301,502],{"class":485},[479,2303,505],{"class":485},[479,2305,2306],{"class":508},"repository.(*Orders).DecrementStock",[479,2308,499],{"class":485},[479,2310,514],{"class":485},[479,2312,2313,2315,2318,2320,2322,2325,2327,2329,2331,2333,2335,2338,2340,2343],{"class":481,"line":1023},[479,2314,2175],{"class":485},[479,2316,2317],{"class":621},"meta",[479,2319,499],{"class":485},[479,2321,502],{"class":485},[479,2323,2324],{"class":485}," {",[479,2326,505],{"class":485},[479,2328,1347],{"class":550},[479,2330,499],{"class":485},[479,2332,502],{"class":485},[479,2334,505],{"class":485},[479,2336,2337],{"class":508},"prod_42",[479,2339,499],{"class":485},[479,2341,2342],{"class":485}," }",[479,2344,2241],{"class":485},[479,2346,2347,2349,2351,2353,2355,2357,2359,2362,2364],{"class":481,"line":1124},[479,2348,616],{"class":485},[479,2350,505],{"class":485},[479,2352,2088],{"class":621},[479,2354,499],{"class":485},[479,2356,502],{"class":485},[479,2358,505],{"class":485},[479,2360,2361],{"class":508},"connection refused",[479,2363,499],{"class":485},[479,2365,673],{"class":485},[479,2367,2368],{"class":481,"line":1129},[479,2369,2370],{"class":485},"  ],\n",[479,2372,2373,2375,2377,2379,2381],{"class":481,"line":1156},[479,2374,492],{"class":485},[479,2376,871],{"class":495},[479,2378,499],{"class":485},[479,2380,502],{"class":485},[479,2382,610],{"class":485},[479,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430],{"class":481,"line":2385},15,[479,2387,616],{"class":485},[479,2389,505],{"class":485},[479,2391,2178],{"class":621},[479,2393,499],{"class":485},[479,2395,502],{"class":485},[479,2397,505],{"class":485},[479,2399,2276],{"class":508},[479,2401,499],{"class":485},[479,2403,636],{"class":485},[479,2405,505],{"class":485},[479,2407,481],{"class":621},[479,2409,499],{"class":485},[479,2411,502],{"class":485},[479,2413,2291],{"class":550},[479,2415,636],{"class":485},[479,2417,505],{"class":485},[479,2419,2209],{"class":621},[479,2421,499],{"class":485},[479,2423,502],{"class":485},[479,2425,505],{"class":485},[479,2427,2306],{"class":508},[479,2429,499],{"class":485},[479,2431,2241],{"class":485},[479,2433,2435,2437,2439,2441,2443,2445,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479],{"class":481,"line":2434},16,[479,2436,616],{"class":485},[479,2438,505],{"class":485},[479,2440,2178],{"class":621},[479,2442,499],{"class":485},[479,2444,502],{"class":485},[479,2446,505],{"class":485},[479,2448,2187],{"class":508},[479,2450,499],{"class":485},[479,2452,636],{"class":485},[479,2454,505],{"class":485},[479,2456,481],{"class":621},[479,2458,499],{"class":485},[479,2460,502],{"class":485},[479,2462,2202],{"class":550},[479,2464,636],{"class":485},[479,2466,505],{"class":485},[479,2468,2209],{"class":621},[479,2470,499],{"class":485},[479,2472,502],{"class":485},[479,2474,505],{"class":485},[479,2476,2218],{"class":508},[479,2478,499],{"class":485},[479,2480,2241],{"class":485},[479,2482,2484,2486,2488,2490,2492,2494,2496,2499,2501,2503,2505,2507,2509,2511,2514,2516,2518,2520,2522,2524,2526,2529,2531],{"class":481,"line":2483},17,[479,2485,616],{"class":485},[479,2487,505],{"class":485},[479,2489,2178],{"class":621},[479,2491,499],{"class":485},[479,2493,502],{"class":485},[479,2495,505],{"class":485},[479,2497,2498],{"class":508},"api\u002Fhttp\u002Fhandler.go",[479,2500,499],{"class":485},[479,2502,636],{"class":485},[479,2504,505],{"class":485},[479,2506,481],{"class":621},[479,2508,499],{"class":485},[479,2510,502],{"class":485},[479,2512,2513],{"class":550}," 55",[479,2515,636],{"class":485},[479,2517,505],{"class":485},[479,2519,2209],{"class":621},[479,2521,499],{"class":485},[479,2523,502],{"class":485},[479,2525,505],{"class":485},[479,2527,2528],{"class":508},"http.(*Handler).PlaceOrder",[479,2530,499],{"class":485},[479,2532,673],{"class":485},[479,2534,2536],{"class":481,"line":2535},18,[479,2537,679],{"class":485},[479,2539,2541],{"class":481,"line":2540},19,[479,2542,685],{"class":485},[448,2544,2545,2546,2548,2549,2551,2552,738,2554,2556,2557,2560,2561,2015],{},"A ",[465,2547,875],{}," wrap-szintenként egy objektum (a szint saját üzenete, a wrap helye, és az ott beállított kód\u002Fmetadata), a végén a root cause-zal. A ",[465,2550,871],{}," a teljes hívási út a keletkezési pontról, a közbeeső, nem wrappelő hívásokkal együtt. A teljes mechanika (miért néz ki így a ",[465,2553,875],{},[465,2555,871],{},", és a ",[465,2558,2559],{},"LogValue","\u002Fsima-wrap csapda) a ",[457,2562,183],{"href":184},[829,2564,193],{"id":2565},"sentry",[448,2567,2050,2568,2570,2571,2574,2575,2579,2580,2582,2583,2585],{},[465,2569,2053],{}," kiteszi a ",[465,2572,2573],{},"StackTrace() []uintptr"," metódust (azt a formát, amit a sentry-go reflexióval felismer), így a ",[457,2576,2577],{"href":194},[465,2578,820],{}," extra huzalozás nélkül kinyeri a stacket. Küldés előtt az integráció átcímkézi az exceptiont a legkülső hiba ",[465,2581,745],{},"-jára (ha van), így a kód nemcsak a válasz ",[465,2584,465],{}," membere, hanem a Sentry issue címe és csoportosítási fingerprintje is: egy hibamód = egy issue, üzenetszöveg-változásoktól függetlenül.",[829,2587,2589],{"id":2588},"a-spec-oldala","A spec oldala",[448,2591,2592,2593,2596,2597,2599,2600,2603,2604,872,2606,2608,2609,2612,2613,2616],{},"A generált ",[465,2594,2595],{},"spec\u002Ftypespec\u002Fshared\u002Ferrors.tsp"," a ",[465,2598,693],{}," tükre (a ",[465,2601,2602],{},"FieldError","-ral együtt), így az OpenAPI-ból generált frontend-kliensek pontosan ezt a formát kapják. Ha az egyiket bővíted, bővítsd a másikat is. A dev-only ",[465,2605,871],{},[465,2607,875],{}," membereket az ",[465,2610,2611],{},"errors.tsp"," ",[452,2614,2615],{},"nem"," tükrözi: productionben soha nem jelennek meg, így kliens nem építhet rájuk.",[829,2618,2620],{"id":2619},"használt-patternek","Használt patternek",[448,2622,2623,2624,2627,2628,1190,2634,2636,2637,2639,2640,2643,2644,2647,2648,2650,2651,2653],{},"Ez az oldal a ",[457,2625,238],{"href":2626},"\u002Fhu\u002Fconcepts\u002Fdesign-patterns#hibakezel%C3%A9s"," katalógusban részletesebben is szereplő két minta pipeline-nézete: a ",[452,2629,2630,2631,2633],{},"sentinel-definíció testreszabott ",[465,2632,1535],{},"-sel",[465,2635,2034],{},", teljes API az ",[457,2638,730],{"href":367}," oldalon) és a ",[452,2641,2642],{},"lusta, láncononkénti stack-capture",". A kaszkádoló ",[465,2645,2646],{},"errors.As"," mapping (a ",[465,2649,386],{}," oldalán) és az RFC 9457 forma a ",[457,2652,395],{"href":396}," oldalon él.",[829,2655,2657],{"id":2656},"merre-tovább","Merre tovább",[2659,2660,2661,2667,2680,2689],"ul",{},[2662,2663,2664,2666],"li",{},[457,2665,726],{"href":363},": telepítés, önálló használat.",[2662,2668,2669,2671,2672,2674,2675,2674,2677,2679],{},[457,2670,730],{"href":367},": a teljes ",[465,2673,715],{},"\u002F",[465,2676,719],{},[465,2678,722],{},"\u002Fattribútumok\u002Faccessorok végigvezetés.",[2662,2681,2682,2684,2685,2688],{},[457,2683,395],{"href":396},": a drót felé néző ",[465,2686,2687],{},"Problem"," forma és az engine-mapping.",[2662,2690,2691,872,2693,2695],{},[457,2692,183],{"href":184},[457,2694,193],{"href":194},": mi történik a hibával, miután logolták vagy riportolták.",[2697,2698,2699],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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}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 .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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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}",{"title":475,"searchDepth":489,"depth":489,"links":2701},[2702,2703,2704,2705,2706,2707,2708,2709],{"id":831,"depth":489,"text":832},{"id":879,"depth":489,"text":880},{"id":1910,"depth":489,"text":1911},{"id":2046,"depth":489,"text":2047},{"id":2565,"depth":489,"text":193},{"id":2588,"depth":489,"text":2589},{"id":2619,"depth":489,"text":2620},{"id":2656,"depth":489,"text":2657},"RFC 9457 problem details mindenhol, alatta errs hibák stackkel, kóddal és kliensbiztos üzenettel.","md",null,{},{"icon":227},{"title":224,"description":2710},"m4sF7ToGfVcq65AFChfi_4PV3Q12UKKp_SBYkK31Rf4",[2718,2720],{"title":220,"path":221,"stem":222,"description":2719,"icon":47,"children":-1},"A modultérkép, egy service életciklusa, és az elv, ami az egészet összetartja.",{"title":204,"path":229,"stem":230,"description":2721,"icon":231,"children":-1},"Egy projekt konfigurációjának összeállítása modul-Config structokból: envconf, env-prefix konvenciók és a .env.",1785445885201]