[{"data":1,"prerenderedAt":1889},["ShallowReactive",2],{"navigation_docs_hu":3,"-hu-cli-add-notification":442,"-hu-cli-add-notification-surround":1884},[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":305,"body":444,"description":1877,"extension":1878,"links":1879,"meta":1880,"navigation":1881,"path":306,"seo":1882,"stem":307,"__hash__":1883},"docs_hu\u002Fhu\u002F4.cli\u002F13.add-notification.md",{"type":445,"value":446,"toc":1871},"minimark",[447,451,508,551,574,582,622,626,1158,1185,1191,1234,1398,1427,1445,1593,1610,1617,1719,1723,1738,1843,1867],[448,449,450],"p",{},"Ezt a generátort akkor éri meg elővenni, amikor a tartalom egy konkrét recipiensnek szól, nem csak egy címnek, és akár több csatornán is el kell érnie: egy rendelésállapot-értesítés, egy kommentválasz, egy fiókbiztonsági riasztás.",[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 notification \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}," notification",[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,522,523,526,527,530,531,534,535,538,539,543,544,550],{},"Egy notificationt hoz létre az ",[459,512,513],{},"internal\u002Fmodules\u002F\u003Cmodul>\u002Fnotifications\u002F\u003Cnév>.go","-ban: egy payload structot, egy ",[459,516,517],{},"Via","-t (alapból ",[459,520,521],{},"[database, mail]","), egy ",[459,524,525],{},"ToMail","-t és egy ",[459,528,529],{},"ToDatabase","-t, plusz a ",[459,532,533],{},"templates\u002F\u003Cnév>.html.tmpl"," + ",[459,536,537],{},"templates\u002F\u003Cnév>.txt.tmpl"," fájlokat. A projekt ",[540,541,542],"strong",{},"első"," notificationjénél (bármelyik modulban) bedrótozza a közös ",[545,546,547],"a",{"href":136},[459,548,549],{},"notify.Sender","-t is minden belépési pontba. Idempotens: egy második notification, akár ugyanabban, akár másik modulban, újrahasználja a bekötést.",[452,552,554],{"className":454,"code":553,"language":456,"meta":457,"style":457},"go tool gpsystem add notification contact orderShipped\n",[459,555,556],{"__ignoreMap":457},[462,557,558,560,562,564,566,568,571],{"class":464,"line":465},[462,559,469],{"class":468},[462,561,473],{"class":472},[462,563,476],{"class":472},[462,565,479],{"class":472},[462,567,482],{"class":472},[462,569,570],{"class":472}," contact",[462,572,573],{"class":472}," orderShipped\n",[575,576,578,579,581],"h2",{"id":577},"miért-különbözik-az-add-mail-től","Miért különbözik az ",[459,580,300],{},"-től",[448,583,584,585,589,590,592,593,597,598,600,601,604,605,608,609,612,613,616,617,621],{},"Az ",[545,586,587],{"href":301},[459,588,300],{}," olyan tartalomhoz való, ami közvetlenül egy címre megy, recipient-fogalom nélkül: egy contact-form visszaigazolás, egy jelszó-visszaállító link. Az ",[459,591,305],{}," olyan tartalomhoz, ami egy ",[594,595,596],"em",{},"recipiensnek"," szól (egy stabil id-vel azonosított usernek), akár több csatornán egyszerre kézbesítve. A kettő független és összeadódik: egy notification ",[459,599,525],{},"-je ugyanazt a ",[459,602,603],{},"mail.Message","\u002F",[459,606,607],{},"mail.Template","-et építi, mint egy mail-notifier ",[459,610,611],{},"Notify","-ja; lásd a ",[545,614,615],{"href":136},"Notification"," oldalt és annak ",[545,618,620],{"href":619},"\u002Fhu\u002Fnotify\u002Foverview#kidolgozott-p%C3%A9lda-a-contact-email-flow","kidolgozott példáját",", ami mindkettőt egymás mellett használja.",[575,623,625],{"id":624},"mit-generál","Mit generál",[452,627,631],{"className":628,"code":629,"filename":630,"language":469,"meta":457,"style":457},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","package notifications\n\n\u002F\u002Fgo:embed templates\u002Fordershipped.html.tmpl templates\u002Fordershipped.txt.tmpl\nvar orderShippedTemplatesFS embed.FS\n\ntype OrderShipped struct {\n}\n\nvar (\n    _ notify.Notification = OrderShipped{}\n    _ notify.Mailable      = OrderShipped{}\n    _ notify.Databasable   = OrderShipped{}\n)\n\nfunc (OrderShipped) NotificationName() string { return \"contact.order_shipped\" }\n\nfunc (OrderShipped) Via(ctx context.Context, r notify.Recipient) []string {\n    return []string{notify.ChannelDatabase, notify.ChannelMail}\n}\n\nfunc (n OrderShipped) ToMail(ctx context.Context, r notify.Recipient) (*kitmail.Message, error) {\n    return kitmail.NewMessage().\n        WithSubject(\"TODO: subject for OrderShipped\").\n        WithBody(kitmail.Template(orderShippedTemplatesFS, \"templates\u002Fordershipped.html.tmpl\", n).\n            WithTextTemplate(\"templates\u002Fordershipped.txt.tmpl\")), nil\n    \u002F\u002F nincs WithTo: a mail csatorna automatikusan r-re routol\n}\n\nfunc (n OrderShipped) ToDatabase(ctx context.Context, r notify.Recipient) (any, error) {\n    return n, nil\n}\n","internal\u002Fmodules\u002Fcontact\u002Fnotifications\u002Fordershipped.go",[459,632,633,641,648,655,673,678,693,699,704,712,732,751,770,776,781,826,831,884,915,920,925,984,1000,1018,1054,1075,1081,1086,1091,1142,1153],{"__ignoreMap":457},[462,634,635,638],{"class":464,"line":465},[462,636,637],{"class":485},"package",[462,639,640],{"class":468}," notifications\n",[462,642,644],{"class":464,"line":643},2,[462,645,647],{"emptyLinePlaceholder":646},true,"\n",[462,649,651],{"class":464,"line":650},3,[462,652,654],{"class":653},"sHwdD","\u002F\u002Fgo:embed templates\u002Fordershipped.html.tmpl templates\u002Fordershipped.txt.tmpl\n",[462,656,658,661,664,667,670],{"class":464,"line":657},4,[462,659,660],{"class":485},"var",[462,662,663],{"class":492}," orderShippedTemplatesFS ",[462,665,666],{"class":468},"embed",[462,668,669],{"class":485},".",[462,671,672],{"class":468},"FS\n",[462,674,676],{"class":464,"line":675},5,[462,677,647],{"emptyLinePlaceholder":646},[462,679,681,684,687,690],{"class":464,"line":680},6,[462,682,683],{"class":485},"type",[462,685,686],{"class":468}," OrderShipped",[462,688,689],{"class":485}," struct",[462,691,692],{"class":485}," {\n",[462,694,696],{"class":464,"line":695},7,[462,697,698],{"class":485},"}\n",[462,700,702],{"class":464,"line":701},8,[462,703,647],{"emptyLinePlaceholder":646},[462,705,707,709],{"class":464,"line":706},9,[462,708,660],{"class":485},[462,710,711],{"class":485}," (\n",[462,713,715,718,720,722,724,727,729],{"class":464,"line":714},10,[462,716,717],{"class":492},"    _ ",[462,719,130],{"class":468},[462,721,669],{"class":485},[462,723,615],{"class":468},[462,725,726],{"class":485}," =",[462,728,686],{"class":468},[462,730,731],{"class":485},"{}\n",[462,733,735,737,739,741,744,747,749],{"class":464,"line":734},11,[462,736,717],{"class":492},[462,738,130],{"class":468},[462,740,669],{"class":485},[462,742,743],{"class":468},"Mailable",[462,745,746],{"class":485},"      =",[462,748,686],{"class":468},[462,750,731],{"class":485},[462,752,754,756,758,760,763,766,768],{"class":464,"line":753},12,[462,755,717],{"class":492},[462,757,130],{"class":468},[462,759,669],{"class":485},[462,761,762],{"class":468},"Databasable",[462,764,765],{"class":485},"   =",[462,767,686],{"class":468},[462,769,731],{"class":485},[462,771,773],{"class":464,"line":772},13,[462,774,775],{"class":485},")\n",[462,777,779],{"class":464,"line":778},14,[462,780,647],{"emptyLinePlaceholder":646},[462,782,784,787,790,793,796,800,803,807,810,814,817,820,823],{"class":464,"line":783},15,[462,785,786],{"class":485},"func",[462,788,789],{"class":485}," (",[462,791,792],{"class":468},"OrderShipped",[462,794,795],{"class":485},")",[462,797,799],{"class":798},"s2Zo4"," NotificationName",[462,801,802],{"class":485},"()",[462,804,806],{"class":805},"spNyl"," string",[462,808,809],{"class":485}," {",[462,811,813],{"class":812},"s7zQu"," return",[462,815,816],{"class":485}," \"",[462,818,819],{"class":472},"contact.order_shipped",[462,821,822],{"class":485},"\"",[462,824,825],{"class":485}," }\n",[462,827,829],{"class":464,"line":828},16,[462,830,647],{"emptyLinePlaceholder":646},[462,832,834,836,838,840,842,845,848,852,855,857,860,863,866,869,871,874,876,879,882],{"class":464,"line":833},17,[462,835,786],{"class":485},[462,837,789],{"class":485},[462,839,792],{"class":468},[462,841,795],{"class":485},[462,843,844],{"class":798}," Via",[462,846,847],{"class":485},"(",[462,849,851],{"class":850},"sHdIc","ctx",[462,853,854],{"class":468}," context",[462,856,669],{"class":485},[462,858,859],{"class":468},"Context",[462,861,862],{"class":485},",",[462,864,865],{"class":850}," r",[462,867,868],{"class":468}," notify",[462,870,669],{"class":485},[462,872,873],{"class":468},"Recipient",[462,875,795],{"class":485},[462,877,878],{"class":485}," []",[462,880,881],{"class":805},"string",[462,883,692],{"class":485},[462,885,887,890,892,894,897,899,901,904,906,908,910,913],{"class":464,"line":886},18,[462,888,889],{"class":812},"    return",[462,891,878],{"class":485},[462,893,881],{"class":805},[462,895,896],{"class":485},"{",[462,898,130],{"class":492},[462,900,669],{"class":485},[462,902,903],{"class":492},"ChannelDatabase",[462,905,862],{"class":485},[462,907,868],{"class":492},[462,909,669],{"class":485},[462,911,912],{"class":492},"ChannelMail",[462,914,698],{"class":485},[462,916,918],{"class":464,"line":917},19,[462,919,698],{"class":485},[462,921,923],{"class":464,"line":922},20,[462,924,647],{"emptyLinePlaceholder":646},[462,926,928,930,932,935,937,939,942,944,946,948,950,952,954,956,958,960,962,964,967,970,972,975,977,980,982],{"class":464,"line":927},21,[462,929,786],{"class":485},[462,931,789],{"class":485},[462,933,934],{"class":850},"n ",[462,936,792],{"class":468},[462,938,795],{"class":485},[462,940,941],{"class":798}," ToMail",[462,943,847],{"class":485},[462,945,851],{"class":850},[462,947,854],{"class":468},[462,949,669],{"class":485},[462,951,859],{"class":468},[462,953,862],{"class":485},[462,955,865],{"class":850},[462,957,868],{"class":468},[462,959,669],{"class":485},[462,961,873],{"class":468},[462,963,795],{"class":485},[462,965,966],{"class":485}," (*",[462,968,969],{"class":468},"kitmail",[462,971,669],{"class":485},[462,973,974],{"class":468},"Message",[462,976,862],{"class":485},[462,978,979],{"class":805}," error",[462,981,795],{"class":485},[462,983,692],{"class":485},[462,985,987,989,992,994,997],{"class":464,"line":986},22,[462,988,889],{"class":812},[462,990,991],{"class":492}," kitmail",[462,993,669],{"class":485},[462,995,996],{"class":798},"NewMessage",[462,998,999],{"class":485},"().\n",[462,1001,1003,1006,1008,1010,1013,1015],{"class":464,"line":1002},23,[462,1004,1005],{"class":798},"        WithSubject",[462,1007,847],{"class":485},[462,1009,822],{"class":485},[462,1011,1012],{"class":472},"TODO: subject for OrderShipped",[462,1014,822],{"class":485},[462,1016,1017],{"class":485},").\n",[462,1019,1021,1024,1026,1028,1030,1033,1035,1038,1040,1042,1045,1047,1049,1052],{"class":464,"line":1020},24,[462,1022,1023],{"class":798},"        WithBody",[462,1025,847],{"class":485},[462,1027,969],{"class":492},[462,1029,669],{"class":485},[462,1031,1032],{"class":798},"Template",[462,1034,847],{"class":485},[462,1036,1037],{"class":492},"orderShippedTemplatesFS",[462,1039,862],{"class":485},[462,1041,816],{"class":485},[462,1043,1044],{"class":472},"templates\u002Fordershipped.html.tmpl",[462,1046,822],{"class":485},[462,1048,862],{"class":485},[462,1050,1051],{"class":492}," n",[462,1053,1017],{"class":485},[462,1055,1057,1060,1062,1064,1067,1069,1072],{"class":464,"line":1056},25,[462,1058,1059],{"class":798},"            WithTextTemplate",[462,1061,847],{"class":485},[462,1063,822],{"class":485},[462,1065,1066],{"class":472},"templates\u002Fordershipped.txt.tmpl",[462,1068,822],{"class":485},[462,1070,1071],{"class":485},")),",[462,1073,1074],{"class":485}," nil\n",[462,1076,1078],{"class":464,"line":1077},26,[462,1079,1080],{"class":653},"    \u002F\u002F nincs WithTo: a mail csatorna automatikusan r-re routol\n",[462,1082,1084],{"class":464,"line":1083},27,[462,1085,698],{"class":485},[462,1087,1089],{"class":464,"line":1088},28,[462,1090,647],{"emptyLinePlaceholder":646},[462,1092,1094,1096,1098,1100,1102,1104,1107,1109,1111,1113,1115,1117,1119,1121,1123,1125,1127,1129,1131,1134,1136,1138,1140],{"class":464,"line":1093},29,[462,1095,786],{"class":485},[462,1097,789],{"class":485},[462,1099,934],{"class":850},[462,1101,792],{"class":468},[462,1103,795],{"class":485},[462,1105,1106],{"class":798}," ToDatabase",[462,1108,847],{"class":485},[462,1110,851],{"class":850},[462,1112,854],{"class":468},[462,1114,669],{"class":485},[462,1116,859],{"class":468},[462,1118,862],{"class":485},[462,1120,865],{"class":850},[462,1122,868],{"class":468},[462,1124,669],{"class":485},[462,1126,873],{"class":468},[462,1128,795],{"class":485},[462,1130,789],{"class":485},[462,1132,1133],{"class":468},"any",[462,1135,862],{"class":485},[462,1137,979],{"class":805},[462,1139,795],{"class":485},[462,1141,692],{"class":485},[462,1143,1145,1147,1149,1151],{"class":464,"line":1144},30,[462,1146,889],{"class":812},[462,1148,1051],{"class":492},[462,1150,862],{"class":485},[462,1152,1074],{"class":485},[462,1154,1156],{"class":464,"line":1155},31,[462,1157,698],{"class":485},[448,1159,1160,1161,1167,1168,1172,1173,1176,1177,1179,1180,1184],{},"Plusz egy teszt memory mail csatornával és memory database store-ral, és két kitöltendő placeholder sablon. A payload struct üresen indul, ugyanúgy, ahogy az ",[545,1162,1164],{"href":1163},"\u002Fhu\u002Fcli\u002Fworker-generators#add-event",[459,1165,1166],{},"add event"," és az ",[545,1169,1170],{"href":301},[459,1171,300],{}," is üres structot generál: add hozzá a sablonjaidnak szükséges mezőket, és tedd be a ",[459,1174,1175],{},"notify.ChannelBroadcast","-ot a ",[459,1178,517],{},"-ba, ha az ",[545,1181,1182],{"href":311},[459,1183,310],{}," már lefutott.",[448,1186,1187,1188,1190],{},"A projekt ",[540,1189,542],{}," notificationjénél:",[452,1192,1195],{"className":628,"code":1193,"filename":1194,"language":469,"meta":457,"style":457},"type Dependencies struct {\n    \u002F\u002F ...\n    Notifier notify.Sender\n    \u002F\u002F gpsystem:dependencies\n}\n","internal\u002Fmodules\u002Fcontact\u002Fregister.go",[459,1196,1197,1208,1213,1225,1230],{"__ignoreMap":457},[462,1198,1199,1201,1204,1206],{"class":464,"line":465},[462,1200,683],{"class":485},[462,1202,1203],{"class":468}," Dependencies",[462,1205,689],{"class":485},[462,1207,692],{"class":485},[462,1209,1210],{"class":464,"line":643},[462,1211,1212],{"class":653},"    \u002F\u002F ...\n",[462,1214,1215,1218,1220,1222],{"class":464,"line":650},[462,1216,1217],{"class":492},"    Notifier ",[462,1219,130],{"class":468},[462,1221,669],{"class":485},[462,1223,1224],{"class":468},"Sender\n",[462,1226,1227],{"class":464,"line":657},[462,1228,1229],{"class":653},"    \u002F\u002F gpsystem:dependencies\n",[462,1231,1232],{"class":464,"line":675},[462,1233,698],{"class":485},[452,1235,1238],{"className":628,"code":1236,"filename":1237,"language":469,"meta":457,"style":457},"mailer := smtp.MustNewIfConfigured(ctx, cfg.Mail)\nnotifier := notify.NewHub(\n    notify.NewMailChannel(mailer),\n    notifydatabase.NewChannel(notifydatabase.NewStore(pg.NewDB(pool))),\n)\n\u002F\u002F ...\ndeps := contact.Dependencies{\n    \u002F\u002F ...\n    Notifier: notifier,\n    \u002F\u002F gpsystem:dependencies-init\n}\n","cmd\u002Fcontact\u002Fmain.go és cmd\u002Fworker\u002Fmain.go",[459,1239,1240,1272,1289,1307,1345,1349,1354,1371,1375,1389,1394],{"__ignoreMap":457},[462,1241,1242,1245,1248,1251,1253,1256,1258,1260,1262,1265,1267,1270],{"class":464,"line":465},[462,1243,1244],{"class":492},"mailer ",[462,1246,1247],{"class":485},":=",[462,1249,1250],{"class":492}," smtp",[462,1252,669],{"class":485},[462,1254,1255],{"class":798},"MustNewIfConfigured",[462,1257,847],{"class":485},[462,1259,851],{"class":492},[462,1261,862],{"class":485},[462,1263,1264],{"class":492}," cfg",[462,1266,669],{"class":485},[462,1268,1269],{"class":492},"Mail",[462,1271,775],{"class":485},[462,1273,1274,1277,1279,1281,1283,1286],{"class":464,"line":643},[462,1275,1276],{"class":492},"notifier ",[462,1278,1247],{"class":485},[462,1280,868],{"class":492},[462,1282,669],{"class":485},[462,1284,1285],{"class":798},"NewHub",[462,1287,1288],{"class":485},"(\n",[462,1290,1291,1294,1296,1299,1301,1304],{"class":464,"line":650},[462,1292,1293],{"class":492},"    notify",[462,1295,669],{"class":485},[462,1297,1298],{"class":798},"NewMailChannel",[462,1300,847],{"class":485},[462,1302,1303],{"class":492},"mailer",[462,1305,1306],{"class":485},"),\n",[462,1308,1309,1312,1314,1317,1319,1322,1324,1327,1329,1332,1334,1337,1339,1342],{"class":464,"line":657},[462,1310,1311],{"class":492},"    notifydatabase",[462,1313,669],{"class":485},[462,1315,1316],{"class":798},"NewChannel",[462,1318,847],{"class":485},[462,1320,1321],{"class":492},"notifydatabase",[462,1323,669],{"class":485},[462,1325,1326],{"class":798},"NewStore",[462,1328,847],{"class":485},[462,1330,1331],{"class":492},"pg",[462,1333,669],{"class":485},[462,1335,1336],{"class":798},"NewDB",[462,1338,847],{"class":485},[462,1340,1341],{"class":492},"pool",[462,1343,1344],{"class":485},"))),\n",[462,1346,1347],{"class":464,"line":675},[462,1348,775],{"class":485},[462,1350,1351],{"class":464,"line":680},[462,1352,1353],{"class":653},"\u002F\u002F ...\n",[462,1355,1356,1359,1361,1363,1365,1368],{"class":464,"line":695},[462,1357,1358],{"class":492},"deps ",[462,1360,1247],{"class":485},[462,1362,570],{"class":468},[462,1364,669],{"class":485},[462,1366,1367],{"class":468},"Dependencies",[462,1369,1370],{"class":485},"{\n",[462,1372,1373],{"class":464,"line":701},[462,1374,1212],{"class":653},[462,1376,1377,1380,1383,1386],{"class":464,"line":706},[462,1378,1379],{"class":492},"    Notifier",[462,1381,1382],{"class":485},":",[462,1384,1385],{"class":492}," notifier",[462,1387,1388],{"class":485},",\n",[462,1390,1391],{"class":464,"line":714},[462,1392,1393],{"class":653},"    \u002F\u002F gpsystem:dependencies-init\n",[462,1395,1396],{"class":464,"line":734},[462,1397,698],{"class":485},[448,1399,1400,1401,1404,1405,1408,1409,1412,1413,1416,1417,1419,1420,1423,1424,1426],{},"A ",[459,1402,1403],{},"notifier"," belépési pontonként ",[540,1406,1407],{},"egyszer"," konstruálódik (ugyanaz a minta, mint a közös mailernél és adatbázis-poolnál), és minden notificationt tartalmazó modul osztozik rajta. A database csatorna mindig a kit pgx-executorán (",[459,1410,1411],{},"pg.NewDB(pool)",") keresztül perzisztál, függetlenül a projekt üzleti moduljainak ",[459,1414,1415],{},"--db"," választásától: a ",[459,1418,1341],{}," mindenhol elérhető, ahol a notifier épül, míg egy ",[459,1421,1422],{},"bun.DB"," csak később, a modulonkénti ",[459,1425,1367],{}," literálon belül konstruálódik.",[448,1428,1429,1430,1432,1433,1436,1437,1440,1441,1444],{},"Ha az ",[459,1431,310],{}," már lefutott, a notifier-konstrukció egy ",[459,1434,1435],{},"notify\u002Fbroadcast.Publisher","-t is épít, és hozzáadja a ",[459,1438,1439],{},"notify.NewBroadcastChannel(...)","-t a ",[459,1442,1443],{},"Hub","-hoz, plusz a closerét:",[452,1446,1448],{"className":628,"code":1447,"language":469,"meta":457,"style":457},"pub := broadcast.MustNewPublisher(ctx, cfg.Realtime.BroadcastValkey(), cfg.Realtime.Broadcast)\nnotifier := notify.NewHub(\n    notify.NewMailChannel(mailer),\n    notifydatabase.NewChannel(notifydatabase.NewStore(pg.NewDB(pool))),\n    notify.NewBroadcastChannel(pub, cfg.Realtime.Broadcast.ChannelPrefix),\n)\n",[459,1449,1450,1498,1512,1526,1556,1589],{"__ignoreMap":457},[462,1451,1452,1455,1457,1460,1462,1465,1467,1469,1471,1473,1475,1477,1479,1482,1485,1487,1489,1491,1493,1496],{"class":464,"line":465},[462,1453,1454],{"class":492},"pub ",[462,1456,1247],{"class":485},[462,1458,1459],{"class":492}," broadcast",[462,1461,669],{"class":485},[462,1463,1464],{"class":798},"MustNewPublisher",[462,1466,847],{"class":485},[462,1468,851],{"class":492},[462,1470,862],{"class":485},[462,1472,1264],{"class":492},[462,1474,669],{"class":485},[462,1476,268],{"class":492},[462,1478,669],{"class":485},[462,1480,1481],{"class":798},"BroadcastValkey",[462,1483,1484],{"class":485},"(),",[462,1486,1264],{"class":492},[462,1488,669],{"class":485},[462,1490,268],{"class":492},[462,1492,669],{"class":485},[462,1494,1495],{"class":492},"Broadcast",[462,1497,775],{"class":485},[462,1499,1500,1502,1504,1506,1508,1510],{"class":464,"line":643},[462,1501,1276],{"class":492},[462,1503,1247],{"class":485},[462,1505,868],{"class":492},[462,1507,669],{"class":485},[462,1509,1285],{"class":798},[462,1511,1288],{"class":485},[462,1513,1514,1516,1518,1520,1522,1524],{"class":464,"line":650},[462,1515,1293],{"class":492},[462,1517,669],{"class":485},[462,1519,1298],{"class":798},[462,1521,847],{"class":485},[462,1523,1303],{"class":492},[462,1525,1306],{"class":485},[462,1527,1528,1530,1532,1534,1536,1538,1540,1542,1544,1546,1548,1550,1552,1554],{"class":464,"line":657},[462,1529,1311],{"class":492},[462,1531,669],{"class":485},[462,1533,1316],{"class":798},[462,1535,847],{"class":485},[462,1537,1321],{"class":492},[462,1539,669],{"class":485},[462,1541,1326],{"class":798},[462,1543,847],{"class":485},[462,1545,1331],{"class":492},[462,1547,669],{"class":485},[462,1549,1336],{"class":798},[462,1551,847],{"class":485},[462,1553,1341],{"class":492},[462,1555,1344],{"class":485},[462,1557,1558,1560,1562,1565,1567,1570,1572,1574,1576,1578,1580,1582,1584,1587],{"class":464,"line":675},[462,1559,1293],{"class":492},[462,1561,669],{"class":485},[462,1563,1564],{"class":798},"NewBroadcastChannel",[462,1566,847],{"class":485},[462,1568,1569],{"class":492},"pub",[462,1571,862],{"class":485},[462,1573,1264],{"class":492},[462,1575,669],{"class":485},[462,1577,268],{"class":492},[462,1579,669],{"class":485},[462,1581,1495],{"class":492},[462,1583,669],{"class":485},[462,1585,1586],{"class":492},"ChannelPrefix",[462,1588,1306],{"class":485},[462,1590,1591],{"class":464,"line":680},[462,1592,775],{"class":485},[1594,1595,1596,1597,1599,1600,1603,1604,1606,1607,1609],"note",{},"A notifier belépési pontonként egyszer konstruálódik, a projekt első notificationjénél. Ha az ",[459,1598,310],{}," ",[594,1601,1602],{},"azután"," fut le, hogy már létezik az első notification, a további modulokban keletkező notificationök is a korábbi (mail+database-only) konstrukciót használják újra, ahelyett hogy egy második, ütköző konstrukciót emitálnának: kösd be kézzel a broadcast csatornát abba a belépési pontba, vagy futtasd az ",[459,1605,310],{},"-ot az első ",[459,1608,305],{}," előtt, hogy mindenhol automatikusan bedrótozódjon.",[448,1611,1612,1613,1616],{},"Bedrótozza a migrációt is (idempotens: kihagyja, ha már létezik egy ",[459,1614,1615],{},"notifications"," tábla migráció):",[452,1618,1623],{"className":1619,"code":1620,"filename":1621,"language":1622,"meta":457,"style":457},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","CREATE TABLE notifications (\n    id uuid PRIMARY KEY, recipient_id text NOT NULL, name text NOT NULL,\n    payload jsonb NOT NULL DEFAULT '{}'::jsonb, read_at timestamptz,\n    created_at timestamptz NOT NULL DEFAULT now()\n);\n","migrations\u002F\u003Cidőbélyeg>_notifications.sql","sql",[459,1624,1625,1639,1669,1697,1714],{"__ignoreMap":457},[462,1626,1627,1631,1634,1637],{"class":464,"line":465},[462,1628,1630],{"class":1629},"sbssI","CREATE",[462,1632,1633],{"class":1629}," TABLE",[462,1635,1636],{"class":798}," notifications",[462,1638,711],{"class":492},[462,1640,1641,1644,1647,1650,1653,1656,1659,1662,1665,1667],{"class":464,"line":643},[462,1642,1643],{"class":492},"    id uuid ",[462,1645,1646],{"class":805},"PRIMARY KEY",[462,1648,1649],{"class":492},", recipient_id ",[462,1651,1652],{"class":805},"text",[462,1654,1655],{"class":1629}," NOT NULL",[462,1657,1658],{"class":492},", ",[462,1660,1661],{"class":1629},"name",[462,1663,1664],{"class":805}," text",[462,1666,1655],{"class":1629},[462,1668,1388],{"class":492},[462,1670,1671,1674,1677,1680,1683,1686,1689,1692,1695],{"class":464,"line":650},[462,1672,1673],{"class":492},"    payload jsonb ",[462,1675,1676],{"class":1629},"NOT NULL",[462,1678,1679],{"class":805}," DEFAULT",[462,1681,1682],{"class":485}," '",[462,1684,1685],{"class":472},"{}",[462,1687,1688],{"class":485},"'",[462,1690,1691],{"class":492},"::jsonb, read_at ",[462,1693,1694],{"class":805},"timestamptz",[462,1696,1388],{"class":492},[462,1698,1699,1702,1704,1706,1708,1711],{"class":464,"line":657},[462,1700,1701],{"class":492},"    created_at ",[462,1703,1694],{"class":805},[462,1705,1655],{"class":1629},[462,1707,1679],{"class":805},[462,1709,1710],{"class":1629}," now",[462,1712,1713],{"class":485},"()\n",[462,1715,1716],{"class":464,"line":675},[462,1717,1718],{"class":492},");\n",[575,1720,1722],{"id":1721},"küldés","Küldés",[448,1724,1725,1726,1730,1731,1737],{},"Semmi nem hívja automatikusan a notificationt: küldd el egy service-ből (szinkron) vagy egy listenerből (aszinkron, ",[545,1727,1728],{"href":1163},[459,1729,1166],{}," \u002F ",[545,1732,1734],{"href":1733},"\u002Fhu\u002Fcli\u002Fworker-generators#add-listener",[459,1735,1736],{},"add listener"," révén):",[452,1739,1742],{"className":628,"code":1740,"filename":1741,"language":469,"meta":457,"style":457},"return deps.Notifier.Send(ctx,\n    notify.Recipient{ID: identity.Subject, Email: identity.Email, Name: identity.Username},\n    contactnotifications.OrderShipped{ \u002F* ... *\u002F },\n)\n","internal\u002Fmodules\u002Fcontact\u002Flisteners\u002Fsendordershipped.go",[459,1743,1744,1768,1822,1839],{"__ignoreMap":457},[462,1745,1746,1749,1752,1754,1757,1759,1762,1764,1766],{"class":464,"line":465},[462,1747,1748],{"class":812},"return",[462,1750,1751],{"class":492}," deps",[462,1753,669],{"class":485},[462,1755,1756],{"class":492},"Notifier",[462,1758,669],{"class":485},[462,1760,1761],{"class":798},"Send",[462,1763,847],{"class":485},[462,1765,851],{"class":492},[462,1767,1388],{"class":485},[462,1769,1770,1772,1774,1776,1778,1781,1783,1786,1788,1791,1793,1796,1798,1800,1802,1805,1807,1810,1812,1814,1816,1819],{"class":464,"line":643},[462,1771,1293],{"class":468},[462,1773,669],{"class":485},[462,1775,873],{"class":468},[462,1777,896],{"class":485},[462,1779,1780],{"class":492},"ID",[462,1782,1382],{"class":485},[462,1784,1785],{"class":492}," identity",[462,1787,669],{"class":485},[462,1789,1790],{"class":492},"Subject",[462,1792,862],{"class":485},[462,1794,1795],{"class":492}," Email",[462,1797,1382],{"class":485},[462,1799,1785],{"class":492},[462,1801,669],{"class":485},[462,1803,1804],{"class":492},"Email",[462,1806,862],{"class":485},[462,1808,1809],{"class":492}," Name",[462,1811,1382],{"class":485},[462,1813,1785],{"class":492},[462,1815,669],{"class":485},[462,1817,1818],{"class":492},"Username",[462,1820,1821],{"class":485},"},\n",[462,1823,1824,1827,1829,1831,1833,1836],{"class":464,"line":650},[462,1825,1826],{"class":468},"    contactnotifications",[462,1828,669],{"class":485},[462,1830,792],{"class":468},[462,1832,896],{"class":485},[462,1834,1835],{"class":653}," \u002F* ... *\u002F",[462,1837,1838],{"class":485}," },\n",[462,1840,1841],{"class":464,"line":657},[462,1842,775],{"class":485},[448,1844,584,1845,1847,1848,604,1851,604,1854,604,1857,1860,1861,1866],{},[459,1846,305],{}," ugyanazoknál a ",[459,1849,1850],{},"gpsystem:pools",[459,1852,1853],{},"gpsystem:dependencies-init",[459,1855,1856],{},"gpsystem:dependencies",[459,1858,1859],{},"gpsystem:config"," anchoroknál ír, mint az ",[545,1862,1864],{"href":1863},"\u002Fhu\u002Fcli\u002Fadd-mail#anchor-kommentek",[459,1865,300],{},"; ha valamelyik hiányzik, lásd ott, mi történik.",[1868,1869,1870],"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":457,"searchDepth":643,"depth":643,"links":1872},[1873,1875,1876],{"id":577,"depth":643,"text":1874},"Miért különbözik az add mail-től",{"id":624,"depth":643,"text":625},{"id":1721,"depth":643,"text":1722},"Modul-tulajdonú, többcsatornás notification generálása: payload, Via, csatornánkénti tartalom, és a közös Hub bekötése.","md",null,{},{"icon":308},{"title":305,"description":1877},"cpDjWZyzS6877aDZGCTckYA2dWsN7-TXPLVNTz5ZZXk",[1885,1887],{"title":300,"path":301,"stem":302,"description":1886,"icon":303,"children":-1},"Modul-tulajdonú mail-notifier generálása: payload, sablonok, és a közös transzport bekötése.",{"title":310,"path":311,"stem":312,"description":1888,"icon":313,"children":-1},"A realtime notification-gateway scaffoldolása: egy dedikált, horizontálisan skálázható cmd\u002Frealtime binary.",1785445896197]