Files
event-demo/doc/schemas/Workflow.svg
2025-04-16 00:55:55 +02:00

1 line
35 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="1460px" preserveAspectRatio="none" style="width:1185px;height:1460px;" version="1.1" viewBox="0 0 1185 1460" width="1185px" zoomAndPan="magnify"><defs/><g><!--cluster Legend--><g id="cluster_Legend"><path d="M897,6.0137 L947.7793,6.0137 A3.75,3.75 0 0 1 950.2793,8.5137 L957.2793,30.6348 L1176,30.6348 A2.5,2.5 0 0 1 1178.5,33.1348 L1178.5,207.5137 A2.5,2.5 0 0 1 1176,210.0137 L897,210.0137 A2.5,2.5 0 0 1 894.5,207.5137 L894.5,8.5137 A2.5,2.5 0 0 1 897,6.0137 " fill="none" style="stroke:#000000;stroke-width:1.5;"/><line style="stroke:#000000;stroke-width:1.5;" x1="894.5" x2="957.2793" y1="30.6348" y2="30.6348"/><text fill="#000000" font-family="sans-serif" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="49.7793" x="898.5" y="23.1211">Legend</text></g><g id="elem_Queries"><ellipse cx="957.5879" cy="59.315" fill="#7693C4" rx="46.5879" ry="16.3013" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="49.0205" x="930.0776" y="64.1187">Queries</text></g><g id="elem_Projections"><ellipse cx="1100.6745" cy="59.4601" fill="#AB64C9" rx="61.6745" ry="16.4464" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="69.2549" x="1063.0471" y="64.2638">Projections</text></g><g id="elem_Events"><ellipse cx="957.4528" cy="178.2499" fill="#5FAD56" rx="41.9528" ry="16.2362" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="42.7998" x="933.2413" y="183.0022">Events</text></g><!--entity User--><g id="elem_User"><ellipse cx="605.2793" cy="28.5137" fill="#F1F1F1" rx="8" ry="8" style="stroke:#181818;stroke-width:0.5;"/><path d="M605.2793,36.5137 L605.2793,63.5137 M592.2793,44.5137 L618.2793,44.5137 M605.2793,63.5137 L592.2793,78.5137 M605.2793,63.5137 L618.2793,78.5137 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="29.5586" x="590.5" y="95.1211">User</text></g><!--entity Query--><g id="elem_Query"><ellipse cx="726.562" cy="50.0137" fill="#7693C4" rx="12" ry="12" style="stroke:#181818;stroke-width:0.5;"/><line style="stroke:#181818;stroke-width:0.5;" x1="714.562" x2="738.562" y1="64.0137" y2="64.0137"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="38.124" x="707.5" y="81.1211">Query</text></g><!--entity Command--><g id="elem_Command"><ellipse cx="471.2896" cy="50.0137" fill="#5FAD56" rx="12" ry="12" style="stroke:#181818;stroke-width:0.5;"/><line style="stroke:#181818;stroke-width:0.5;" x1="459.2896" x2="483.2896" y1="64.0137" y2="64.0137"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="64.5791" x="439" y="81.1211">Command</text></g><!--entity Event--><g id="elem_Event"><ellipse cx="243.3999" cy="530.5137" fill="#5FAD56" rx="12" ry="12" style="stroke:#181818;stroke-width:0.5;"/><line style="stroke:#181818;stroke-width:0.5;" x1="231.3999" x2="255.3999" y1="544.5137" y2="544.5137"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="35.7998" x="225.5" y="561.6211">Event</text></g><!--entity Projection--><g id="elem_Projection"><ellipse cx="750.6274" cy="1410.0137" fill="#AB64C9" rx="12" ry="12" style="stroke:#181818;stroke-width:0.5;"/><line style="stroke:#181818;stroke-width:0.5;" x1="738.6274" x2="762.6274" y1="1424.0137" y2="1424.0137"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62.2549" x="719.5" y="1441.1211">Projection</text></g><!--entity Postgresql--><g id="elem_Postgresql"><path d="M83.5,905.0137 C83.5,895.0137 126.5723,895.0137 126.5723,895.0137 C126.5723,895.0137 169.6445,895.0137 169.6445,905.0137 L169.6445,932.6348 C169.6445,942.6348 126.5723,942.6348 126.5723,942.6348 C126.5723,942.6348 83.5,942.6348 83.5,932.6348 L83.5,905.0137 " fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><path d="M83.5,905.0137 C83.5,915.0137 126.5723,915.0137 126.5723,915.0137 C126.5723,915.0137 169.6445,915.0137 169.6445,905.0137 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="66.1445" x="93.5" y="934.1211">Postgresql</text></g><!--entity Redis--><g id="elem_Redis"><path d="M462.5,1405.5137 C462.5,1395.5137 490.3965,1395.5137 490.3965,1395.5137 C490.3965,1395.5137 518.293,1395.5137 518.293,1405.5137 L518.293,1433.1348 C518.293,1443.1348 490.3965,1443.1348 490.3965,1443.1348 C490.3965,1443.1348 462.5,1443.1348 462.5,1433.1348 L462.5,1405.5137 " fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><path d="M462.5,1405.5137 C462.5,1415.5137 490.3965,1415.5137 490.3965,1415.5137 C490.3965,1415.5137 518.293,1415.5137 518.293,1405.5137 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="35.793" x="472.5" y="1434.6211">Redis</text></g><!--entity RabbitMQ--><g id="elem_RabbitMQ"><path d="M399,1006.5137 L472.0205,1006.5137 C477.0205,1006.5137 477.0205,1020.8242 477.0205,1020.8242 C477.0205,1020.8242 477.0205,1035.1348 472.0205,1035.1348 L399,1035.1348 C394,1035.1348 394,1020.8242 394,1020.8242 C394,1020.8242 394,1006.5137 399,1006.5137 " fill="#F1F1F1" style="stroke:#181818;stroke-width:0.5;"/><path d="M472.0205,1006.5137 C467.0205,1006.5137 467.0205,1020.8242 467.0205,1020.8242 C467.0205,1035.1348 472.0205,1035.1348 472.0205,1035.1348 " fill="none" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="63.0205" x="399" y="1026.6211">RabbitMQ</text></g><g id="elem_Web socket adapter"><ellipse cx="393.683" cy="276.6503" fill="#5FAD56" rx="86.183" ry="19.6366" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="124.5098" x="328.4281" y="281.454">Web socket adapter</text></g><g id="elem_Command handler"><ellipse cx="324.573" cy="410.9283" fill="#5FAD56" rx="82.573" ry="18.9146" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="115.1719" x="263.9871" y="415.732">Command handler</text></g><g id="elem_Action"><ellipse cx="567.5876" cy="411.2132" fill="#5FAD56" rx="39.0876" ry="16.1995" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="38.9102" x="546.3451" y="415.6638">Action</text></g><line style="stroke:#181818;stroke-width:0.5;" x1="603.5597" x2="583.5369" y1="405.566" y2="425.5888"/><g id="elem_Event handler"><ellipse cx="364.7482" cy="649.3633" fill="#5FAD56" rx="72.2482" ry="16.8496" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="86.3926" x="318.5519" y="654.167">Event handler</text></g><g id="elem_Version builder"><ellipse cx="80.6281" cy="649.3393" fill="#5FAD56" rx="74.6281" ry="17.3256" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="93.3857" x="30.9353" y="654.143">Version builder</text></g><g id="elem_Event store"><ellipse cx="295.3369" cy="780.9684" fill="#5FAD56" rx="62.8369" ry="16.4547" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="70.8135" x="256.9302" y="785.7721">Event store</text></g><g id="elem_Event stream"><ellipse cx="126.4573" cy="781.1051" fill="#5FAD56" rx="70.9573" ry="16.5915" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="82.4756" x="82.2195" y="785.9088">Event stream</text></g><g id="elem_Event bus"><ellipse cx="239.4595" cy="1020.9186" fill="#5FAD56" rx="56.4595" ry="16.405" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="62.2617" x="205.3287" y="1025.7223">Event bus</text></g><g id="elem_Reaction listener"><ellipse cx="535.5075" cy="781.1152" fill="#5FAD56" rx="78.5075" ry="18.1015" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="104.2754" x="480.3698" y="785.9189">Reaction listener</text></g><line style="stroke:#181818;stroke-width:0.5;" x1="607.7575" x2="588.7445" y1="774.805" y2="793.818"/><g id="elem_Projection builder"><ellipse cx="750.4416" cy="1277.902" fill="#AB64C9" rx="79.9416" ry="18.3883" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="108.1719" x="693.3557" y="1282.7057">Projection builder</text></g><line style="stroke:#181818;stroke-width:0.5;" x1="824.0116" x2="804.7104" y1="1271.4918" y2="1290.793"/><g id="elem_Projection repository"><ellipse cx="490.4058" cy="1277.8948" fill="#AB64C9" rx="87.4058" ry="19.8812" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="127.6133" x="423.5991" y="1282.6985">Projection repository</text></g><g id="elem_Projection bus"><ellipse cx="671.5288" cy="1021.0194" fill="#AB64C9" rx="73.0288" ry="17.0058" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="88.7168" x="624.1704" y="1025.8231">Projection bus</text></g><g id="elem_Controller"><ellipse cx="804.2872" cy="276.4082" fill="#7693C4" rx="55.2872" ry="16.3946" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="14" lengthAdjust="spacing" textLength="60.6895" x="770.9424" y="281.212">Controller</text></g><g id="elem_EventHandlerNote"><path d="M501,509.0137 L501,570.8867 A0,0 0 0 0 501,570.8867 L522.53,570.8867 L394.8,634.0337 L530.53,570.8867 L678.0952,570.8867 A0,0 0 0 0 678.0952,570.8867 L678.0952,519.0137 L668.0952,509.0137 L501,509.0137 A0,0 0 0 0 501,509.0137 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><path d="M668.0952,509.0137 L668.0952,519.0137 L678.0952,519.0137 L668.0952,509.0137 " fill="#FEFFDD" style="stroke:#181818;stroke-width:0.5;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85.2617" x="507" y="528.042">Acquire a lock,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="152.4834" x="507" y="545.333">get the next event version,</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="142.3906" x="507" y="562.624">and then, build the event</text></g><!--link User to Query--><g id="link_User_Query"><path d="M620.82,59.5137 C642.83,59.5137 677.35,59.5137 701.32,59.5137 " fill="none" id="User-to-Query" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="707.32,59.5137,698.32,55.5137,702.32,59.5137,698.32,63.5137,707.32,59.5137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50.5908" x="639" y="52.542">&#171;create&#187;</text></g><!--reverse link Command to User--><g id="link_Command_User"><path d="M510.28,59.5137 C537.71,59.5137 569.6,59.5137 590.37,59.5137 " fill="none" id="Command-backto-User" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="504.28,59.5137,513.28,63.5137,509.28,59.5137,513.28,55.5137,504.28,59.5137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50.5908" x="522.25" y="52.542">&#171;create&#187;</text></g><!--link User to Controller--><g id="link_User_Controller"><path d="M620.62,86.9237 C640.46,120.0737 677.68,177.5037 719.5,218.0137 C737.54,235.4937 756.3325,248.1146 774.2125,258.6646 " fill="none" id="User-to-Controller" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="779.38,261.7137,773.6614,253.6951,775.0737,259.1728,769.596,260.5851,779.38,261.7137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="20.9536" x="736.4009" y="175.042">Get</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="720.5" y="192.333">projection</text></g><!--reverse link User to Controller--><g id="link_User_Controller"><path d="M626.0785,69.4879 C664.7485,86.5679 760.31,130.7237 781.5,160.0137 C803.31,190.1637 805.74,235.8237 805.31,259.6937 " fill="none" id="User-backto-Controller" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="620.59,67.0637,627.2066,74.3589,625.1637,69.0838,630.4388,67.041,620.59,67.0637" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="45.519" x="808.1182" y="175.042">Returns</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="804.5" y="192.333">projection</text></g><!--link Controller to Projection repository--><g id="link_Controller_Projection repository"><path d="M804.5,293.0137 C804.5,317.7537 804.5,367.6837 804.5,410.0137 C804.5,410.0137 804.5,410.0137 804.5,1197.0137 C804.5,1221.9737 659.4695,1249.8041 566.8895,1265.1241 " fill="none" id="Controller-to-Projection repository" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="560.97,1266.1037,570.5023,1268.5807,565.9029,1265.2874,569.1962,1260.688,560.97,1266.1037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="20.9536" x="821.4009" y="844.042">Get</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="805.5" y="861.333">projection</text></g><!--link User to Web socket adapter--><g id="link_User_Web socket adapter"><path d="M590.3,67.6437 C547.63,87.7637 429.12,144.5537 417.5,160.0137 C395.97,188.6637 392.6454,226.1137 392.7054,250.7437 " fill="none" id="User-to-Web socket adapter" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="392.72,256.7437,396.6981,247.734,392.7078,251.7437,388.6981,247.7534,392.72,256.7437" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="30.3608" x="430.0527" y="175.042">Send</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="57.0781" x="418.5" y="192.333">command</text></g><!--link Web socket adapter to User--><g id="link_Web socket adapter_User"><path d="M424.6,258.2637 C442.01,247.8237 463.55,233.5537 480.5,218.0137 C526.18,176.1437 565.2811,121.6055 587.0011,89.0355 " fill="none" id="Web socket adapter-to-User" style="stroke:#181818;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="590.33,84.0437,582.0088,89.3121,587.5559,88.2035,588.6645,93.7507,590.33,84.0437" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="96.1226" x="535.5569" y="175.042">Send notification</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101.8481" x="534.5" y="192.333">(error or success)</text></g><!--link Web socket adapter to Command handler--><g id="link_Web socket adapter_Command handler"><path d="M347.23,293.0037 C332.17,300.4937 317.12,311.1737 308.5,326.0137 C296.57,346.5537 303.1957,368.8284 311.8057,386.6984 " fill="none" id="Web socket adapter-to-Command handler" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="314.41,392.1037,314.107,382.2595,312.2397,387.5992,306.8999,385.7319,314.41,392.1037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="30.3608" x="321.0527" y="341.042">Send</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="57.0781" x="309.5" y="358.333">command</text></g><!--link Command handler to Web socket adapter--><g id="link_Command handler_Web socket adapter"><path d="M346.28,392.3337 C355.27,383.9937 365.07,373.3837 371.5,362.0137 C383.29,341.1637 388.055,319.8024 390.625,301.9524 " fill="none" id="Command handler-to-Web socket adapter" style="stroke:#181818;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="391.48,296.0137,386.2383,304.3518,390.7675,300.9626,394.1566,305.4918,391.48,296.0137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="30.3608" x="400.5886" y="341.042">Send</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="62.1499" x="386.5" y="358.333">notification</text></g><!--link Command handler to Action--><g id="link_Command handler_Action"><path d="M407.11,411.0137 C448.11,411.0137 489.72,411.0137 522.35,411.0137 " fill="none" id="Command handler-to-Action" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="528.35,411.0137,519.35,407.0137,523.35,411.0137,519.35,415.0137,528.35,411.0137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85.2744" x="425.25" y="404.042">Execute action</text></g><!--reverse link Command handler to Action--><g id="link_Command handler_Action"><path d="M364.0713,430.7741 C400.7713,447.1141 455.2,464.6437 505.75,450.0137 C522.31,445.2237 538.71,434.5137 550.43,425.5237 " fill="none" id="Command handler-backto-Action" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="358.59,428.3337,365.1849,435.6485,363.1577,430.3674,368.4389,428.3401,358.59,428.3337" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="45.519" x="443.4041" y="429.042">Returns</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="74.439" x="430.75" y="446.333">event builder</text></g><!--link Command handler to Event handler--><g id="link_Command handler_Event handler"><path d="M327.14,430.1737 C331.49,459.7337 340.57,520.0937 349.5,571.0137 C353.24,592.3437 356.8961,610.9816 360.0461,626.6316 " fill="none" id="Command handler-to-Event handler" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="361.23,632.5137,363.3755,622.9013,360.2434,627.612,355.5328,624.4799,361.23,632.5137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50.5781" x="389.8904" y="528.542">Dispatch</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="31.8018" x="399.2786" y="545.833">event</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="132.9707" x="350.5" y="563.124">(send an event builder)</text></g><!--link Command handler to Event--><g id="link_Command handler_Event"><path d="M286.29,428.0337 C272.73,435.6837 258.79,446.2337 250.5,460.0137 C240.7,476.2937 239.1004,491.9827 240.0104,508.5227 " fill="none" id="Command handler-to-Event" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="240.34,514.5137,243.8395,505.3075,240.0653,509.5212,235.8516,505.747,240.34,514.5137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="53.479" x="251.5" y="475.042">&#171;Create&#187;</text></g><!--link Event handler to Event store--><g id="link_Event handler_Event store"><path d="M355.9,666.6537 C342.53,691.7437 319.7604,734.4779 306.6004,759.1879 " fill="none" id="Event handler-to-Event store" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="303.78,764.4837,311.5411,758.4203,306.1303,760.0705,304.4801,754.6597,303.78,764.4837" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="339.5" y="712.042">Publish</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="31.8018" x="346.7236" y="729.333">event</text></g><!--reverse link Event handler to Reaction listener--><g id="link_Event handler_Reaction listener"><path d="M389.5732,669.496 C422.0432,694.086 480.61,738.4437 513.9,763.6537 " fill="none" id="Event handler-backto-Reaction listener" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="384.79,665.8737,389.5498,674.496,388.776,668.8923,394.3796,668.1184,384.79,665.8737" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="50.5781" x="475.8418" y="712.042">Dispatch</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="59.2617" x="475.1118" y="729.333">new event</text></g><!--reverse link Version builder to Event handler--><g id="link_Version builder_Event handler"><path d="M161.12,649.5137 C203.52,649.5137 250.35,649.5137 292.34,649.5137 " fill="none" id="Version builder-backto-Event handler" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="155.12,649.5137,164.12,653.5137,160.12,649.5137,164.12,645.5137,155.12,649.5137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="101.1689" x="173.25" y="642.542">build next version</text></g><!--reverse link Event stream to Event store--><g id="link_Event stream_Event store"><path d="M203.8,781.0137 C215.25,781.0137 220.7,781.0137 232.15,781.0137 " fill="none" id="Event stream-backto-Event store" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="197.8,781.0137,206.8,785.0137,202.8,781.0137,206.8,777.0137,197.8,781.0137" style="stroke:#181818;stroke-width:1.0;"/></g><!--link Event store to Event bus--><g id="link_Event store_Event bus"><path d="M291.83,797.6337 C281.68,840.7537 254.7236,955.303 244.5636,998.503 " fill="none" id="Event store-to-Event bus" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="243.19,1004.3437,249.1442,996.4985,244.3347,999.4765,241.3567,994.6669,243.19,1004.3437" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="270.5" y="916.042">Publish</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="31.8018" x="277.7236" y="933.333">event</text></g><!--link Event stream to Postgresql--><g id="link_Event stream_Postgresql"><path d="M126.5,797.6137 C126.5,821.4737 126.5,861.1837 126.5,888.9037 " fill="none" id="Event stream-to-Postgresql" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="126.5,894.9037,130.5,885.9037,126.5,889.9037,122.5,885.9037,126.5,894.9037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="39.73" x="127.5" y="844.042">Persist</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="31.8018" x="133.27" y="861.333">event</text></g><!--link Event bus to RabbitMQ--><g id="link_Event bus_RabbitMQ"><path d="M261.67,1005.6637 C275.8,996.8437 294.89,986.6137 313.5,982.0137 C340.68,975.2937 349.69,973.9537 376.5,982.0137 C392.49,986.8237 403.4654,993.7622 414.6254,1002.7422 " fill="none" id="Event bus-to-RabbitMQ" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="419.3,1006.5037,414.7958,997.7451,415.4045,1003.3691,409.7805,1003.9779,419.3,1006.5037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="322" y="955.042">Publish</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="31.8018" x="329.2236" y="972.333">event</text></g><!--link Event bus to RabbitMQ--><g id="link_Event bus_RabbitMQ"><path d="M296.19,1021.0137 C327.4,1021.0137 359.44,1021.0137 387.88,1021.0137 " fill="none" id="Event bus-to-RabbitMQ-1" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="393.88,1021.0137,384.88,1017.0137,388.88,1021.0137,384.88,1025.0137,393.88,1021.0137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="314.5" y="997.042">Subscribe</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="46.2554" x="322.0823" y="1014.333">to event</text></g><!--reverse link Event bus to RabbitMQ--><g id="link_Event bus_RabbitMQ"><path d="M280.8918,1035.6576 C292.9118,1039.3776 300.77,1041.1637 313.5,1043.0137 C341.21,1047.0437 348.94,1047.9837 376.5,1043.0137 C385.21,1041.4437 394.32,1038.6637 402.7,1035.5937 " fill="none" id="Event bus-backto-RabbitMQ" style="stroke:#181818;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="275.16,1033.8837,282.5751,1040.3657,279.9365,1035.3619,284.9403,1032.7233,275.16,1033.8837" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="61.4136" x="314.5" y="1039.042">Emit event</text></g><!--link Reaction listener to Projection bus--><g id="link_Reaction listener_Projection bus"><path d="M534.27,799.0137 C532.85,830.1137 533.7,897.1737 562.5,943.0137 C580.62,971.8537 608.5228,990.242 633.5528,1002.982 " fill="none" id="Reaction listener-to-Projection bus" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="638.9,1005.7037,632.6936,998.0564,634.444,1003.4356,629.0648,1005.186,638.9,1005.7037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="563.5" y="924.542">Subscribe</text></g><!--reverse link Reaction listener to Projection bus--><g id="link_Reaction listener_Projection bus"><path d="M555.8185,803.1357 C575.4785,824.1557 604.47,857.6437 625.5,895.0137 C646.14,931.6937 660.68,979.3937 667.37,1003.9137 " fill="none" id="Reaction listener-backto-Projection bus" style="stroke:#181818;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="551.72,798.7537,554.9464,808.0591,555.1354,802.4054,560.7891,802.5944,551.72,798.7537" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85.979" x="649.5" y="924.542">Emit projection</text></g><!--reverse link Projection bus to Projection repository--><g id="link_Projection bus_Projection repository"><path d="M656.7068,1042.8562 C624.8968,1087.6662 538.29,1209.6837 503.99,1258.0037 " fill="none" id="Projection bus-backto-Projection repository" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="660.18,1037.9637,651.7086,1042.9871,657.2857,1042.0408,658.232,1047.618,660.18,1037.9637" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="601.5591" y="1145.042">Publish</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="596.5" y="1162.333">projection</text></g><!--reverse link RabbitMQ to Projection bus--><g id="link_RabbitMQ_Projection bus"><path d="M473.7906,1004.361 C482.1306,1001.291 485.57,1000.5837 494.25,999.0137 C532.3,992.1237 542.86,994.4037 581.25,999.0137 C595.98,1000.7837 611.78,1004.1237 625.98,1007.6737 " fill="none" id="RabbitMQ-backto-Projection bus" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="468.16,1006.4337,477.9877,1007.0784,472.8522,1004.7064,475.2242,999.5709,468.16,1006.4337" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="514.8091" y="972.042">Publish</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="509.75" y="989.333">projection</text></g><!--reverse link RabbitMQ to Projection bus--><g id="link_RabbitMQ_Projection bus"><path d="M458.8707,1039.0194 C471.5207,1048.0094 484.24,1055.2437 501.75,1060.0137 C550.47,1073.2937 607.86,1052.6437 641.88,1036.6937 " fill="none" id="RabbitMQ-backto-Projection bus-1" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="453.98,1035.5437,458.999,1044.0177,458.0556,1038.4401,463.6333,1037.4967,453.98,1035.5437" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="507.4504" y="1039.042">Subscribe</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="70.8208" x="502.75" y="1056.333">to projection</text></g><!--link RabbitMQ to Projection bus--><g id="link_RabbitMQ_Projection bus"><path d="M477.15,1021.0137 C510.63,1021.0137 552.48,1021.0137 592.32,1021.0137 " fill="none" id="RabbitMQ-to-Projection bus" style="stroke:#181818;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="598.32,1021.0137,589.32,1017.0137,593.32,1021.0137,589.32,1025.0137,598.32,1021.0137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="85.979" x="495.25" y="1014.042">Emit projection</text></g><!--reverse link Event bus to Projection repository--><g id="link_Event bus_Projection repository"><path d="M248.564,1042.9434 C260.914,1070.6334 286.98,1124.2437 322.5,1166.0137 C350.74,1199.2237 362.2,1203.8737 398.5,1228.0137 C416.13,1239.7337 436.86,1250.9837 454.18,1259.7337 " fill="none" id="Event bus-backto-Projection repository" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="246.12,1037.4637,246.1329,1047.3125,248.1567,1042.0301,253.4391,1044.0539,246.12,1037.4637" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="323.5" y="1153.542">Subscribe</text></g><!--link Event bus to Projection repository--><g id="link_Event bus_Projection repository"><path d="M263,1036.1137 C293.41,1055.0637 347.03,1090.9037 385.5,1130.0137 C425.74,1170.9337 459.0532,1223.3007 476.5132,1252.7907 " fill="none" id="Event bus-to-Projection repository" style="stroke:#181818;stroke-width:1.0;stroke-dasharray:7.0,7.0;"/><polygon fill="#181818" points="479.57,1257.9537,478.4268,1248.1714,477.0227,1253.6512,471.5428,1252.2471,479.57,1257.9537" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="61.4136" x="418.5" y="1153.542">Emit event</text></g><!--link Projection repository to Redis--><g id="link_Projection repository_Redis"><path d="M495.4,1298.4237 C497.41,1307.3737 499.51,1318.1637 500.5,1328.0137 C502.11,1343.9337 501.95,1348.0837 500.5,1364.0137 C499.56,1374.3637 498.7973,1379.7883 496.8873,1389.4183 " fill="none" id="Projection repository-to-Redis" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="495.72,1395.3037,501.3945,1387.2538,496.6927,1390.3992,493.5474,1385.6974,495.72,1395.3037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="39.73" x="510.0127" y="1343.042">Persist</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="503.5" y="1360.333">projection</text></g><!--reverse link Projection repository to Redis--><g id="link_Projection repository_Redis"><path d="M458.8991,1300.9429 C449.0991,1309.1029 443.76,1315.8237 438.5,1328.0137 C432.16,1342.7037 432.55,1349.1637 438.5,1364.0137 C443.51,1376.5137 452.9,1387.7837 462.35,1396.7837 " fill="none" id="Projection repository-backto-Redis" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="463.51,1297.1037,454.0342,1299.7886,459.6676,1300.3031,459.1532,1305.9365,463.51,1297.1037" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="20.9536" x="455.4009" y="1343.042">Get</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="439.5" y="1360.333">projection</text></g><!--link Projection repository to Projection builder--><g id="link_Projection repository_Projection builder"><path d="M578.16,1278.0137 C607.94,1278.0137 635.05,1278.0137 664.22,1278.0137 " fill="none" id="Projection repository-to-Projection builder" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="670.22,1278.0137,661.22,1274.0137,665.22,1278.0137,661.22,1282.0137,670.22,1278.0137" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="28.9072" x="608.1741" y="1254.042">Build</text><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="56.3672" x="596.25" y="1271.333">projection</text></g><!--link Projection builder to Projection--><g id="link_Projection builder_Projection"><path d="M750.5,1296.6837 C750.5,1321.3137 750.5,1360.0837 750.5,1387.9537 " fill="none" id="Projection builder-to-Projection" style="stroke:#181818;stroke-width:1.0;"/><polygon fill="#181818" points="750.5,1393.9537,754.5,1384.9537,750.5,1388.9537,746.5,1384.9537,750.5,1393.9537" style="stroke:#181818;stroke-width:1.0;"/><text fill="#000000" font-family="sans-serif" font-size="13" lengthAdjust="spacing" textLength="110.5698" x="751.5" y="1351.542">&#171;create projection&#187;</text></g><!--SRC=[ZLRBRjim4BppAnRfeGvGoOScAI8O0XmdRGzjaJXeUyc5aZSs6pqSaaeJ5Fttyg479L5kZC08o9dTsTabwRSxAVSYci_t6IrabMTXMkRpIc2GKlMrONJBQKx8dgOFT8lm1RTORE0F0VLHC8s2sKs5dA4uXZSVpixVhqxwkzUy_8MfP6MX4SkBivFLUHznzOI5r9kd7vUNfsVaBo4qbIK7-2wG4xN9v0leB2zjYcPrLUOvLP8QRhriGWuNEoMj3hAXaYPQ1LoNGcuvYiVCMLpZXWdoM665MZAiQP8m-VM6a4Ozp7vY0g9C7r02tT2zHDwLqg4QeJlrbNaWSvWjZJOVsPOpHLM07yY5hYkfMBRnGsmCeNp5GziSQJwzdrJ2ftoDrFgQCI6nS0KuACV_JcVTY2wHW-AuBmLJYb_-0xIocfwwfXUIbvarhPaSFLGGnFL0HR1OfAfeYN5CcYOj0ZDw_KtB2nIp5pU2JwhpTyM-bMEHYo0O0jSeArw8FfZqG47zYIUDyEHhI_BEOWIt-j3U5QcjZdXHTLs38NqTDmp3k37Cu8jIidkMKYF-hfWXv-eugpzHfIaASMog7kJIGGuNu8Rr1D0LD6SeWgjdJ2k9O2VJ0rTDTk1TRx2UT3EXlZJ6gi6HZE2IYJsLwQwDeEeMMZSje1Vos1iphkyiFNAhPkJ8C8sJkZx94LnNYJfsRTuHnmoYvuJs94E1lw7cZouJxTIeNhEhQCyIdYo1gFuW72tJnufnPJnagf7lLF2jwgRSeGLRBsgAtjL6g5trlmsfaHPq15HOMpxRlDzK0Z9Si0NszRNErIu56TvBrpjppGr1ZhlcHXbxImRtf6Pq3uScwBg473R3X5FOvlsORfi7ULib8kKiGOML9OpXYz25N-MiTbd9zVHzTBlKjRPflAn56Ff89bdlDXjYzF1CNcMT2KwCjfO1TTIJrtC65lg8OVow-bpVzKrze3h7KOSLXeSkzrxt9b2wWUQNIM_W79LJH6LEmniz8fF9Ol_B7S65EQw3nym7DQUaM-zULSVPEFu7]--></g></svg>