[{"data":1,"prerenderedAt":1328},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-cli-add-mail":442,"-hu-cli-add-mail-surround":1323},[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":300,"body":444,"description":1316,"extension":1317,"links":1318,"meta":1319,"navigation":1320,"path":301,"seo":1321,"stem":302,"__hash__":1322},"docs_hu\u002Fhu\u002F4.cli\u002F12.add-mail.md",{"type":445,"value":446,"toc":1309},"minimark",[447,451,508,539,562,567,584,588,963,977,983,1008,1094,1136,1165,1169,1184,1255,1259,1289,1293,1305],[448,449,450],"p",{},"Ezt a generátort akkor éri meg elővenni, amikor egy modulnak közvetlenül egy címre kell emailt küldenie, recipient-fogalom nélkül: egy contact-form visszaigazolás, egy számla, egy jelszó-visszaállító link.",[452,453,458],"pre",{"className":454,"code":455,"language":456,"meta":457,"style":457},"language-sh shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","go tool gpsystem add mail \u003Cmodul> \u003Cnév>\n","sh","",[459,460,461],"code",{"__ignoreMap":457},[462,463,466,470,474,477,480,483,487,490,494,497,499,502,505],"span",{"class":464,"line":465},"line",1,[462,467,469],{"class":468},"sBMFI","go",[462,471,473],{"class":472},"sfazB"," tool",[462,475,476],{"class":472}," gpsystem",[462,478,479],{"class":472}," add",[462,481,482],{"class":472}," mail",[462,484,486],{"class":485},"sMK4o"," \u003C",[462,488,489],{"class":472},"modu",[462,491,493],{"class":492},"sTEyZ","l",[462,495,496],{"class":485},">",[462,498,486],{"class":485},[462,500,501],{"class":472},"né",[462,503,504],{"class":492},"v",[462,506,507],{"class":485},">\n",[448,509,510,511,514,515,518,519,525,526,529,530,533,534,538],{},"Egy notifiert hoz létre az ",[459,512,513],{},"internal\u002Fmodules\u002F\u003Cmodul>\u002Fmail\u002F\u003Cnév>.go","-ban: egy payload structot, egy ",[459,516,517],{},"\u003CNév>Notifier","-t, ami egy injektált ",[520,521,522],"a",{"href":119},[459,523,524],{},"mail.Mailer","-t köt össze a modul saját sablonjaival, plusz a ",[459,527,528],{},"templates\u002F\u003Cnév>.html.tmpl"," + ",[459,531,532],{},"templates\u002F\u003Cnév>.txt.tmpl"," fájlokat. A projekt ",[535,536,537],"strong",{},"első"," mail-notifierénél (bármelyik modulban) bedrótozza a közös transzportot is minden belépési pontba. Idempotens: egy második notifier, akár ugyanabban, akár másik modulban, újrahasználja a bekötést.",[452,540,542],{"className":454,"code":541,"language":456,"meta":457,"style":457},"go tool gpsystem add mail contact contactNotification\n",[459,543,544],{"__ignoreMap":457},[462,545,546,548,550,552,554,556,559],{"class":464,"line":465},[462,547,469],{"class":468},[462,549,473],{"class":472},[462,551,476],{"class":472},[462,553,479],{"class":472},[462,555,482],{"class":472},[462,557,558],{"class":472}," contact",[462,560,561],{"class":472}," contactNotification\n",[563,564,566],"h2",{"id":565},"miért-ez-a-szétválasztás","Miért ez a szétválasztás",[448,568,569,570,574,575,578,579,583],{},"A mail-tartalom (payload, sablonok, subject) üzleti tartalom, ami azé a moduléé, amelyik a use case-t birtokolja; az SMTP-transzport infrastruktúra, pont mint az adatbázis-driver, ezért egyszer van centralizálva. Ez ugyanaz a ",[520,571,573],{"href":572},"\u002Fhu\u002Fconcepts\u002Farchitecture#k%C3%B6z%C3%B6s-k%C3%B3d-egy-d%C3%B6nt%C3%A9si-l%C3%A9tra","közös kód döntési létra",", amit a kit mindenhol követ; lásd a ",[520,576,35],{"href":577},"\u002Fhu\u002Fgetting-started\u002Fproject-structure#mi-%C3%A9lhet-egy-modulon-bel%C3%BCl"," oldal teljes indoklását és a ",[520,580,582],{"href":581},"\u002Fhu\u002Fmail\u002Foverview#kidolgozott-p%C3%A9lda-a-contact-email-flow","mail oldal kidolgozott példáját",".",[563,585,587],{"id":586},"mit-generál","Mit generál",[452,589,593],{"className":590,"code":591,"filename":592,"language":469,"meta":457,"style":457},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","package mail\n\n\u002F\u002Fgo:embed templates\u002Fcontactnotification.html.tmpl templates\u002Fcontactnotification.txt.tmpl\nvar contactNotificationTemplatesFS embed.FS\n\ntype ContactNotification struct {\n}\n\ntype ContactNotificationNotifier struct{ mailer kitmail.Mailer }\n\nfunc NewContactNotificationNotifier(m kitmail.Mailer) *ContactNotificationNotifier {\n    return &ContactNotificationNotifier{mailer: m}\n}\n\nfunc (n *ContactNotificationNotifier) Notify(ctx context.Context, to string, p ContactNotification) error {\n    msg := kitmail.NewMessage().\n        WithTo(to).\n        WithSubject(\"TODO: subject for ContactNotification\").\n        WithBody(kitmail.Template(contactNotificationTemplatesFS, \"templates\u002Fcontactnotification.html.tmpl\", p).\n            WithTextTemplate(\"templates\u002Fcontactnotification.txt.tmpl\"))\n    return n.mailer.Send(ctx, msg)\n}\n","internal\u002Fmodules\u002Fcontact\u002Fmail\u002Fcontactnotification.go",[459,594,595,603,610,617,634,639,654,660,665,690,695,730,756,761,766,824,843,857,875,911,929,958],{"__ignoreMap":457},[462,596,597,600],{"class":464,"line":465},[462,598,599],{"class":485},"package",[462,601,602],{"class":468}," mail\n",[462,604,606],{"class":464,"line":605},2,[462,607,609],{"emptyLinePlaceholder":608},true,"\n",[462,611,613],{"class":464,"line":612},3,[462,614,616],{"class":615},"sHwdD","\u002F\u002Fgo:embed templates\u002Fcontactnotification.html.tmpl templates\u002Fcontactnotification.txt.tmpl\n",[462,618,620,623,626,629,631],{"class":464,"line":619},4,[462,621,622],{"class":485},"var",[462,624,625],{"class":492}," contactNotificationTemplatesFS ",[462,627,628],{"class":468},"embed",[462,630,583],{"class":485},[462,632,633],{"class":468},"FS\n",[462,635,637],{"class":464,"line":636},5,[462,638,609],{"emptyLinePlaceholder":608},[462,640,642,645,648,651],{"class":464,"line":641},6,[462,643,644],{"class":485},"type",[462,646,647],{"class":468}," ContactNotification",[462,649,650],{"class":485}," struct",[462,652,653],{"class":485}," {\n",[462,655,657],{"class":464,"line":656},7,[462,658,659],{"class":485},"}\n",[462,661,663],{"class":464,"line":662},8,[462,664,609],{"emptyLinePlaceholder":608},[462,666,668,670,673,676,679,682,684,687],{"class":464,"line":667},9,[462,669,644],{"class":485},[462,671,672],{"class":468}," ContactNotificationNotifier",[462,674,675],{"class":485}," struct{",[462,677,678],{"class":492}," mailer ",[462,680,681],{"class":468},"kitmail",[462,683,583],{"class":485},[462,685,686],{"class":468},"Mailer",[462,688,689],{"class":485}," }\n",[462,691,693],{"class":464,"line":692},10,[462,694,609],{"emptyLinePlaceholder":608},[462,696,698,701,705,708,712,715,717,719,722,725,728],{"class":464,"line":697},11,[462,699,700],{"class":485},"func",[462,702,704],{"class":703},"s2Zo4"," NewContactNotificationNotifier",[462,706,707],{"class":485},"(",[462,709,711],{"class":710},"sHdIc","m",[462,713,714],{"class":468}," kitmail",[462,716,583],{"class":485},[462,718,686],{"class":468},[462,720,721],{"class":485},")",[462,723,724],{"class":485}," *",[462,726,727],{"class":468},"ContactNotificationNotifier",[462,729,653],{"class":485},[462,731,733,737,740,742,745,748,751,754],{"class":464,"line":732},12,[462,734,736],{"class":735},"s7zQu","    return",[462,738,739],{"class":485}," &",[462,741,727],{"class":468},[462,743,744],{"class":485},"{",[462,746,747],{"class":492},"mailer",[462,749,750],{"class":485},":",[462,752,753],{"class":492}," m",[462,755,659],{"class":485},[462,757,759],{"class":464,"line":758},13,[462,760,659],{"class":485},[462,762,764],{"class":464,"line":763},14,[462,765,609],{"emptyLinePlaceholder":608},[462,767,769,771,774,777,780,782,784,787,789,792,795,797,800,803,806,810,812,815,817,819,822],{"class":464,"line":768},15,[462,770,700],{"class":485},[462,772,773],{"class":485}," (",[462,775,776],{"class":710},"n ",[462,778,779],{"class":485},"*",[462,781,727],{"class":468},[462,783,721],{"class":485},[462,785,786],{"class":703}," Notify",[462,788,707],{"class":485},[462,790,791],{"class":710},"ctx",[462,793,794],{"class":468}," context",[462,796,583],{"class":485},[462,798,799],{"class":468},"Context",[462,801,802],{"class":485},",",[462,804,805],{"class":710}," to",[462,807,809],{"class":808},"spNyl"," string",[462,811,802],{"class":485},[462,813,814],{"class":710}," p",[462,816,647],{"class":468},[462,818,721],{"class":485},[462,820,821],{"class":808}," error",[462,823,653],{"class":485},[462,825,827,830,833,835,837,840],{"class":464,"line":826},16,[462,828,829],{"class":492},"    msg ",[462,831,832],{"class":485},":=",[462,834,714],{"class":492},[462,836,583],{"class":485},[462,838,839],{"class":703},"NewMessage",[462,841,842],{"class":485},"().\n",[462,844,846,849,851,854],{"class":464,"line":845},17,[462,847,848],{"class":703},"        WithTo",[462,850,707],{"class":485},[462,852,853],{"class":492},"to",[462,855,856],{"class":485},").\n",[462,858,860,863,865,868,871,873],{"class":464,"line":859},18,[462,861,862],{"class":703},"        WithSubject",[462,864,707],{"class":485},[462,866,867],{"class":485},"\"",[462,869,870],{"class":472},"TODO: subject for ContactNotification",[462,872,867],{"class":485},[462,874,856],{"class":485},[462,876,878,881,883,885,887,890,892,895,897,900,903,905,907,909],{"class":464,"line":877},19,[462,879,880],{"class":703},"        WithBody",[462,882,707],{"class":485},[462,884,681],{"class":492},[462,886,583],{"class":485},[462,888,889],{"class":703},"Template",[462,891,707],{"class":485},[462,893,894],{"class":492},"contactNotificationTemplatesFS",[462,896,802],{"class":485},[462,898,899],{"class":485}," \"",[462,901,902],{"class":472},"templates\u002Fcontactnotification.html.tmpl",[462,904,867],{"class":485},[462,906,802],{"class":485},[462,908,814],{"class":492},[462,910,856],{"class":485},[462,912,914,917,919,921,924,926],{"class":464,"line":913},20,[462,915,916],{"class":703},"            WithTextTemplate",[462,918,707],{"class":485},[462,920,867],{"class":485},[462,922,923],{"class":472},"templates\u002Fcontactnotification.txt.tmpl",[462,925,867],{"class":485},[462,927,928],{"class":485},"))\n",[462,930,932,934,937,939,941,943,946,948,950,952,955],{"class":464,"line":931},21,[462,933,736],{"class":735},[462,935,936],{"class":492}," n",[462,938,583],{"class":485},[462,940,747],{"class":492},[462,942,583],{"class":485},[462,944,945],{"class":703},"Send",[462,947,707],{"class":485},[462,949,791],{"class":492},[462,951,802],{"class":485},[462,953,954],{"class":492}," msg",[462,956,957],{"class":485},")\n",[462,959,961],{"class":464,"line":960},22,[462,962,659],{"class":485},[448,964,965,966,969,970,976],{},"Plusz egy memory-mailer teszt (",[459,967,968],{},"contactnotification_test.go",") és két kitöltendő placeholder sablon. A payload struct üresen indul, ugyanúgy, ahogy az ",[520,971,973],{"href":972},"\u002Fhu\u002Fcli\u002Fworker-generators#add-event",[459,974,975],{},"add event"," is üres event structot generál: add hozzá a sablonjaidnak szükséges mezőket.",[448,978,979,980,982],{},"A projekt ",[535,981,537],{}," notifierénél:",[452,984,987],{"className":590,"code":985,"filename":986,"language":469,"meta":457,"style":457},"Mail smtp.Config `envPrefix:\"MAIL_\"`\n","internal\u002Fplatform\u002Fconfig\u002Fconfig.go",[459,988,989],{"__ignoreMap":457},[462,990,991,994,996,999,1002,1005],{"class":464,"line":465},[462,992,993],{"class":492},"Mail smtp",[462,995,583],{"class":485},[462,997,998],{"class":492},"Config ",[462,1000,1001],{"class":485},"`",[462,1003,1004],{"class":472},"envPrefix:\"MAIL_\"",[462,1006,1007],{"class":485},"`\n",[452,1009,1012],{"className":590,"code":1010,"filename":1011,"language":469,"meta":457,"style":457},"mailer := smtp.MustNewIfConfigured(ctx, cfg.Mail)\n\u002F\u002F ...\ndeps := contact.Dependencies{\n    \u002F\u002F ...\n    Mailer: mailer,\n    \u002F\u002F gpsystem:dependencies-init\n}\n","cmd\u002Fcontact\u002Fmain.go és cmd\u002Fworker\u002Fmain.go",[459,1013,1014,1045,1050,1067,1072,1085,1090],{"__ignoreMap":457},[462,1015,1016,1019,1021,1024,1026,1029,1031,1033,1035,1038,1040,1043],{"class":464,"line":465},[462,1017,1018],{"class":492},"mailer ",[462,1020,832],{"class":485},[462,1022,1023],{"class":492}," smtp",[462,1025,583],{"class":485},[462,1027,1028],{"class":703},"MustNewIfConfigured",[462,1030,707],{"class":485},[462,1032,791],{"class":492},[462,1034,802],{"class":485},[462,1036,1037],{"class":492}," cfg",[462,1039,583],{"class":485},[462,1041,1042],{"class":492},"Mail",[462,1044,957],{"class":485},[462,1046,1047],{"class":464,"line":605},[462,1048,1049],{"class":615},"\u002F\u002F ...\n",[462,1051,1052,1055,1057,1059,1061,1064],{"class":464,"line":612},[462,1053,1054],{"class":492},"deps ",[462,1056,832],{"class":485},[462,1058,558],{"class":468},[462,1060,583],{"class":485},[462,1062,1063],{"class":468},"Dependencies",[462,1065,1066],{"class":485},"{\n",[462,1068,1069],{"class":464,"line":619},[462,1070,1071],{"class":615},"    \u002F\u002F ...\n",[462,1073,1074,1077,1079,1082],{"class":464,"line":636},[462,1075,1076],{"class":492},"    Mailer",[462,1078,750],{"class":485},[462,1080,1081],{"class":492}," mailer",[462,1083,1084],{"class":485},",\n",[462,1086,1087],{"class":464,"line":641},[462,1088,1089],{"class":615},"    \u002F\u002F gpsystem:dependencies-init\n",[462,1091,1092],{"class":464,"line":656},[462,1093,659],{"class":485},[452,1095,1098],{"className":590,"code":1096,"filename":1097,"language":469,"meta":457,"style":457},"type Dependencies struct {\n    \u002F\u002F ...\n    Mailer mail.Mailer\n    \u002F\u002F gpsystem:dependencies\n}\n","internal\u002Fmodules\u002Fcontact\u002Fregister.go",[459,1099,1100,1111,1115,1127,1132],{"__ignoreMap":457},[462,1101,1102,1104,1107,1109],{"class":464,"line":465},[462,1103,644],{"class":485},[462,1105,1106],{"class":468}," Dependencies",[462,1108,650],{"class":485},[462,1110,653],{"class":485},[462,1112,1113],{"class":464,"line":605},[462,1114,1071],{"class":615},[462,1116,1117,1120,1122,1124],{"class":464,"line":612},[462,1118,1119],{"class":492},"    Mailer ",[462,1121,113],{"class":468},[462,1123,583],{"class":485},[462,1125,1126],{"class":468},"Mailer\n",[462,1128,1129],{"class":464,"line":619},[462,1130,1131],{"class":615},"    \u002F\u002F gpsystem:dependencies\n",[462,1133,1134],{"class":464,"line":636},[462,1135,659],{"class":485},[448,1137,1138,1139,1141,1142,1145,1146,1149,1150,1153,1154,1157,1158,1160,1161,1164],{},"A ",[459,1140,747],{}," belépési pontonként ",[535,1143,1144],{},"egyszer"," konstruálódik, és minden notifiert tartalmazó modul osztozik rajta, ugyanaz a minta, mint a közös adatbázis-poolnál. Az ",[459,1147,1148],{},"smtp.MustNewIfConfigured"," valódi SMTP-klienst épít, ha a ",[459,1151,1152],{},"MAIL_HOST"," be van állítva, vagy ",[459,1155,1156],{},"mail.NewDiscard()","-ot, ha üres, így a dev környezetek mail-szerver nélkül is futnak. Lásd a ",[520,1159,1042],{"href":123}," oldalt a teljes ",[459,1162,1163],{},"MAIL_*"," referenciáért.",[563,1166,1168],{"id":1167},"küldés","Küldés",[448,1170,1171,1172,1176,1177,1183],{},"Semmi nem hívja automatikusan a notifiert: kösd be egy service-ből (szinkron mail, pl. jelszó-visszaállítás) vagy egy listenerből (aszinkron, ",[520,1173,1174],{"href":972},[459,1175,975],{}," \u002F ",[520,1178,1180],{"href":1179},"\u002Fhu\u002Fcli\u002Fworker-generators#add-listener",[459,1181,1182],{},"add listener"," révén):",[452,1185,1188],{"className":590,"code":1186,"filename":1187,"language":469,"meta":457,"style":457},"notifier := contactmail.NewContactNotificationNotifier(deps.Mailer)\nreturn notifier.Notify(ctx, recipientAddress, contactmail.ContactNotification{ \u002F* ... *\u002F })\n","internal\u002Fmodules\u002Fcontact\u002Flisteners\u002Fsendcontactemail.go",[459,1189,1190,1216],{"__ignoreMap":457},[462,1191,1192,1195,1197,1200,1202,1205,1207,1210,1212,1214],{"class":464,"line":465},[462,1193,1194],{"class":492},"notifier ",[462,1196,832],{"class":485},[462,1198,1199],{"class":492}," contactmail",[462,1201,583],{"class":485},[462,1203,1204],{"class":703},"NewContactNotificationNotifier",[462,1206,707],{"class":485},[462,1208,1209],{"class":492},"deps",[462,1211,583],{"class":485},[462,1213,686],{"class":492},[462,1215,957],{"class":485},[462,1217,1218,1221,1224,1226,1229,1231,1233,1235,1238,1240,1242,1244,1247,1249,1252],{"class":464,"line":605},[462,1219,1220],{"class":735},"return",[462,1222,1223],{"class":492}," notifier",[462,1225,583],{"class":485},[462,1227,1228],{"class":703},"Notify",[462,1230,707],{"class":485},[462,1232,791],{"class":492},[462,1234,802],{"class":485},[462,1236,1237],{"class":492}," recipientAddress",[462,1239,802],{"class":485},[462,1241,1199],{"class":468},[462,1243,583],{"class":485},[462,1245,1246],{"class":468},"ContactNotification",[462,1248,744],{"class":485},[462,1250,1251],{"class":615}," \u002F* ... *\u002F",[462,1253,1254],{"class":485}," })\n",[563,1256,1258],{"id":1257},"anchor-kommentek","Anchor-kommentek",[448,1260,1261,1262,1266,1267,1269,1270,1273,1274,1277,1278,1273,1281,1284,1285,1288],{},"Az ",[520,1263,1264],{"href":291},[459,1265,290],{},"-hez hasonlóan az ",[459,1268,300],{}," a ",[459,1271,1272],{},"gpsystem:pools",", ",[459,1275,1276],{},"gpsystem:dependencies-init","\u002F",[459,1279,1280],{},"gpsystem:deps-init(\u003Cmodul>)",[459,1282,1283],{},"gpsystem:dependencies"," és ",[459,1286,1287],{},"gpsystem:config"," anchoroknál ír. Ha egy modulból hiányzik valamelyik anchor-komment, a parancs megáll, és kiírja a pontos, beillesztendő blokkot a helyes pozícióval együtt.",[563,1290,1292],{"id":1291},"melyik-parancsot-mikor","Melyik parancsot mikor",[448,1294,1295,1296,1300,1301,1304],{},"Címre menő tartalomhoz, recipient-fogalom nélkül ezt a parancsot (fent). Recipiensnek szóló, akár több csatornás tartalomhoz (database-inbox, élő push) az ",[520,1297,1298],{"href":306},[459,1299,305],{},"-t helyette. A kettő összeadódik: egy notification ",[459,1302,1303],{},"ToMail","-je ugyanazokat a buildereket használja, mint amiket fent láttál.",[1306,1307,1308],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":457,"searchDepth":605,"depth":605,"links":1310},[1311,1312,1313,1314,1315],{"id":565,"depth":605,"text":566},{"id":586,"depth":605,"text":587},{"id":1167,"depth":605,"text":1168},{"id":1257,"depth":605,"text":1258},{"id":1291,"depth":605,"text":1292},"Modul-tulajdonú mail-notifier generálása: payload, sablonok, és a közös transzport bekötése.","md",null,{},{"icon":303},{"title":300,"description":1316},"yiXrbsY5XL6lC6vkIjaGrZsQz2NzRQZHzP-9jUCMM3k",[1324,1326],{"title":295,"path":296,"stem":297,"description":1325,"icon":298,"children":-1},"A compose.yml, illetve csak a Dockerfile\u002F.dockerignore önálló (újra)generálása egy meglévő projektbe.",{"title":305,"path":306,"stem":307,"description":1327,"icon":308,"children":-1},"Modul-tulajdonú, többcsatornás notification generálása: payload, Via, csatornánkénti tartalom, és a közös Hub bekötése.",1785445896189]