mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-04-05 10:09:03 +00:00
1 line
140 KiB
XML
1 line
140 KiB
XML
<?plantuml 1.2026.1?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="SEQUENCE" height="5135px" preserveAspectRatio="none" style="width:2431px;height:5135px;background:#FFFFFF;" version="1.1" viewBox="0 0 2431 5135" width="2431px" zoomAndPan="magnify"><title>User Authentication Flow - Expanded</title><defs/><g><text fill="#000000" font-family="Arial" font-size="22" font-weight="bold" lengthAdjust="spacing" textLength="389.9199" x="1019.3079" y="35.6357">User Authentication Flow - Expanded</text><rect fill="#ADD8E6" height="5069.8369" style="stroke:#000000;stroke-width:1;" width="592.5679" x="418.0186" y="52.2979"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="84.5635" x="672.0208" y="64.4917">Service Layer</text><rect fill="#90EE90" height="5069.8369" style="stroke:#000000;stroke-width:1;" width="652.2212" x="1022.5864" y="52.2979"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="122.8208" x="1287.2866" y="64.4917">Infrastructure Layer</text><rect fill="#FFFFE0" height="5069.8369" style="stroke:#000000;stroke-width:1;" width="261.8613" x="1738.6289" y="52.2979"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="106.2026" x="1816.4583" y="64.4917">Repository Layer</text><g><title>API</title><rect fill="#FFFFFF" height="2984.6919" style="stroke:#000000;stroke-width:1;" width="10" x="282.5137" y="233.29"/></g><g><title>API</title><rect fill="#FFFFFF" height="1566.5195" style="stroke:#000000;stroke-width:1;" width="10" x="282.5137" y="3296.8281"/></g><g><title>RegisterService</title><rect fill="#FFFFFF" height="2479.2222" style="stroke:#000000;stroke-width:1;" width="10" x="483.4253" y="511.3237"/></g><g><title>LoginService</title><rect fill="#FFFFFF" height="1213.6396" style="stroke:#000000;stroke-width:1;" width="10" x="617.3008" y="3465.1694"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="310.3335" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="1676.563"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="166.6411" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="2015.8452"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="86.8462" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="4417.3218"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="86.8462" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="4533.1167"/></g><g><title>EmailService</title><rect fill="#FFFFFF" height="713.3159" style="stroke:#000000;stroke-width:1;" width="10" x="943.7417" y="2226.3838"/></g><g><title>Argon2</title><rect fill="#FFFFFF" height="252.436" style="stroke:#000000;stroke-width:1;" width="10" x="1079.8242" y="870.2549"/></g><g><title>Argon2</title><rect fill="#FFFFFF" height="264.4873" style="stroke:#000000;stroke-width:1;" width="10" x="1079.8242" y="4027.3906"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="237.4873" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="1720.4604"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="93.7949" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="2059.7427"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="4446.2705"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="4562.0654"/></g><g><title>Email</title><rect fill="#FFFFFF" height="333.436" style="stroke:#000000;stroke-width:1;" width="10" x="1443.3013" y="2479.8198"/></g><g><title>Template</title><rect fill="#FFFFFF" height="180.5898" style="stroke:#000000;stroke-width:1;" width="10" x="1619.6284" y="2270.2813"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="72.8462" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="540.2725"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="72.8462" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="642.0674"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="466.0771" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="1181.5371"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="129.7437" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="3494.1182"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="137.6924" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="3764.2544"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="584.1699"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="685.9648"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="408.1797" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="1210.4858"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="85.8462" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="3538.0156"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="93.7949" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="3808.1519"/></g><rect fill="#FFFFFF" height="2811.0508" style="stroke:#000000;stroke-width:1;" width="2295.5869" x="35" y="399.9312"/><rect fill="#FFFFFF" height="2750.2046" style="stroke:none;stroke-width:1;" width="2295.5869" x="35" y="460.7773"/><rect fill="#FFFFFF" height="2474.0684" style="stroke:#000000;stroke-width:1;" width="2275.5869" x="45" y="729.9136"/><rect fill="#FFFFFF" height="2369.3247" style="stroke:none;stroke-width:1;" width="2275.5869" x="45" y="834.6572"/><rect fill="#FFFFFF" height="104.4438" style="stroke:#000000;stroke-width:1;" width="604.5679" x="412.0186" y="2828.2559"/><rect fill="#FFFFFF" height="58.5464" style="stroke:none;stroke-width:1;" width="604.5679" x="412.0186" y="2874.1533"/><rect fill="#FFFFFF" height="1487.6221" style="stroke:#000000;stroke-width:1;" width="2399.5356" x="15" y="3368.7256"/><rect fill="#FFFFFF" height="1426.7759" style="stroke:none;stroke-width:1;" width="2399.5356" x="15" y="3429.5718"/><rect fill="#FFFFFF" height="1210.4858" style="stroke:#000000;stroke-width:1;" width="2379.5356" x="25" y="3638.8618"/><rect fill="#FFFFFF" height="1120.6909" style="stroke:none;stroke-width:1;" width="2379.5356" x="25" y="3728.6567"/><rect fill="#FFFFFF" height="925.4009" style="stroke:#000000;stroke-width:1;" width="1351.5679" x="35" y="3916.9468"/><rect fill="#FFFFFF" height="850.5547" style="stroke:none;stroke-width:1;" width="1351.5679" x="35" y="3991.793"/><rect fill="#FFFFFF" height="528.4697" style="stroke:#000000;stroke-width:1;" width="1301.02" x="45" y="4306.8779"/><rect fill="#FFFFFF" height="453.6235" style="stroke:none;stroke-width:1;" width="1301.02" x="45" y="4381.7241"/><g class="participant-lifeline" data-entity-uid="part1" data-qualified-name="User" id="part1-lifeline"><g><title>User</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="68.7793" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="72" x2="72" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part2" data-qualified-name="API" id="part2-lifeline"><g><title>API</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="283.5137" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="287.1689" x2="287.1689" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part3" data-qualified-name="RegSvc" id="part3-lifeline"><g><title>RegisterService</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="484.4253" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="488.0186" x2="488.0186" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part4" data-qualified-name="LoginSvc" id="part4-lifeline"><g><title>LoginService</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="618.3008" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="621.832" x2="621.832" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part5" data-qualified-name="TokenSvc" id="part5-lifeline"><g><title>TokenService</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="817.1006" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="820.3042" x2="820.3042" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part6" data-qualified-name="EmailSvc" id="part6-lifeline"><g><title>EmailService</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="944.7417" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="947.897" x2="947.897" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part7" data-qualified-name="Argon2" id="part7-lifeline"><g><title>Argon2</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="1080.8242" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="1084.5864" x2="1084.5864" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part8" data-qualified-name="JWT" id="part8-lifeline"><g><title>JWT</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="1273.7822" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="1277.5444" x2="1277.5444" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part9" data-qualified-name="SMTP" id="part9-lifeline"><g><title>Email</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="1444.3013" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="1448.2358" x2="1448.2358" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part10" data-qualified-name="Template" id="part10-lifeline"><g><title>Template</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="1620.6284" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="1624.4492" x2="1624.4492" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part11" data-qualified-name="AuthRepo" id="part11-lifeline"><g><title>AuthRepository</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="1803.4873" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="1806.6289" x2="1806.6289" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part12" data-qualified-name="UserRepo" id="part12-lifeline"><g><title>UserAccount</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="1935.418" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="1939.3457" x2="1939.3457" y1="129.4951" y2="5040.9375"/></g></g><g class="participant-lifeline" data-entity-uid="part13" data-qualified-name="DB" id="part13-lifeline"><g><title>SQL Server</title><rect fill="#000000" fill-opacity="0.00000" height="4911.4424" width="8" x="2109.937" y="129.4951"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:5,5;" x1="2113.5718" x2="2113.5718" y1="129.4951" y2="5040.9375"/></g></g><g class="participant participant-head" data-entity-uid="part1" data-qualified-name="User" id="part1-head"><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="29.5586" x="55" y="126.5283">User</text><ellipse cx="72.7793" cy="61.3965" fill="#FFFFFF" rx="8" ry="8" style="stroke:#000000;stroke-width:1;"/><path d="M72.7793,69.3965 L72.7793,96.3965 M59.7793,77.3965 L85.7793,77.3965 M72.7793,96.3965 L59.7793,111.3965 M72.7793,96.3965 L85.7793,111.3965" fill="none" style="stroke:#000000;stroke-width:1;"/></g><g class="participant participant-tail" data-entity-uid="part1" data-qualified-name="User" id="part1-tail"><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="29.5586" x="55" y="5053.0693">User</text><ellipse cx="72.7793" cy="5065.0361" fill="#FFFFFF" rx="8" ry="8" style="stroke:#000000;stroke-width:1;"/><path d="M72.7793,5073.0361 L72.7793,5100.0361 M59.7793,5081.0361 L85.7793,5081.0361 M72.7793,5100.0361 L59.7793,5115.0361 M72.7793,5100.0361 L85.7793,5115.0361" fill="none" style="stroke:#000000;stroke-width:1;"/></g><g class="participant participant-head" data-entity-uid="part2" data-qualified-name="API" id="part2-head"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="74.6895" x="250.1689" y="82.2979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="22.5654" x="276.231" y="102.4297">API</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="60.6895" x="257.1689" y="118.5283">Controller</text></g><g class="participant participant-tail" data-entity-uid="part2" data-qualified-name="API" id="part2-tail"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="74.6895" x="250.1689" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="22.5654" x="276.231" y="5060.0693">API</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="60.6895" x="257.1689" y="5076.168">Controller</text></g><g class="participant participant-head" data-entity-uid="part3" data-qualified-name="RegSvc" id="part3-head"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="112.8135" x="432.0186" y="98.3965"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="98.8135" x="439.0186" y="118.5283">RegisterService</text></g><g class="participant participant-tail" data-entity-uid="part3" data-qualified-name="RegSvc" id="part3-tail"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="112.8135" x="432.0186" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="98.8135" x="439.0186" y="5060.0693">RegisterService</text></g><g class="participant participant-head" data-entity-uid="part4" data-qualified-name="LoginSvc" id="part4-head"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="94.9375" x="574.832" y="98.3965"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="80.9375" x="581.832" y="118.5283">LoginService</text></g><g class="participant participant-tail" data-entity-uid="part4" data-qualified-name="LoginSvc" id="part4-tail"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="94.9375" x="574.832" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="80.9375" x="581.832" y="5060.0693">LoginService</text></g><g class="participant participant-head" data-entity-uid="part5" data-qualified-name="TokenSvc" id="part5-head"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="99.5928" x="771.3042" y="98.3965"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="85.5928" x="778.3042" y="118.5283">TokenService</text></g><g class="participant participant-tail" data-entity-uid="part5" data-qualified-name="TokenSvc" id="part5-tail"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="99.5928" x="771.3042" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="85.5928" x="778.3042" y="5060.0693">TokenService</text></g><g class="participant participant-head" data-entity-uid="part6" data-qualified-name="EmailSvc" id="part6-head"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="95.6895" x="900.897" y="98.3965"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="81.6895" x="907.897" y="118.5283">EmailService</text></g><g class="participant participant-tail" data-entity-uid="part6" data-qualified-name="EmailSvc" id="part6-tail"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="95.6895" x="900.897" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="81.6895" x="907.897" y="5060.0693">EmailService</text></g><g class="participant participant-head" data-entity-uid="part7" data-qualified-name="Argon2" id="part7-head"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="96.4756" x="1036.5864" y="82.2979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="45.1445" x="1062.252" y="102.4297">Argon2</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="82.4756" x="1043.5864" y="118.5283">Infrastructure</text></g><g class="participant participant-tail" data-entity-uid="part7" data-qualified-name="Argon2" id="part7-tail"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="96.4756" x="1036.5864" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="45.1445" x="1062.252" y="5060.0693">Argon2</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="82.4756" x="1043.5864" y="5076.168">Infrastructure</text></g><g class="participant participant-head" data-entity-uid="part8" data-qualified-name="JWT" id="part8-head"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="96.4756" x="1229.5444" y="82.2979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="28.7656" x="1263.3994" y="102.4297">JWT</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="82.4756" x="1236.5444" y="118.5283">Infrastructure</text></g><g class="participant participant-tail" data-entity-uid="part8" data-qualified-name="JWT" id="part8-tail"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="96.4756" x="1229.5444" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="28.7656" x="1263.3994" y="5060.0693">JWT</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="82.4756" x="1236.5444" y="5076.168">Infrastructure</text></g><g class="participant participant-head" data-entity-uid="part9" data-qualified-name="SMTP" id="part9-head"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="66.1309" x="1415.2358" y="82.2979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="35.0068" x="1430.7979" y="102.4297">Email</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="52.1309" x="1422.2358" y="118.5283">Provider</text></g><g class="participant participant-tail" data-entity-uid="part9" data-qualified-name="SMTP" id="part9-tail"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="66.1309" x="1415.2358" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="35.0068" x="1430.7979" y="5060.0693">Email</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="52.1309" x="1422.2358" y="5076.168">Provider</text></g><g class="participant participant-head" data-entity-uid="part10" data-qualified-name="Template" id="part10-head"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="72.3584" x="1588.4492" y="82.2979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="58.3584" x="1595.4492" y="102.4297">Template</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="52.1309" x="1598.563" y="118.5283">Provider</text></g><g class="participant participant-tail" data-entity-uid="part10" data-qualified-name="Template" id="part10-tail"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="72.3584" x="1588.4492" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="58.3584" x="1595.4492" y="5060.0693">Template</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="52.1309" x="1598.563" y="5076.168">Provider</text></g><g class="participant participant-head" data-entity-uid="part11" data-qualified-name="AuthRepo" id="part11-head"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="109.7168" x="1752.6289" y="98.3965"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="95.7168" x="1759.6289" y="118.5283">AuthRepository</text></g><g class="participant participant-tail" data-entity-uid="part11" data-qualified-name="AuthRepo" id="part11-tail"><rect fill="#FFFFFF" height="30.0986" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="109.7168" x="1752.6289" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="95.7168" x="1759.6289" y="5060.0693">AuthRepository</text></g><g class="participant participant-head" data-entity-uid="part12" data-qualified-name="UserRepo" id="part12-head"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="94.1445" x="1892.3457" y="82.2979"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="80.1445" x="1899.3457" y="102.4297">UserAccount</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="66.917" x="1905.9595" y="118.5283">Repository</text></g><g class="participant participant-tail" data-entity-uid="part12" data-qualified-name="UserRepo" id="part12-tail"><rect fill="#FFFFFF" height="46.1973" rx="2.5" ry="2.5" style="stroke:#000000;stroke-width:1;" width="94.1445" x="1892.3457" y="5039.9375"/><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="80.1445" x="1899.3457" y="5060.0693">UserAccount</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="66.917" x="1905.9595" y="5076.168">Repository</text></g><g class="participant participant-head" data-entity-uid="part13" data-qualified-name="DB" id="part13-head"><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="73.1377" x="2074.3682" y="110.4297">SQL Server</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="116.7305" x="2052.5718" y="126.5283">Stored Procedures</text><path d="M2095.937,61.2979 C2095.937,51.2979 2113.937,51.2979 2113.937,51.2979 C2113.937,51.2979 2131.937,51.2979 2131.937,61.2979 L2131.937,87.2979 C2131.937,97.2979 2113.937,97.2979 2113.937,97.2979 C2113.937,97.2979 2095.937,97.2979 2095.937,87.2979 L2095.937,61.2979" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M2095.937,61.2979 C2095.937,71.2979 2113.937,71.2979 2113.937,71.2979 C2113.937,71.2979 2131.937,71.2979 2131.937,61.2979" fill="none" style="stroke:#000000;stroke-width:1;"/></g><g class="participant participant-tail" data-entity-uid="part13" data-qualified-name="DB" id="part13-tail"><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="73.1377" x="2074.3682" y="5053.0693">SQL Server</text><text fill="#000000" font-family="Arial" font-size="14" lengthAdjust="spacing" textLength="116.7305" x="2052.5718" y="5069.168">Stored Procedures</text><path d="M2095.937,5082.1348 C2095.937,5072.1348 2113.937,5072.1348 2113.937,5072.1348 C2113.937,5072.1348 2131.937,5072.1348 2131.937,5082.1348 L2131.937,5108.1348 C2131.937,5118.1348 2113.937,5118.1348 2113.937,5118.1348 C2113.937,5118.1348 2095.937,5118.1348 2095.937,5108.1348 L2095.937,5082.1348" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M2095.937,5082.1348 C2095.937,5092.1348 2113.937,5092.1348 2113.937,5092.1348 C2113.937,5092.1348 2131.937,5092.1348 2131.937,5082.1348" fill="none" style="stroke:#000000;stroke-width:1;"/></g><g><title>API</title><rect fill="#FFFFFF" height="2984.6919" style="stroke:#000000;stroke-width:1;" width="10" x="282.5137" y="233.29"/></g><g><title>API</title><rect fill="#FFFFFF" height="1566.5195" style="stroke:#000000;stroke-width:1;" width="10" x="282.5137" y="3296.8281"/></g><g><title>RegisterService</title><rect fill="#FFFFFF" height="2479.2222" style="stroke:#000000;stroke-width:1;" width="10" x="483.4253" y="511.3237"/></g><g><title>LoginService</title><rect fill="#FFFFFF" height="1213.6396" style="stroke:#000000;stroke-width:1;" width="10" x="617.3008" y="3465.1694"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="310.3335" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="1676.563"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="166.6411" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="2015.8452"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="86.8462" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="4417.3218"/></g><g><title>TokenService</title><rect fill="#FFFFFF" height="86.8462" style="stroke:#000000;stroke-width:1;" width="10" x="816.1006" y="4533.1167"/></g><g><title>EmailService</title><rect fill="#FFFFFF" height="713.3159" style="stroke:#000000;stroke-width:1;" width="10" x="943.7417" y="2226.3838"/></g><g><title>Argon2</title><rect fill="#FFFFFF" height="252.436" style="stroke:#000000;stroke-width:1;" width="10" x="1079.8242" y="870.2549"/></g><g><title>Argon2</title><rect fill="#FFFFFF" height="264.4873" style="stroke:#000000;stroke-width:1;" width="10" x="1079.8242" y="4027.3906"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="237.4873" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="1720.4604"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="93.7949" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="2059.7427"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="4446.2705"/></g><g><title>JWT</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="1272.7822" y="4562.0654"/></g><g><title>Email</title><rect fill="#FFFFFF" height="333.436" style="stroke:#000000;stroke-width:1;" width="10" x="1443.3013" y="2479.8198"/></g><g><title>Template</title><rect fill="#FFFFFF" height="180.5898" style="stroke:#000000;stroke-width:1;" width="10" x="1619.6284" y="2270.2813"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="72.8462" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="540.2725"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="72.8462" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="642.0674"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="466.0771" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="1181.5371"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="129.7437" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="3494.1182"/></g><g><title>AuthRepository</title><rect fill="#FFFFFF" height="137.6924" style="stroke:#000000;stroke-width:1;" width="10" x="1802.4873" y="3764.2544"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="584.1699"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="28.9487" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="685.9648"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="408.1797" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="1210.4858"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="85.8462" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="3538.0156"/></g><g><title>SQL Server</title><rect fill="#FFFFFF" height="93.7949" style="stroke:#000000;stroke-width:1;" width="10" x="2108.937" y="3808.1519"/></g><rect fill="#FFFFFF" height="3" style="stroke:#FFFFFF;stroke-width:1;" width="2419.5356" x="5" y="159.9695"/><line style="stroke:#000000;stroke-width:0.5;" x1="5" x2="2424.5356" y1="159.9695" y2="159.9695"/><line style="stroke:#000000;stroke-width:0.5;" x1="5" x2="2424.5356" y1="162.9695" y2="162.9695"/><rect fill="#FFFFFF" height="22.9487" style="stroke:#000000;stroke-width:1;" width="126.6709" x="1151.4324" y="149.4951"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="109.0591" x="1157.4324" y="165.689">Registration Flow</text><g class="message" data-entity-1="part1" data-entity-2="part2" id="msg1"><polygon fill="#000000" points="270.5137,229.29,280.5137,233.29,270.5137,237.29,274.5137,233.29" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="72.7793" x2="276.5137" y1="233.29" y2="233.29"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.3945" x="109.7266" y="198.6377">POST</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="145.1211" y="198.6377"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="96.8335" x="148.7329" y="198.6377">/api/auth/register</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="65.7617" x="82.2793" y="213.5864">{username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="148.041" y="213.5864"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.23" x="151.6528" y="213.5864">firstName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="210.8828" y="213.5864"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="58.519" x="214.4946" y="213.5864">lastName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="34.6772" x="92.0229" y="228.5352">email,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="126.7002" y="228.5352"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="69.3672" x="130.312" y="228.5352">dateOfBirth,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="199.6792" y="228.5352"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.979" x="203.291" y="228.5352">password}</text></g><path d="M297,246.29 L297,330.29 L740,330.29 L740,256.29 L730,246.29 L297,246.29" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M730,246.29 L730,256.29 L740,256.29 L730,246.29" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="125.7407" x="303" y="263.4839">FluentValidation runs:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="259.0288" x="303" y="278.4326">- Username: 3-64 chars, alphanumeric + [._-]</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="207.3462" x="303" y="293.3813">- Email: valid format, max 128 chars</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="422.6841" x="303" y="308.3301">- Password: min 8 chars, uppercase,\n lowercase, number, special char</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="211.3452" x="303" y="323.2788">- DateOfBirth: must be 19+ years old</text><g class="message" data-entity-1="part2" data-entity-2="part2" id="msg2"><line style="stroke:#000000;stroke-width:1;" x1="292.5137" x2="334.5137" y1="371.9312" y2="371.9312"/><line style="stroke:#000000;stroke-width:1;" x1="334.5137" x2="334.5137" y1="371.9312" y2="384.9312"/><line style="stroke:#000000;stroke-width:1;" x1="293.5137" x2="334.5137" y1="384.9312" y2="384.9312"/><polygon fill="#000000" points="303.5137,380.9312,293.5137,384.9312,303.5137,388.9312,299.5137,384.9312" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="46.979" x="303.481" y="352.2275">Validate</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="350.46" y="352.2275"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="43.3608" x="354.0718" y="352.2275">request</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="101.8862" x="299.5137" y="367.1763">(FluentValidation)</text></g><path d="M35,399.9312 L95.1709,399.9312 L95.1709,406.8799 L85.1709,416.8799 L35,416.8799 L35,399.9312" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="2811.0508" style="stroke:#000000;stroke-width:1;" width="2295.5869" x="35" y="399.9312"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="50" y="413.125">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="84.9546" x="110.1709" y="412.249">[Validation fails]</text><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg3"><polygon fill="#000000" points="83.7793,448.7773,73.7793,452.7773,83.7793,456.7773,79.7793,452.7773" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="452.7773" y2="452.7773"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="127.4143" y="433.0737">400</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="149.1042" y="433.0737"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.1309" x="152.7161" y="433.0737">Bad</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="175.8469" y="433.0737"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="48.4199" x="179.4587" y="433.0737">Request</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.9009" x="142.9597" y="448.0225">{errors:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="184.8606" y="448.0225"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.8608" x="188.4724" y="448.0225">{...}}</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="35" x2="2330.5869" y1="461.7773" y2="461.7773"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="113.0884" x="40" y="472.0952">[Validation succeeds]</text><g class="message" data-entity-1="part2" data-entity-2="part3" id="msg4"><polygon fill="#000000" points="471.4253,507.3237,481.4253,511.3237,471.4253,515.3237,475.4253,511.3237" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="292.5137" x2="477.4253" y1="511.3237" y2="511.3237"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="164.0107" x="305.9641" y="491.6201">RegisterAsync(userAccount,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.9663" x="357.9863" y="506.5688">password)</text></g><g class="message" data-entity-1="part3" data-entity-2="part11" id="msg5"><polygon fill="#000000" points="1790.4873,536.2725,1800.4873,540.2725,1790.4873,544.2725,1794.4873,540.2725" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="1796.4873" y1="540.2725" y2="540.2725"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="225.4053" x="1035.2537" y="535.5176">GetUserByUsernameAsync(username)</text></g><g class="message" data-entity-1="part11" data-entity-2="part13" id="msg6"><polygon fill="#000000" points="2096.937,580.1699,2106.937,584.1699,2096.937,588.1699,2100.937,584.1699" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1812.4873" x2="2102.937" y1="584.1699" y2="584.1699"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1943.0117" y="564.4663">EXEC</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="198.7007" x="1861.3618" y="579.415">usp_GetUserAccountByUsername</text></g><g class="message" data-entity-1="part13" data-entity-2="part11" id="msg7"><polygon fill="#000000" points="1818.4873,609.1187,1808.4873,613.1187,1818.4873,617.1187,1814.4873,613.1187" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="1812.4873" x2="2112.937" y1="613.1187" y2="613.1187"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.2363" x="1894.0808" y="608.3638">null</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1914.3171" y="608.3638"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="29.6182" x="1917.929" y="608.3638">(user</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1947.5471" y="608.3638"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.5137" x="1951.1589" y="608.3638">doesn't</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1992.6726" y="608.3638"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0591" x="1996.2844" y="608.3638">exist)</text></g><g class="message" data-entity-1="part3" data-entity-2="part11" id="msg8"><polygon fill="#000000" points="1790.4873,638.0674,1800.4873,642.0674,1790.4873,646.0674,1794.4873,642.0674" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="1796.4873" y1="642.0674" y2="642.0674"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="171.2026" x="1062.355" y="637.3125">GetUserByEmailAsync(email)</text></g><g class="message" data-entity-1="part11" data-entity-2="part13" id="msg9"><polygon fill="#000000" points="2096.937,681.9648,2106.937,685.9648,2096.937,689.9648,2100.937,685.9648" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1812.4873" x2="2102.937" y1="685.9648" y2="685.9648"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1943.0117" y="666.2612">EXEC</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="171.2407" x="1875.0918" y="681.21">usp_GetUserAccountByEmail</text></g><g class="message" data-entity-1="part13" data-entity-2="part11" id="msg10"><polygon fill="#000000" points="1818.4873,710.9136,1808.4873,714.9136,1818.4873,718.9136,1814.4873,714.9136" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="1812.4873" x2="2112.937" y1="714.9136" y2="714.9136"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.2363" x="1891.1926" y="710.1587">null</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1911.429" y="710.1587"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.3945" x="1915.0408" y="710.1587">(email</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1950.4353" y="710.1587"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.5137" x="1954.0471" y="710.1587">doesn't</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1995.5608" y="710.1587"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0591" x="1999.1726" y="710.1587">exist)</text></g><path d="M45,729.9136 L105.1709,729.9136 L105.1709,736.8623 L95.1709,746.8623 L45,746.8623 L45,729.9136" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="2474.0684" style="stroke:#000000;stroke-width:1;" width="2275.5869" x="45" y="729.9136"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="60" y="743.1074">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="140.019" x="120.1709" y="742.2314">[User/Email already exists]</text><g class="message" data-entity-1="part3" data-entity-2="part2" id="msg11"><polygon fill="#000000" points="303.5137,763.811,293.5137,767.811,303.5137,771.811,299.5137,767.811" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="297.5137" x2="482.4253" y1="767.811" y2="767.811"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.7891" x="320.0496" y="763.0562">throw</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="351.8386" y="763.0562"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="100.439" x="355.4504" y="763.0562">ConflictException</text></g><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg12"><polygon fill="#000000" points="83.7793,822.6572,73.7793,826.6572,83.7793,830.6572,79.7793,826.6572" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="826.6572" y2="826.6572"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="143.3215" y="792.0049">409</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="165.0115" y="792.0049"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="43.3481" x="168.6233" y="792.0049">Conflict</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="64.5811" x="97.3074" y="806.9536">"Username</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="161.8884" y="806.9536"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="11.5591" x="165.5002" y="806.9536">or</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="177.0593" y="806.9536"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0654" x="180.6711" y="806.9536">email</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="211.7366" y="806.9536"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="215.3484" y="806.9536">already</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="37.8447" x="158.7241" y="821.9023">exists"</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="45" x2="2320.5869" y1="835.6572" y2="835.6572"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="101.6426" x="50" y="845.9751">[User doesn't exist]</text><g class="message" data-entity-1="part3" data-entity-2="part7" id="msg13"><polygon fill="#000000" points="1067.8242,866.2549,1077.8242,870.2549,1067.8242,874.2549,1071.8242,870.2549" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="1073.8242" y1="870.2549" y2="870.2549"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="94.6436" x="739.303" y="865.5">Hash(password)</text></g><path d="M1094,883.2549 L1094,982.2549 L1256,982.2549 L1256,893.2549 L1246,883.2549 L1094,883.2549" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1246,883.2549 L1246,893.2549 L1256,893.2549 L1246,883.2549" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="125.0107" x="1100" y="900.4487">Argon2id parameters:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="138.728" x="1100" y="915.3975">- Salt: 16 bytes (128-bit)</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="96.0718" x="1100" y="930.3462">- Memory: 64MB</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="75.8672" x="1100" y="945.2949">- Iterations: 4</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="141.5972" x="1100" y="960.2437">- Parallelism: CPU count</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="134.4116" x="1100" y="975.1924">- Hash output: 32 bytes</text><g class="message" data-entity-1="part7" data-entity-2="part7" id="msg14"><line style="stroke:#000000;stroke-width:1;" x1="1089.8242" x2="1131.8242" y1="1023.8447" y2="1023.8447"/><line style="stroke:#000000;stroke-width:1;" x1="1131.8242" x2="1131.8242" y1="1023.8447" y2="1036.8447"/><line style="stroke:#000000;stroke-width:1;" x1="1090.8242" x2="1131.8242" y1="1036.8447" y2="1036.8447"/><polygon fill="#000000" points="1100.8242,1032.8447,1090.8242,1036.8447,1100.8242,1040.8447,1096.8242,1036.8447" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="54.2026" x="1096.8242" y="1004.1411">Generate</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1151.0269" y="1004.1411"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="44.0781" x="1154.6387" y="1004.1411">random</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1198.7168" y="1004.1411"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.23" x="1202.3286" y="1004.1411">salt</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="18.7891" x="1130.7905" y="1019.0898">(16</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1149.5796" y="1019.0898"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1153.1914" y="1019.0898">bytes)</text></g><g class="message" data-entity-1="part7" data-entity-2="part7" id="msg15"><line style="stroke:#000000;stroke-width:1;" x1="1089.8242" x2="1131.8242" y1="1080.7422" y2="1080.7422"/><line style="stroke:#000000;stroke-width:1;" x1="1131.8242" x2="1131.8242" y1="1080.7422" y2="1093.7422"/><line style="stroke:#000000;stroke-width:1;" x1="1090.8242" x2="1131.8242" y1="1093.7422" y2="1093.7422"/><polygon fill="#000000" points="1100.8242,1089.7422,1090.8242,1093.7422,1100.8242,1097.7422,1096.8242,1093.7422" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="30.3481" x="1096.8242" y="1061.0386">Hash</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1127.1724" y="1061.0386"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="55.6372" x="1130.7842" y="1061.0386">password</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1186.4214" y="1061.0386"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.1182" x="1190.0332" y="1061.0386">with</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="52.0381" x="1100.4297" y="1075.9873">Argon2id</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1152.4678" y="1075.9873"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="53.4663" x="1156.0796" y="1075.9873">algorithm</text></g><g class="message" data-entity-1="part7" data-entity-2="part3" id="msg16"><polygon fill="#000000" points="504.4253,1118.6909,494.4253,1122.6909,504.4253,1126.6909,500.4253,1122.6909" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="498.4253" x2="1083.8242" y1="1122.6909" y2="1122.6909"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="163.8774" x="707.186" y="1117.936">"base64(salt):base64(hash)"</text></g><g class="message" data-entity-1="part3" data-entity-2="part11" id="msg17"><polygon fill="#000000" points="1790.4873,1177.5371,1800.4873,1181.5371,1790.4873,1185.5371,1794.4873,1181.5371" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="1796.4873" y1="1181.5371" y2="1181.5371"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="115.5845" x="1090.1641" y="1146.8848">RegisterUserAsync(</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="1051.1482" y="1161.8335">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="61.4199" x="1058.3718" y="1161.8335">username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1119.7917" y="1161.8335"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.23" x="1123.4036" y="1161.8335">firstName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1182.6335" y="1161.8335"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="58.519" x="1186.2454" y="1161.8335">lastName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="1072.4509" y="1176.7822">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="34.6772" x="1079.6746" y="1176.7822">email,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1114.3518" y="1176.7822"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="69.3672" x="1117.9636" y="1176.7822">dateOfBirth,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1187.3308" y="1176.7822"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="32.519" x="1190.9426" y="1176.7822">hash)</text></g><g class="message" data-entity-1="part11" data-entity-2="part13" id="msg18"><polygon fill="#000000" points="2096.937,1206.4858,2106.937,1210.4858,2096.937,1214.4858,2100.937,1210.4858" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1812.4873" x2="2102.937" y1="1210.4858" y2="1210.4858"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1886.2986" y="1205.731">EXEC</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1921.6995" y="1205.731"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="109.8145" x="1925.3113" y="1205.731">USP_RegisterUser</text></g><path d="M2123,1223.4858 L2123,1307.4858 L2296,1307.4858 L2296,1233.4858 L2286,1223.4858 L2123,1223.4858" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M2286,1223.4858 L2286,1233.4858 L2296,1233.4858 L2286,1223.4858" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="113.4517" x="2129" y="1240.6797">Transaction begins:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="140.1563" x="2129" y="1255.6284">1. INSERT UserAccount</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="152.439" x="2129" y="1270.5771">2. INSERT UserCredential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="137.2871" x="2139.8354" y="1285.5259">(with hashed password)</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="119.9199" x="2129" y="1300.4746">Transaction commits</text><g class="message" data-entity-1="part13" data-entity-2="part13" id="msg19"><line style="stroke:#000000;stroke-width:1;" x1="2118.937" x2="2160.937" y1="1334.1782" y2="1334.1782"/><line style="stroke:#000000;stroke-width:1;" x1="2160.937" x2="2160.937" y1="1334.1782" y2="1347.1782"/><line style="stroke:#000000;stroke-width:1;" x1="2119.937" x2="2160.937" y1="1347.1782" y2="1347.1782"/><polygon fill="#000000" points="2129.937,1343.1782,2119.937,1347.1782,2129.937,1351.1782,2125.937,1347.1782" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="40.4536" x="2125.937" y="1329.4233">BEGIN</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2166.3906" y="1329.4233"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="93.1709" x="2170.0024" y="1329.4233">TRANSACTION</text></g><g class="message" data-entity-1="part13" data-entity-2="part13" id="msg20"><line style="stroke:#000000;stroke-width:1;" x1="2118.937" x2="2160.937" y1="1420.9731" y2="1420.9731"/><line style="stroke:#000000;stroke-width:1;" x1="2160.937" x2="2160.937" y1="1420.9731" y2="1433.9731"/><line style="stroke:#000000;stroke-width:1;" x1="2119.937" x2="2160.937" y1="1433.9731" y2="1433.9731"/><polygon fill="#000000" points="2129.937,1429.9731,2119.937,1433.9731,2129.937,1437.9731,2125.937,1433.9731" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="47.6709" x="2125.937" y="1371.3721">INSERT</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2173.6079" y="1371.3721"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0527" x="2177.2197" y="1371.3721">INTO</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2208.2725" y="1371.3721"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="74.4199" x="2211.8843" y="1371.3721">UserAccount</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="67.9072" x="2138.5815" y="1386.3208">(Username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2206.4888" y="1386.3208"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="63.5591" x="2210.1006" y="1386.3208">FirstName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="62.8608" x="2174.6902" y="1401.2695">LastName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1182" x="2150.1343" y="1416.2183">Email,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2186.2524" y="1416.2183"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="72.2427" x="2189.8643" y="1416.2183">DateOfBirth)</text></g><g class="message" data-entity-1="part13" data-entity-2="part13" id="msg21"><line style="stroke:#000000;stroke-width:1;" x1="2118.937" x2="2160.937" y1="1477.8706" y2="1477.8706"/><line style="stroke:#000000;stroke-width:1;" x1="2160.937" x2="2160.937" y1="1477.8706" y2="1490.8706"/><line style="stroke:#000000;stroke-width:1;" x1="2119.937" x2="2160.937" y1="1490.8706" y2="1490.8706"/><polygon fill="#000000" points="2129.937,1486.8706,2119.937,1490.8706,2129.937,1494.8706,2125.937,1490.8706" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="53.4409" x="2177.5974" y="1458.167">OUTPUT</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="156.7617" x="2125.937" y="1473.1157">INSERTED.UserAccountID</text></g><g class="message" data-entity-1="part13" data-entity-2="part13" id="msg22"><line style="stroke:#000000;stroke-width:1;" x1="2118.937" x2="2160.937" y1="1534.7681" y2="1534.7681"/><line style="stroke:#000000;stroke-width:1;" x1="2160.937" x2="2160.937" y1="1534.7681" y2="1547.7681"/><line style="stroke:#000000;stroke-width:1;" x1="2119.937" x2="2160.937" y1="1547.7681" y2="1547.7681"/><polygon fill="#000000" points="2129.937,1543.7681,2119.937,1547.7681,2129.937,1551.7681,2125.937,1547.7681" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="47.6709" x="2125.937" y="1515.0645">INSERT</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2173.6079" y="1515.0645"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0527" x="2177.2197" y="1515.0645">INTO</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2208.2725" y="1515.0645"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="86.7026" x="2211.8843" y="1515.0645">UserCredential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="93.2026" x="2146.5161" y="1530.0132">(UserAccountId,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2239.7188" y="1530.0132"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="34.6772" x="2243.3306" y="1530.0132">Hash)</text></g><g class="message" data-entity-1="part13" data-entity-2="part13" id="msg23"><line style="stroke:#000000;stroke-width:1;" x1="2118.937" x2="2160.937" y1="1576.7168" y2="1576.7168"/><line style="stroke:#000000;stroke-width:1;" x1="2160.937" x2="2160.937" y1="1576.7168" y2="1589.7168"/><line style="stroke:#000000;stroke-width:1;" x1="2119.937" x2="2160.937" y1="1589.7168" y2="1589.7168"/><polygon fill="#000000" points="2129.937,1585.7168,2119.937,1589.7168,2129.937,1593.7168,2125.937,1589.7168" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="52.7109" x="2125.937" y="1571.9619">COMMIT</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2178.6479" y="1571.9619"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="93.1709" x="2182.2598" y="1571.9619">TRANSACTION</text></g><g class="message" data-entity-1="part13" data-entity-2="part11" id="msg24"><polygon fill="#000000" points="1823.4873,1614.6655,1813.4873,1618.6655,1823.4873,1622.6655,1819.4873,1618.6655" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="1817.4873" x2="2112.937" y1="1618.6655" y2="1618.6655"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="85.2617" x="1898.1963" y="1613.9106">UserAccountId</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1983.458" y="1613.9106"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.1582" x="1987.0698" y="1613.9106">(GUID)</text></g><g class="message" data-entity-1="part11" data-entity-2="part3" id="msg25"><polygon fill="#000000" points="504.4253,1643.6143,494.4253,1647.6143,504.4253,1651.6143,500.4253,1647.6143" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="498.4253" x2="1806.4873" y1="1647.6143" y2="1647.6143"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="74.4199" x="1095.9045" y="1642.8594">UserAccount</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1170.3245" y="1642.8594"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0718" x="1173.9363" y="1642.8594">entity</text></g><g class="message" data-entity-1="part3" data-entity-2="part5" id="msg26"><polygon fill="#000000" points="804.1006,1672.563,814.1006,1676.563,804.1006,1680.563,808.1006,1676.563" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="810.1006" y1="1676.563" y2="1676.563"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="213.1543" x="548.1858" y="1671.8081">GenerateAccessToken(userAccount)</text></g><g class="message" data-entity-1="part5" data-entity-2="part8" id="msg27"><polygon fill="#000000" points="1260.7822,1716.4604,1270.7822,1720.4604,1260.7822,1724.4604,1264.7822,1720.4604" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="826.1006" x2="1266.7822" y1="1720.4604" y2="1720.4604"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="117.7744" x="958.0383" y="1700.7568">GenerateJwt(userId,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1075.8127" y="1700.7568"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="61.4199" x="1079.4246" y="1700.7568">username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.0063" x="1029.9382" y="1715.7056">expiry)</text></g><path d="M1287,1733.4604 L1287,1847.4604 L1467,1847.4604 L1467,1743.4604 L1457,1733.4604 L1287,1733.4604" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1457,1733.4604 L1457,1743.4604 L1467,1743.4604 L1457,1733.4604" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="111.2617" x="1293" y="1750.6543">JWT Configuration:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="109.8208" x="1293" y="1765.603">- Algorithm: HS256</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="95.3735" x="1293" y="1780.5518">- Expires: 1 hour</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="51.2764" x="1293" y="1795.5005">- Claims:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="72.9854" x="1300.2236" y="1810.4492">* sub: userId</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="152.4897" x="1300.2236" y="1825.3979">* unique_name: username</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="116.3462" x="1300.2236" y="1840.3467">* jti: unique token ID</text><g class="message" data-entity-1="part8" data-entity-2="part8" id="msg28"><line style="stroke:#000000;stroke-width:1;" x1="1282.7822" x2="1324.7822" y1="1874.0503" y2="1874.0503"/><line style="stroke:#000000;stroke-width:1;" x1="1324.7822" x2="1324.7822" y1="1874.0503" y2="1887.0503"/><line style="stroke:#000000;stroke-width:1;" x1="1283.7822" x2="1324.7822" y1="1887.0503" y2="1887.0503"/><polygon fill="#000000" points="1293.7822,1883.0503,1283.7822,1887.0503,1293.7822,1891.0503,1289.7822,1887.0503" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.019" x="1289.7822" y="1869.2954">Create</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1328.8013" y="1869.2954"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="26.7109" x="1332.4131" y="1869.2954">JWT</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1359.124" y="1869.2954"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.1182" x="1362.7358" y="1869.2954">with</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1385.854" y="1869.2954"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.8354" x="1389.4658" y="1869.2954">claims</text></g><g class="message" data-entity-1="part8" data-entity-2="part8" id="msg29"><line style="stroke:#000000;stroke-width:1;" x1="1282.7822" x2="1324.7822" y1="1915.999" y2="1915.999"/><line style="stroke:#000000;stroke-width:1;" x1="1324.7822" x2="1324.7822" y1="1915.999" y2="1928.999"/><line style="stroke:#000000;stroke-width:1;" x1="1283.7822" x2="1324.7822" y1="1928.999" y2="1928.999"/><polygon fill="#000000" points="1293.7822,1924.999,1283.7822,1928.999,1293.7822,1932.999,1289.7822,1928.999" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="26.019" x="1289.7822" y="1911.2441">Sign</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1315.8013" y="1911.2441"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.1182" x="1319.4131" y="1911.2441">with</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1342.5313" y="1911.2441"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1346.1431" y="1911.2441">secret</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1381.5439" y="1911.2441"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.23" x="1385.1558" y="1911.2441">key</text></g><g class="message" data-entity-1="part8" data-entity-2="part5" id="msg30"><polygon fill="#000000" points="837.1006,1953.9478,827.1006,1957.9478,837.1006,1961.9478,833.1006,1957.9478" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="831.1006" x2="1276.7822" y1="1957.9478" y2="1957.9478"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.9009" x="1011.1196" y="1953.1929">Access</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1053.0205" y="1953.1929"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="1056.6323" y="1953.1929">Token</text></g><g class="message" data-entity-1="part5" data-entity-2="part3" id="msg31"><polygon fill="#000000" points="504.4253,1982.8965,494.4253,1986.8965,504.4253,1990.8965,500.4253,1986.8965" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="498.4253" x2="820.1006" y1="1986.8965" y2="1986.8965"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.9009" x="616.4412" y="1982.1416">Access</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="658.342" y="1982.1416"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="661.9539" y="1982.1416">Token</text></g><g class="message" data-entity-1="part3" data-entity-2="part5" id="msg32"><polygon fill="#000000" points="804.1006,2011.8452,814.1006,2015.8452,804.1006,2019.8452,808.1006,2015.8452" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="810.1006" y1="2015.8452" y2="2015.8452"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="216.7725" x="546.3767" y="2011.0903">GenerateRefreshToken(userAccount)</text></g><g class="message" data-entity-1="part5" data-entity-2="part8" id="msg33"><polygon fill="#000000" points="1260.7822,2055.7427,1270.7822,2059.7427,1260.7822,2063.7427,1264.7822,2059.7427" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="826.1006" x2="1266.7822" y1="2059.7427" y2="2059.7427"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="117.7744" x="958.0383" y="2040.0391">GenerateJwt(userId,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1075.8127" y="2040.0391"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="61.4199" x="1079.4246" y="2040.0391">username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.0063" x="1029.9382" y="2054.9878">expiry)</text></g><path d="M1287,2072.7427 L1287,2126.7427 L1500,2126.7427 L1500,2082.7427 L1490,2072.7427 L1287,2072.7427" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1490,2072.7427 L1490,2082.7427 L1500,2082.7427 L1490,2072.7427" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="88.8735" x="1293" y="2089.9365">Refresh Token:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="104.0444" x="1293" y="2104.8853">- Expires: 21 days</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="192.9116" x="1293" y="2119.834">- Same structure as access token</text><g class="message" data-entity-1="part8" data-entity-2="part5" id="msg34"><polygon fill="#000000" points="837.1006,2149.5376,827.1006,2153.5376,837.1006,2157.5376,833.1006,2153.5376" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="831.1006" x2="1276.7822" y1="2153.5376" y2="2153.5376"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="45.519" x="1009.3105" y="2148.7827">Refresh</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1054.8296" y="2148.7827"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="1058.4414" y="2148.7827">Token</text></g><g class="message" data-entity-1="part5" data-entity-2="part3" id="msg35"><polygon fill="#000000" points="504.4253,2178.4863,494.4253,2182.4863,504.4253,2186.4863,500.4253,2182.4863" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="498.4253" x2="820.1006" y1="2182.4863" y2="2182.4863"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="45.519" x="614.6321" y="2177.7314">Refresh</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="660.1511" y="2177.7314"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="663.7629" y="2177.7314">Token</text></g><g class="message" data-entity-1="part3" data-entity-2="part6" id="msg36"><polygon fill="#000000" points="931.7417,2222.3838,941.7417,2226.3838,931.7417,2230.3838,935.7417,2226.3838" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="493.4253" x2="937.7417" y1="2226.3838" y2="2226.3838"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="171.9644" x="632.6013" y="2206.6802">SendRegistrationEmailAsync(</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="620.3218" y="2221.6289">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="74.4199" x="627.5454" y="2221.6289">createdUser,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="701.9653" y="2221.6289"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="111.2681" x="705.5771" y="2221.6289">confirmationToken)</text></g><g class="message" data-entity-1="part6" data-entity-2="part10" id="msg37"><polygon fill="#000000" points="1607.6284,2266.2813,1617.6284,2270.2813,1607.6284,2274.2813,1611.6284,2270.2813" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="953.7417" x2="1613.6284" y1="2270.2813" y2="2270.2813"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="205.188" x="1184.0911" y="2250.5776">RenderUserRegisteredEmailAsync(</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="1202.1597" y="2265.5264">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.23" x="1209.3833" y="2265.5264">firstName,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1268.6133" y="2265.5264"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="98.9854" x="1272.2251" y="2265.5264">confirmationLink)</text></g><path d="M1634,2283.2813 L1634,2367.2813 L1786,2367.2813 L1786,2293.2813 L1776,2283.2813 L1634,2283.2813" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1776,2283.2813 L1776,2293.2813 L1786,2293.2813 L1776,2283.2813" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="109.1099" x="1640" y="2300.4751">Razor Component:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="131.5171" x="1640" y="2315.4238">- Header with branding</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="118.479" x="1640" y="2330.3726">- Welcome message</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="121.3926" x="1640" y="2345.3213">- Confirmation button</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="45.5127" x="1640" y="2360.27">- Footer</text><g class="message" data-entity-1="part10" data-entity-2="part10" id="msg38"><line style="stroke:#000000;stroke-width:1;" x1="1629.6284" x2="1671.6284" y1="2408.9224" y2="2408.9224"/><line style="stroke:#000000;stroke-width:1;" x1="1671.6284" x2="1671.6284" y1="2408.9224" y2="2421.9224"/><line style="stroke:#000000;stroke-width:1;" x1="1630.6284" x2="1671.6284" y1="2421.9224" y2="2421.9224"/><polygon fill="#000000" points="1640.6284,2417.9224,1630.6284,2421.9224,1640.6284,2425.9224,1636.6284,2421.9224" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.6372" x="1636.6284" y="2389.2188">Render</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1679.2656" y="2389.2188"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="34.6772" x="1682.8774" y="2389.2188">Razor</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1717.5547" y="2389.2188"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="64.3208" x="1721.1665" y="2389.2188">component</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="10.8418" x="1686.137" y="2404.1675">to</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1696.9788" y="2404.1675"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.3882" x="1700.5906" y="2404.1675">HTML</text></g><g class="message" data-entity-1="part10" data-entity-2="part6" id="msg39"><polygon fill="#000000" points="964.7417,2446.8711,954.7417,2450.8711,964.7417,2454.8711,960.7417,2450.8711" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="958.7417" x2="1623.6284" y1="2450.8711" y2="2450.8711"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.3882" x="1231.0247" y="2446.1162">HTML</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1266.4128" y="2446.1162"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0654" x="1270.0247" y="2446.1162">email</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1301.0901" y="2446.1162"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.6436" x="1304.7019" y="2446.1162">content</text></g><g class="message" data-entity-1="part6" data-entity-2="part9" id="msg40"><polygon fill="#000000" points="1431.3013,2475.8198,1441.3013,2479.8198,1431.3013,2483.8198,1435.3013,2479.8198" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="953.7417" x2="1437.3013" y1="2479.8198" y2="2479.8198"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="104.7681" x="1103.8652" y="2475.0649">SendAsync(email,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1208.6333" y="2475.0649"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="44.8018" x="1212.2451" y="2475.0649">subject,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1257.0469" y="2475.0649"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="32.519" x="1260.6587" y="2475.0649">body)</text></g><path d="M1458,2492.8198 L1458,2576.8198 L1663,2576.8198 L1663,2502.8198 L1653,2492.8198 L1458,2492.8198" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1653,2492.8198 L1653,2502.8198 L1663,2502.8198 L1653,2492.8198" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="120.6626" x="1464" y="2510.0137">SMTP Configuration:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="184.1899" x="1464" y="2524.9624">- Host: from env (SMTP_HOST)</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="181.3018" x="1464" y="2539.9111">- Port: from env (SMTP_PORT)</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="90.3018" x="1464" y="2554.8599">- TLS: StartTLS</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="158.9644" x="1464" y="2569.8086">- Auth: username/password</text><g class="message" data-entity-1="part9" data-entity-2="part9" id="msg41"><line style="stroke:#000000;stroke-width:1;" x1="1453.3013" x2="1495.3013" y1="2603.5122" y2="2603.5122"/><line style="stroke:#000000;stroke-width:1;" x1="1495.3013" x2="1495.3013" y1="2603.5122" y2="2616.5122"/><line style="stroke:#000000;stroke-width:1;" x1="1454.3013" x2="1495.3013" y1="2616.5122" y2="2616.5122"/><polygon fill="#000000" points="1464.3013,2612.5122,1454.3013,2616.5122,1464.3013,2620.5122,1460.3013,2616.5122" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.019" x="1460.3013" y="2598.7573">Create</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1499.3203" y="2598.7573"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="33.9409" x="1502.9321" y="2598.7573">MIME</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1536.873" y="2598.7573"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="52.749" x="1540.4849" y="2598.7573">message</text></g><g class="message" data-entity-1="part9" data-entity-2="part9" id="msg42"><line style="stroke:#000000;stroke-width:1;" x1="1453.3013" x2="1495.3013" y1="2645.4609" y2="2645.4609"/><line style="stroke:#000000;stroke-width:1;" x1="1495.3013" x2="1495.3013" y1="2645.4609" y2="2658.4609"/><line style="stroke:#000000;stroke-width:1;" x1="1454.3013" x2="1495.3013" y1="2658.4609" y2="2658.4609"/><polygon fill="#000000" points="1464.3013,2654.4609,1454.3013,2658.4609,1464.3013,2662.4609,1460.3013,2658.4609" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="48.4199" x="1460.3013" y="2640.7061">Connect</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1508.7212" y="2640.7061"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="10.8418" x="1512.333" y="2640.7061">to</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1523.1748" y="2640.7061"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1118" x="1526.7866" y="2640.7061">SMTP</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1562.8984" y="2640.7061"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1182" x="1566.5103" y="2640.7061">server</text></g><g class="message" data-entity-1="part9" data-entity-2="part9" id="msg43"><line style="stroke:#000000;stroke-width:1;" x1="1453.3013" x2="1495.3013" y1="2687.4097" y2="2687.4097"/><line style="stroke:#000000;stroke-width:1;" x1="1495.3013" x2="1495.3013" y1="2687.4097" y2="2700.4097"/><line style="stroke:#000000;stroke-width:1;" x1="1454.3013" x2="1495.3013" y1="2700.4097" y2="2700.4097"/><polygon fill="#000000" points="1464.3013,2696.4097,1454.3013,2700.4097,1464.3013,2704.4097,1460.3013,2700.4097" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="72.2744" x="1460.3013" y="2682.6548">Authenticate</text></g><g class="message" data-entity-1="part9" data-entity-2="part9" id="msg44"><line style="stroke:#000000;stroke-width:1;" x1="1453.3013" x2="1495.3013" y1="2729.3584" y2="2729.3584"/><line style="stroke:#000000;stroke-width:1;" x1="1495.3013" x2="1495.3013" y1="2729.3584" y2="2742.3584"/><line style="stroke:#000000;stroke-width:1;" x1="1454.3013" x2="1495.3013" y1="2742.3584" y2="2742.3584"/><polygon fill="#000000" points="1464.3013,2738.3584,1454.3013,2742.3584,1464.3013,2746.3584,1460.3013,2742.3584" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="30.3608" x="1460.3013" y="2724.6035">Send</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1490.6621" y="2724.6035"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0654" x="1494.2739" y="2724.6035">email</text></g><g class="message" data-entity-1="part9" data-entity-2="part9" id="msg45"><line style="stroke:#000000;stroke-width:1;" x1="1453.3013" x2="1495.3013" y1="2771.3071" y2="2771.3071"/><line style="stroke:#000000;stroke-width:1;" x1="1495.3013" x2="1495.3013" y1="2771.3071" y2="2784.3071"/><line style="stroke:#000000;stroke-width:1;" x1="1454.3013" x2="1495.3013" y1="2784.3071" y2="2784.3071"/><polygon fill="#000000" points="1464.3013,2780.3071,1454.3013,2784.3071,1464.3013,2788.3071,1460.3013,2784.3071" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="64.3081" x="1460.3013" y="2766.5522">Disconnect</text></g><g class="message" data-entity-1="part9" data-entity-2="part6" id="msg46"><polygon fill="#000000" points="964.7417,2809.2559,954.7417,2813.2559,964.7417,2817.2559,960.7417,2813.2559" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="958.7417" x2="1447.3013" y1="2813.2559" y2="2813.2559"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="49.1309" x="1151.1702" y="2808.501">Success</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1200.301" y="2808.501"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1203.9128" y="2808.501">/</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1207.5247" y="2808.501"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.7363" x="1211.1365" y="2808.501">Failure</text></g><path d="M412.0186,2828.2559 L472.1895,2828.2559 L472.1895,2835.2046 L462.1895,2845.2046 L412.0186,2845.2046 L412.0186,2828.2559" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="104.4438" style="stroke:#000000;stroke-width:1;" width="604.5679" x="412.0186" y="2828.2559"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="427.0186" y="2841.4497">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="131.4414" x="487.1895" y="2840.5737">[Email sent successfully]</text><g class="message" data-entity-1="part6" data-entity-2="part3" id="msg47"><polygon fill="#000000" points="504.4253,2862.1533,494.4253,2866.1533,504.4253,2870.1533,500.4253,2866.1533" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="498.4253" x2="942.7417" y1="2866.1533" y2="2866.1533"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="671.0713" y="2861.3984">emailSent</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="728.8794" y="2861.3984"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.5918" x="732.4912" y="2861.3984">=</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="740.083" y="2861.3984"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="22.4009" x="743.6948" y="2861.3984">true</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="412.0186" x2="1016.5864" y1="2875.1533" y2="2875.1533"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="68.46" x="417.0186" y="2885.4712">[Email failed]</text><g class="message" data-entity-1="part6" data-entity-2="part3" id="msg48"><polygon fill="#000000" points="504.4253,2920.6997,494.4253,2924.6997,504.4253,2928.6997,500.4253,2924.6997" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="498.4253" x2="942.7417" y1="2924.6997" y2="2924.6997"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="668.5417" y="2904.9961">emailSent</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="726.3499" y="2904.9961"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.5918" x="729.9617" y="2904.9961">=</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="737.5535" y="2904.9961"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="27.46" x="741.1653" y="2904.9961">false</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.7764" x="665.1204" y="2919.9448">(error</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="696.8967" y="2919.9448"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="71.5381" x="700.5085" y="2919.9448">suppressed)</text></g><g class="message" data-entity-1="part3" data-entity-2="part2" id="msg49"><polygon fill="#000000" points="303.5137,2986.5459,293.5137,2990.5459,303.5137,2994.5459,299.5137,2990.5459" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="297.5137" x2="487.4253" y1="2990.5459" y2="2990.5459"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="135.1035" x="322.9177" y="2955.8936">RegisterServiceReturn(</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="307.0137" y="2970.8423">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="75.8735" x="314.2373" y="2970.8423">userAccount,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="390.1108" y="2970.8423"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.2026" x="393.7227" y="2970.8423">accessToken,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="313.8818" y="2985.791">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.2026" x="321.1055" y="2985.791">refreshToken,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="401.3081" y="2985.791"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="62.1372" x="404.9199" y="2985.791">emailSent)</text></g><g class="message" data-entity-1="part2" data-entity-2="part2" id="msg50"><line style="stroke:#000000;stroke-width:1;" x1="292.5137" x2="334.5137" y1="3019.4946" y2="3019.4946"/><line style="stroke:#000000;stroke-width:1;" x1="334.5137" x2="334.5137" y1="3019.4946" y2="3032.4946"/><line style="stroke:#000000;stroke-width:1;" x1="293.5137" x2="334.5137" y1="3032.4946" y2="3032.4946"/><polygon fill="#000000" points="303.5137,3028.4946,293.5137,3032.4946,303.5137,3036.4946,299.5137,3032.4946" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="39.019" x="299.5137" y="3014.7397">Create</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="338.5327" y="3014.7397"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="53.479" x="342.1445" y="3014.7397">response</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="395.6235" y="3014.7397"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="28.1899" x="399.2354" y="3014.7397">body</text></g><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg51"><polygon fill="#000000" points="83.7793,3191.9819,73.7793,3195.9819,83.7793,3199.9819,79.7793,3195.9819" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="3195.9819" y2="3195.9819"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="141.8711" y="3056.6885">201</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="163.561" y="3056.6885"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="46.249" x="167.1729" y="3056.6885">Created</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="175.4756" y="3071.6372">{</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="97.3074" y="3086.5859">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="56.3608" x="104.531" y="3086.5859">message:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="160.8918" y="3086.5859"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="32.062" x="164.5037" y="3086.5859">"User</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="196.5657" y="3086.5859"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="200.1775" y="3086.5859">registered</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="78.3047" x="138.4941" y="3101.5347">successfully",</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="145.4829" y="3116.4834">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="49.1499" x="152.7065" y="3116.4834">payload:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="201.8564" y="3116.4834"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="205.4683" y="3116.4834">{</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="14.4473" x="94.5493" y="3131.4321">    </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="86.7153" x="108.9966" y="3131.4321">userAccountId,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="195.7119" y="3131.4321"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="61.4199" x="199.3237" y="3131.4321">username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="14.4473" x="88.4143" y="3146.3809">    </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.2026" x="102.8616" y="3146.3809">accessToken,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="183.0642" y="3146.3809"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.2026" x="186.676" y="3146.3809">refreshToken,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="14.4473" x="105.3943" y="3161.3296">    </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="130.0571" x="119.8416" y="3161.3296">confirmationEmailSent</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="171.8638" y="3176.2783">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="179.0874" y="3176.2783">}</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="175.4756" y="3191.2271">}</text></g><rect fill="#FFFFFF" height="3" style="stroke:#FFFFFF;stroke-width:1;" width="2419.5356" x="5" y="3238.4563"/><line style="stroke:#000000;stroke-width:0.5;" x1="5" x2="2424.5356" y1="3238.4563" y2="3238.4563"/><line style="stroke:#000000;stroke-width:0.5;" x1="5" x2="2424.5356" y1="3241.4563" y2="3241.4563"/><rect fill="#FFFFFF" height="22.9487" style="stroke:#000000;stroke-width:1;" width="86.2046" x="1171.6655" y="3227.9819"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="68.5928" x="1177.6655" y="3244.1758">Login Flow</text><g class="message" data-entity-1="part1" data-entity-2="part2" id="msg52"><polygon fill="#000000" points="270.5137,3292.8281,280.5137,3296.8281,270.5137,3300.8281,274.5137,3296.8281" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="72.7793" x2="276.5137" y1="3296.8281" y2="3296.8281"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.3945" x="117.6675" y="3277.1245">POST</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="153.062" y="3277.1245"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.9517" x="156.6738" y="3277.1245">/api/auth/login</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="65.7617" x="112.9702" y="3292.0732">{username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="178.7319" y="3292.0732"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.979" x="182.3438" y="3292.0732">password}</text></g><g class="message" data-entity-1="part2" data-entity-2="part2" id="msg53"><line style="stroke:#000000;stroke-width:1;" x1="292.5137" x2="334.5137" y1="3340.7256" y2="3340.7256"/><line style="stroke:#000000;stroke-width:1;" x1="334.5137" x2="334.5137" y1="3340.7256" y2="3353.7256"/><line style="stroke:#000000;stroke-width:1;" x1="293.5137" x2="334.5137" y1="3353.7256" y2="3353.7256"/><polygon fill="#000000" points="303.5137,3349.7256,293.5137,3353.7256,303.5137,3357.7256,299.5137,3353.7256" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="46.979" x="303.481" y="3321.022">Validate</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="350.46" y="3321.022"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="43.3608" x="354.0718" y="3321.022">request</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="101.8862" x="299.5137" y="3335.9707">(FluentValidation)</text></g><path d="M15,3368.7256 L75.1709,3368.7256 L75.1709,3375.6743 L65.1709,3385.6743 L15,3385.6743 L15,3368.7256" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="1487.6221" style="stroke:#000000;stroke-width:1;" width="2399.5356" x="15" y="3368.7256"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="30" y="3381.9194">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="84.9546" x="90.1709" y="3381.0435">[Validation fails]</text><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg54"><polygon fill="#000000" points="83.7793,3417.5718,73.7793,3421.5718,83.7793,3425.5718,79.7793,3421.5718" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="3421.5718" y2="3421.5718"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="127.4143" y="3401.8682">400</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="149.1042" y="3401.8682"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.1309" x="152.7161" y="3401.8682">Bad</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="175.8469" y="3401.8682"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="48.4199" x="179.4587" y="3401.8682">Request</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.9009" x="142.9597" y="3416.8169">{errors:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="184.8606" y="3416.8169"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.8608" x="188.4724" y="3416.8169">{...}}</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="15" x2="2414.5356" y1="3430.5718" y2="3430.5718"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="113.0884" x="20" y="3440.8896">[Validation succeeds]</text><g class="message" data-entity-1="part2" data-entity-2="part4" id="msg55"><polygon fill="#000000" points="605.3008,3461.1694,615.3008,3465.1694,605.3008,3469.1694,609.3008,3465.1694" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="292.5137" x2="611.3008" y1="3465.1694" y2="3465.1694"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="132.958" x="356.6392" y="3460.4146">LoginAsync(username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="489.5972" y="3460.4146"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.9663" x="493.209" y="3460.4146">password)</text></g><g class="message" data-entity-1="part4" data-entity-2="part11" id="msg56"><polygon fill="#000000" points="1790.4873,3490.1182,1800.4873,3494.1182,1790.4873,3498.1182,1794.4873,3494.1182" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="627.3008" x2="1796.4873" y1="3494.1182" y2="3494.1182"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="225.4053" x="1102.1914" y="3489.3633">GetUserByUsernameAsync(username)</text></g><g class="message" data-entity-1="part11" data-entity-2="part13" id="msg57"><polygon fill="#000000" points="2096.937,3534.0156,2106.937,3538.0156,2096.937,3542.0156,2100.937,3538.0156" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1812.4873" x2="2102.937" y1="3538.0156" y2="3538.0156"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1943.0117" y="3518.312">EXEC</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="198.7007" x="1861.3618" y="3533.2607">usp_GetUserAccountByUsername</text></g><g class="message" data-entity-1="part13" data-entity-2="part13" id="msg58"><line style="stroke:#000000;stroke-width:1;" x1="2118.937" x2="2160.937" y1="3581.9131" y2="3581.9131"/><line style="stroke:#000000;stroke-width:1;" x1="2160.937" x2="2160.937" y1="3581.9131" y2="3594.9131"/><line style="stroke:#000000;stroke-width:1;" x1="2119.937" x2="2160.937" y1="3594.9131" y2="3594.9131"/><polygon fill="#000000" points="2129.937,3590.9131,2119.937,3594.9131,2129.937,3598.9131,2125.937,3594.9131" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="50.5718" x="2140.6667" y="3562.2095">SELECT</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2191.2385" y="3562.2095"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="38.27" x="2194.8503" y="3562.2095">FROM</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2233.1204" y="3562.2095"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="74.4199" x="2236.7322" y="3562.2095">UserAccount</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="48.3882" x="2125.937" y="3577.1582">WHERE</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2174.3252" y="3577.1582"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="59.9663" x="2177.937" y="3577.1582">Username</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2237.9033" y="3577.1582"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.5918" x="2241.5151" y="3577.1582">=</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="2249.1069" y="3577.1582"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="73.1631" x="2252.7188" y="3577.1582">@Username</text></g><g class="message" data-entity-1="part13" data-entity-2="part11" id="msg59"><polygon fill="#000000" points="1818.4873,3619.8618,1808.4873,3623.8618,1818.4873,3627.8618,1814.4873,3623.8618" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="1812.4873" x2="2112.937" y1="3623.8618" y2="3623.8618"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="74.4199" x="1906.1604" y="3619.1069">UserAccount</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1980.5803" y="3619.1069"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0718" x="1984.1921" y="3619.1069">entity</text></g><path d="M25,3638.8618 L85.1709,3638.8618 L85.1709,3645.8105 L75.1709,3655.8105 L25,3655.8105 L25,3638.8618" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="1210.4858" style="stroke:#000000;stroke-width:1;" width="2379.5356" x="25" y="3638.8618"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="40" y="3652.0557">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="85.54" x="100.1709" y="3651.1797">[User not found]</text><g class="message" data-entity-1="part4" data-entity-2="part2" id="msg60"><polygon fill="#000000" points="303.5137,3687.708,293.5137,3691.708,303.5137,3695.708,299.5137,3691.708" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="297.5137" x2="616.3008" y1="3691.708" y2="3691.708"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.7891" x="369.9978" y="3672.0044">throw</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="401.7869" y="3672.0044"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="134.418" x="405.3987" y="3672.0044">UnauthorizedException</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="42.1929" x="363.5835" y="3686.9531">"Invalid</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="405.7764" y="3686.9531"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="57.8081" x="409.3882" y="3686.9531">username</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="467.1963" y="3686.9531"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="11.5591" x="470.8081" y="3686.9531">or</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="482.3672" y="3686.9531"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="60.252" x="485.979" y="3686.9531">password"</text></g><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg61"><polygon fill="#000000" points="83.7793,3716.6567,73.7793,3720.6567,83.7793,3724.6567,79.7793,3720.6567" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="3720.6567" y2="3720.6567"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="126.332" y="3715.9019">401</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="148.022" y="3715.9019"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="77.3271" x="151.6338" y="3715.9019">Unauthorized</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="25" x2="2404.5356" y1="3729.6567" y2="3729.6567"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="65.3823" x="30" y="3739.9746">[User found]</text><g class="message" data-entity-1="part4" data-entity-2="part11" id="msg62"><polygon fill="#000000" points="1790.4873,3760.2544,1800.4873,3764.2544,1790.4873,3768.2544,1794.4873,3764.2544" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="627.3008" x2="1796.4873" y1="3764.2544" y2="3764.2544"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="296.2324" x="1066.7778" y="3759.4995">GetActiveCredentialByUserAccountIdAsync(userId)</text></g><g class="message" data-entity-1="part11" data-entity-2="part13" id="msg63"><polygon fill="#000000" points="2096.937,3804.1519,2106.937,3808.1519,2096.937,3812.1519,2100.937,3808.1519" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="1812.4873" x2="2102.937" y1="3808.1519" y2="3808.1519"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="35.4009" x="1943.0117" y="3788.4482">EXEC</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="277.4497" x="1821.9873" y="3803.397">USP_GetActiveUserCredentialByUserAccountId</text></g><path d="M2123,3821.1519 L2123,3875.1519 L2394,3875.1519 L2394,3831.1519 L2384,3821.1519 L2123,3821.1519" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M2384,3821.1519 L2384,3831.1519 L2394,3831.1519 L2384,3821.1519" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="182.7681" x="2129" y="3838.3457">SELECT FROM UserCredential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="250.5356" x="2129" y="3853.2944">WHERE UserAccountId = @UserAccountId</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="114.5244" x="2136.2236" y="3868.2432">AND IsRevoked = 0</text><g class="message" data-entity-1="part13" data-entity-2="part11" id="msg64"><polygon fill="#000000" points="1818.4873,3897.9468,1808.4873,3901.9468,1818.4873,3905.9468,1814.4873,3901.9468" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="1812.4873" x2="2112.937" y1="3901.9468" y2="3901.9468"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="86.7026" x="1900.019" y="3897.1919">UserCredential</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1986.7217" y="3897.1919"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.0718" x="1990.3335" y="3897.1919">entity</text></g><path d="M35,3916.9468 L95.1709,3916.9468 L95.1709,3923.8955 L85.1709,3933.8955 L35,3933.8955 L35,3916.9468" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="925.4009" style="stroke:#000000;stroke-width:1;" width="1351.5679" x="35" y="3916.9468"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="50" y="3930.1406">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="111.2568" x="110.1709" y="3929.2646">[No active credential]</text><g class="message" data-entity-1="part4" data-entity-2="part2" id="msg65"><polygon fill="#000000" points="303.5137,3950.8442,293.5137,3954.8442,303.5137,3958.8442,299.5137,3954.8442" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="297.5137" x2="616.3008" y1="3954.8442" y2="3954.8442"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.7891" x="369.9978" y="3950.0894">throw</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="401.7869" y="3950.0894"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="134.418" x="405.3987" y="3950.0894">UnauthorizedException</text></g><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg66"><polygon fill="#000000" points="83.7793,3979.793,73.7793,3983.793,83.7793,3987.793,79.7793,3983.793" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="3983.793" y2="3983.793"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="126.332" y="3979.0381">401</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="148.022" y="3979.0381"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="77.3271" x="151.6338" y="3979.0381">Unauthorized</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="35" x2="1386.5679" y1="3992.793" y2="3992.793"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="128.96" x="40" y="4003.1108">[Active credential found]</text><g class="message" data-entity-1="part4" data-entity-2="part7" id="msg67"><polygon fill="#000000" points="1067.8242,4023.3906,1077.8242,4027.3906,1067.8242,4031.3906,1071.8242,4027.3906" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="627.3008" x2="1073.8242" y1="4027.3906" y2="4027.3906"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="96.8081" x="767.9485" y="4022.6357">Verify(password,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="864.7566" y="4022.6357"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="70.8081" x="868.3684" y="4022.6357">storedHash)</text></g><path d="M1094,4040.3906 L1094,4109.3906 L1376,4109.3906 L1376,4050.3906 L1366,4040.3906 L1094,4040.3906" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1366,4040.3906 L1366,4050.3906 L1376,4050.3906 L1366,4040.3906" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="179.772" x="1100" y="4057.5845">1. Split stored hash: "salt:hash"</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="78.749" x="1100" y="4072.5332">2. Extract salt</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="261.5679" x="1100" y="4087.4819">3. Hash provided password\n with same salt</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="166.1816" x="1100" y="4102.4307">4. Constant-time comparison</text><g class="message" data-entity-1="part7" data-entity-2="part7" id="msg68"><line style="stroke:#000000;stroke-width:1;" x1="1089.8242" x2="1131.8242" y1="4136.1343" y2="4136.1343"/><line style="stroke:#000000;stroke-width:1;" x1="1131.8242" x2="1131.8242" y1="4136.1343" y2="4149.1343"/><line style="stroke:#000000;stroke-width:1;" x1="1090.8242" x2="1131.8242" y1="4149.1343" y2="4149.1343"/><polygon fill="#000000" points="1100.8242,4145.1343,1090.8242,4149.1343,1100.8242,4153.1343,1096.8242,4149.1343" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="33.96" x="1096.8242" y="4131.3794">Parse</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1130.7842" y="4131.3794"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.23" x="1134.396" y="4131.3794">salt</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1154.626" y="4131.3794"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="26" x="1158.2378" y="4131.3794">from</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1184.2378" y="4131.3794"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="1187.8496" y="4131.3794">stored</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1223.9805" y="4131.3794"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="28.1899" x="1227.5923" y="4131.3794">hash</text></g><g class="message" data-entity-1="part7" data-entity-2="part7" id="msg69"><line style="stroke:#000000;stroke-width:1;" x1="1089.8242" x2="1131.8242" y1="4193.0317" y2="4193.0317"/><line style="stroke:#000000;stroke-width:1;" x1="1131.8242" x2="1131.8242" y1="4193.0317" y2="4206.0317"/><line style="stroke:#000000;stroke-width:1;" x1="1090.8242" x2="1131.8242" y1="4206.0317" y2="4206.0317"/><polygon fill="#000000" points="1100.8242,4202.0317,1090.8242,4206.0317,1100.8242,4210.0317,1096.8242,4206.0317" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="30.3481" x="1096.8242" y="4173.3281">Hash</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1127.1724" y="4173.3281"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="49.8672" x="1130.7842" y="4173.3281">provided</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1180.6514" y="4173.3281"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="55.6372" x="1184.2632" y="4173.3281">password</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="23.1182" x="1116.3401" y="4188.2769">with</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1139.4583" y="4188.2769"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="53.4727" x="1143.0701" y="4188.2769">extracted</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1196.5427" y="4188.2769"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="20.23" x="1200.1545" y="4188.2769">salt</text></g><g class="message" data-entity-1="part7" data-entity-2="part7" id="msg70"><line style="stroke:#000000;stroke-width:1;" x1="1089.8242" x2="1131.8242" y1="4249.9292" y2="4249.9292"/><line style="stroke:#000000;stroke-width:1;" x1="1131.8242" x2="1131.8242" y1="4249.9292" y2="4262.9292"/><line style="stroke:#000000;stroke-width:1;" x1="1090.8242" x2="1131.8242" y1="4262.9292" y2="4262.9292"/><polygon fill="#000000" points="1100.8242,4258.9292,1090.8242,4262.9292,1100.8242,4266.9292,1096.8242,4262.9292" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="104.7554" x="1100.4456" y="4230.2256">FixedTimeEquals(</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="1096.8242" y="4245.1743">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="60.7026" x="1104.0479" y="4245.1743">computed,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1164.7505" y="4245.1743"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="40.46" x="1168.3623" y="4245.1743">stored)</text></g><g class="message" data-entity-1="part7" data-entity-2="part4" id="msg71"><polygon fill="#000000" points="638.3008,4287.8779,628.3008,4291.8779,638.3008,4295.8779,634.3008,4291.8779" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="632.3008" x2="1083.8242" y1="4291.8779" y2="4291.8779"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="53.4727" x="829.3262" y="4287.123">true/false</text></g><path d="M45,4306.8779 L105.1709,4306.8779 L105.1709,4313.8267 L95.1709,4323.8267 L45,4323.8267 L45,4306.8779" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><rect fill="none" height="528.4697" style="stroke:#000000;stroke-width:1;" width="1301.02" x="45" y="4306.8779"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="15.1709" x="60" y="4320.0718">alt</text><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="97.1899" x="120.1709" y="4319.1958">[Password invalid]</text><g class="message" data-entity-1="part4" data-entity-2="part2" id="msg72"><polygon fill="#000000" points="303.5137,4340.7754,293.5137,4344.7754,303.5137,4348.7754,299.5137,4344.7754" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="297.5137" x2="616.3008" y1="4344.7754" y2="4344.7754"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="31.7891" x="369.9978" y="4340.0205">throw</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="401.7869" y="4340.0205"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="134.418" x="405.3987" y="4340.0205">UnauthorizedException</text></g><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg73"><polygon fill="#000000" points="83.7793,4369.7241,73.7793,4373.7241,83.7793,4377.7241,79.7793,4373.7241" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="4373.7241" y2="4373.7241"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="126.332" y="4368.9692">401</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="148.022" y="4368.9692"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="77.3271" x="151.6338" y="4368.9692">Unauthorized</text></g><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="45" x2="1346.02" y1="4382.7241" y2="4382.7241"/><text fill="#000000" font-family="Arial" font-size="11" font-weight="bold" lengthAdjust="spacing" textLength="87.4146" x="50" y="4393.042">[Password valid]</text><g class="message" data-entity-1="part4" data-entity-2="part5" id="msg74"><polygon fill="#000000" points="804.1006,4413.3218,814.1006,4417.3218,804.1006,4421.3218,808.1006,4417.3218" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="627.3008" x2="810.1006" y1="4417.3218" y2="4417.3218"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="166.1816" x="638.6099" y="4412.5669">GenerateAccessToken(user)</text></g><g class="message" data-entity-1="part5" data-entity-2="part8" id="msg75"><polygon fill="#000000" points="1260.7822,4442.2705,1270.7822,4446.2705,1260.7822,4450.2705,1264.7822,4446.2705" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="826.1006" x2="1266.7822" y1="4446.2705" y2="4446.2705"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="93.1963" x="1002.8433" y="4441.5156">GenerateJwt(...)</text></g><g class="message" data-entity-1="part8" data-entity-2="part5" id="msg76"><polygon fill="#000000" points="837.1006,4471.2192,827.1006,4475.2192,837.1006,4479.2192,833.1006,4475.2192" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="831.1006" x2="1276.7822" y1="4475.2192" y2="4475.2192"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.9009" x="1011.1196" y="4470.4644">Access</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1053.0205" y="4470.4644"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="1056.6323" y="4470.4644">Token</text></g><g class="message" data-entity-1="part5" data-entity-2="part4" id="msg77"><polygon fill="#000000" points="638.3008,4500.168,628.3008,4504.168,638.3008,4508.168,634.3008,4504.168" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="632.3008" x2="820.1006" y1="4504.168" y2="4504.168"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="41.9009" x="683.3789" y="4499.4131">Access</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="725.2798" y="4499.4131"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="728.8916" y="4499.4131">Token</text></g><g class="message" data-entity-1="part4" data-entity-2="part5" id="msg78"><polygon fill="#000000" points="804.1006,4529.1167,814.1006,4533.1167,804.1006,4537.1167,808.1006,4533.1167" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="627.3008" x2="810.1006" y1="4533.1167" y2="4533.1167"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="169.7998" x="636.8008" y="4528.3618">GenerateRefreshToken(user)</text></g><g class="message" data-entity-1="part5" data-entity-2="part8" id="msg79"><polygon fill="#000000" points="1260.7822,4558.0654,1270.7822,4562.0654,1260.7822,4566.0654,1264.7822,4562.0654" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="826.1006" x2="1266.7822" y1="4562.0654" y2="4562.0654"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="93.1963" x="1002.8433" y="4557.3105">GenerateJwt(...)</text></g><g class="message" data-entity-1="part8" data-entity-2="part5" id="msg80"><polygon fill="#000000" points="837.1006,4587.0142,827.1006,4591.0142,837.1006,4595.0142,833.1006,4591.0142" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="831.1006" x2="1276.7822" y1="4591.0142" y2="4591.0142"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="45.519" x="1009.3105" y="4586.2593">Refresh</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="1054.8296" y="4586.2593"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="1058.4414" y="4586.2593">Token</text></g><g class="message" data-entity-1="part5" data-entity-2="part4" id="msg81"><polygon fill="#000000" points="638.3008,4615.9629,628.3008,4619.9629,638.3008,4623.9629,634.3008,4619.9629" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="632.3008" x2="820.1006" y1="4619.9629" y2="4619.9629"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="45.519" x="681.5698" y="4615.208">Refresh</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="727.0889" y="4615.208"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="36.1309" x="730.7007" y="4615.208">Token</text></g><g class="message" data-entity-1="part4" data-entity-2="part2" id="msg82"><polygon fill="#000000" points="303.5137,4674.8091,293.5137,4678.8091,303.5137,4682.8091,299.5137,4678.8091" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;stroke-dasharray:2,2;" x1="297.5137" x2="621.3008" y1="4678.8091" y2="4678.8091"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="118.5044" x="398.155" y="4644.1567">LoginServiceReturn(</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="373.9514" y="4659.1055">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="75.8735" x="381.175" y="4659.1055">userAccount,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="457.0486" y="4659.1055"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.2026" x="460.6604" y="4659.1055">accessToken,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="413.3354" y="4674.0542">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.9199" x="420.5591" y="4674.0542">refreshToken)</text></g><g class="message" data-entity-1="part2" data-entity-2="part1" id="msg83"><polygon fill="#000000" points="83.7793,4823.3477,73.7793,4827.3477,83.7793,4831.3477,79.7793,4827.3477" style="stroke:#000000;stroke-width:1;"/><line style="stroke:#000000;stroke-width:1;" x1="77.7793" x2="281.5137" y1="4827.3477" y2="4827.3477"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="21.6899" x="155.6042" y="4703.0029">200</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="177.2942" y="4703.0029"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="18.7827" x="180.906" y="4703.0029">OK</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="175.4756" y="4717.9517">{</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="113.186" y="4732.9004">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="56.3608" x="120.4097" y="4732.9004">message:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="176.7705" y="4732.9004"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="47.9946" x="180.3823" y="4732.9004">"Logged</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="228.377" y="4732.9004"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="10.1182" x="231.9888" y="4732.9004">in</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="78.3047" x="138.4941" y="4747.8491">successfully",</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="145.4829" y="4762.7979">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="49.1499" x="152.7065" y="4762.7979">payload:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="201.8564" y="4762.7979"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="205.4683" y="4762.7979">{</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="14.4473" x="94.5493" y="4777.7466">    </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="86.7153" x="108.9966" y="4777.7466">userAccountId,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="195.7119" y="4777.7466"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="61.4199" x="199.3237" y="4777.7466">username,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="14.4473" x="90.2202" y="4792.6953">    </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="80.2026" x="104.6675" y="4792.6953">accessToken,</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="3.6118" x="184.8701" y="4792.6953"> </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="76.5908" x="188.4819" y="4792.6953">refreshToken</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="7.2236" x="171.8638" y="4807.644">  </text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="179.0874" y="4807.644">}</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="4.3418" x="175.4756" y="4822.5928">}</text></g><rect fill="#FFFFFF" height="3" style="stroke:#FFFFFF;stroke-width:1;" width="2419.5356" x="5" y="4883.822"/><line style="stroke:#000000;stroke-width:0.5;" x1="5" x2="2424.5356" y1="4883.822" y2="4883.822"/><line style="stroke:#000000;stroke-width:0.5;" x1="5" x2="2424.5356" y1="4886.822" y2="4886.822"/><rect fill="#FFFFFF" height="22.9487" style="stroke:#000000;stroke-width:1;" width="262.4663" x="1083.5347" y="4873.3477"/><text fill="#000000" font-family="Arial" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="244.8545" x="1089.5347" y="4889.5415">Error Handling (Global Exception Filter)</text><path d="M144,4911.2964 L144,5025.2964 L430,5025.2964 L430,4921.2964 L420,4911.2964 L144,4911.2964" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M420,4911.2964 L420,4921.2964 L430,4921.2964 L420,4911.2964" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="175.5825" x="150" y="4928.4902">GlobalExceptionFilter catches:</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="242.8169" x="150" y="4943.439">- ValidationException → 400 Bad Request</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="197.2534" x="150" y="4958.3877">- ConflictException → 409 Conflict</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="228.3506" x="150" y="4973.3364">- NotFoundException → 404 Not Found</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="265.2114" x="150" y="4988.2852">- UnauthorizedException → 401 Unauthorized</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="227.6333" x="150" y="5003.2339">- ForbiddenException → 403 Forbidden</text><text fill="#000000" font-family="Arial" font-size="13" lengthAdjust="spacing" textLength="225.418" x="150" y="5018.1826">- All others → 500 Internal Server Error</text><?plantuml-src pLhfSjl84VxFf-XmVqJCKgUrhbrKAHLAeYHkT30YjKugJBc6m9346Xnm1mDPjCj_ym1vn3n9UWxC0P2IxLGgPfLjOAQdfuzlUheR_frOq2M5LKPIrYhUfMn5E5d2bCJlvZmlMNAMPpc7xoxKpwD8w8oKcRZ8cRWboA77Kv9vymNzhQGifZUqACYSzh9qpY2cJ53kKIt9ao4OfHye71qSj5eY5Hc5Xu9ow9Ke7XDfJ4IQCxZ8ylUm2_sd5M49JLej4WiKJfAsa1_IfJWZeDqR3YRi34NZUPPHtWPI08wrflaJj4UKFwOnXMkobbFVNQVpXJZDIXhokAVpj41f3RdYWMEZnpYakyxdAVE9z42TR9o_em6P7gYJzPSapNmoFO1ab2M0yciT1cp6II5u6OkIrrIvv9IocZtuF6T74nOkqsPHKo7vps_66sbnV8Eq4pRa-MEQ63kFRiR3ckfqYVWIj4PO3OUQtTDLNgJerdMerTzeXjwlgONmSFHQ7JCK4ag4zE8OyImchBP2pgaLbHW94MHA2ef8-SirI5zGFc4ZN40JG0rYcg112hNu_BJLEZa1ZHNkeVJafDLI4DxzeqHU1CExqHZsoIhT9oZYFZVech2F9P8nF49TcAMyKAUf2nanJnD6fP6xW6BHkzbfoiMY2ojI5EzpddoIHo1zn2c5xnRByObBUq4-KqE0yk115B-GB4sqWBnaHOGJkqftkNK4htPV7qEy8Bpe0ibM2yBA9ULf3D_3t_VUxlv3aIjtH_0eMS4ivqiYkl88m-7HZtgn8XiQuI9OfWn-hDYMgnNbCHeMTGByePdCE-1cKygxKAneZ654hL2ipftIoAqi14mf7FxqFQmfyeGyIvJRfDgj5gfhpMtKHMF8E5IWstVgTkXW_CW4U8QPeNfI1SD8MYU2uuC3E2K9-jWm-aWvptaHmSUzlRrFdreqGwnuN8eoZYbDF4OwR4HGXPHUiMRnJkb0wHpQmLNMfIRSu91-KjePW4TmIOMKy7HTUT6nbMy19tiim3vAPkUd4VJ_sZ-3ibYzDVoCI8wjpmVn3lWNx0QIi3BBG6qCIKuBzdi1z0arbI8aD5pilLkXNb9GuKvhfmx3VwsQOlYvUgajlren2J6vzxxQ4ryv9SbQiv4G2LINo1KBZl43BwzPbiQY_nJJbOIL8gq1yoTBDc7jobs0DoBTi5SREIYeFZJyrAhBeUw42Av8iTZnaUcRNTyRSgmMTDm4c1UC5kgwfuXz5NdaRnT6Q9i83b_3T2re0JiOHNQdgUXOWXkwn2WTmUlZcrCxE40cwg3X2JoseqFaZrTzbXRB2Cw63w0yRQUb9f2NObNYZg-Ez8vgreOF9wvlWalAv7Qe7wOSEQOrA3F6aahepfPbQh_ASl0-5Oi9ixOWsJpdEBGC5djneYsldzV7EtApJcHU5iYoqrPBVAXfQzSTQ25SXHm5VtM2PF1zwSe1s7JfA0bgAF2GlkNyFOo6RtqfGWRdfniWT5vvUunMBoGjXjKfyc0MFOTxCBWTzU_7u1riCtSKp9tXjIrpI9APQVpjI8yeVMW28S33JUDykKp51gJ8MA6LFErV3cvXVD-x7VNEneExszgy4MLmExw380_PUR1Uk71Uk7PUw6iVU7TWfyRxxc4yV1YRBVhdUnx_mVaBSZYx656gXKbNmRU-rzdTpSrWl57H0741AzYvV1YST-gebMbJ21WF_Hu3a0AATGFq0UeSxAkKsXrRv8FbXHhtxziQYcqghjnlNYH3J7WThv_V2yL36iWT8FgqIlcwnb0coarOLwCWdrJeJkUbZcKkAFQgu811P7JqmsixqPSRKGnwXx38Isx7px1qMzfp0V07J42c4MX9lT6IfPZ0lDNfNkdkzch-Lv56XWY4j04O20Mubv9NXa446MLLX8DOIT8W6ydAJn4KDEPKm3kwTaI1sxIxz43TwPNrd7yyp3otq7htHRJSqnbQUF7DmSN8fVUAceWuEiH0lIwyYnNJ05STOfr2j7s4jK_JgO55WXs_o1FFhjpcYgh8HR2WO7urvQL-ybgA5UGI6IAw69pn1CaY1EaKvvfPRUciXgitvNfJUafnMQBlfUgEeabjJ--Az7UyJjcxEZ2gYhRfp60ALISVC4qxovUhd66CSpwzmemDqpDrNAOovqZPt4w-eHbUI1IMkcNYGe0d5anB8KowAESkyboOIpVmUING9dCOyU9Al0aJELoDRwvhAmFFoNcJUAAP13NNiU_zoWODVyYUWVQzb-LtPI3xbSPO7Ktpf7vcL9kXQMSx3EfnMvIzoWjC16SSCphA7c57qhwzmXBT9P_3d3T9XdVt7iduUeHI2y85Fha8NifYjJho-rLwqNI14j1gRwBfpU2c7pYuHfKpXYR1awmd2jMUs43ejSusyP6srjxQC7cU5h7UnviCZscf0ye-NE0G1fcwhvKVjCUm0DArJu7owEguA6POMgsDoHmIl3X2TICCLvm0HZAzWQfVD3DPgzFaSpdC2Ax4F4ULxYZ3QeL1gg0cvqDRrEKFOqSLgQeQhTORlASOPvdDh6rHJrpseP9gxjqlNITV8proTRyj-TIs1YB80yybMa8UYsPTU7HmQ2YJ2ViezpLmYdGZ3BYDT84tsah65LbdEKaY-AYxD6MO6TgRJC_w6eRgwNa_OFOhVUNKfmdxrDAMbt_yv4xsiKvET1lryvffcIGDEcdR-cFVMel8SQgwnf5-2divM_f3jjECWzNpDzGZqcj7_Ul-sHWkxkzkmlhdpLN_lczRa7X8_-HnUwwiS5N15_PWPEY5cVogeKvDO3BNUdbW4bIOX7_0LA1glqnOUy1quxFq6YsLMzgRsZE70QkW_QA5Q4hXEwudLQ6kJDFMjcVHUNAGRAlAdotAxHPXDLZRvalAzRgh6wMtSxch48tVmmsLuBVdC2ZkwIF64qbsiBaARw34xRgbV3JoRYqe9LnkSwqqbIbdgCINmAPgWxq030EDNdr77oUrZKsZwHVAqzdQDkamPrBVALm1lxbbzspJJdLNHgii5OQRwfJWxI7xKP5yRblAepqiGp1NnvH4pjhnLtkc1wQ_-BWkYxeNT3MegXH_qV6Up6yAGPZO5IdEoWoKyBImXWoylwdnDYIyq5nrwkOfi7NDDa6Lb5Hh9-zA9sgJnqNwH9Cnojp_hSHSGnShA7s9AokdT6ghWwWlSvnzbQOOgYrDFWtFwXCBf3eeMHD-1JW_1vu6e7PRlUd6NLzkmdJikiqbzOjbDLwg6tYuUlcpMWjRYjf6OUjSz1ABiBfzsIwDTiF_nJ3DWltBBVCYZ-TCKo7L_v3-DHbrPzF6Vegq0Un7cBdT_RcH9kEgEPM7wt-N87j9i5-2w7-VIOlxgeAv8Yp9KZQ7dSiid-95OGyrHg8CS_kEIffLaCyVvV-aK9-2DR6brQI09MAyeEQJiCjI7Sj___DVzHotLVKTWezKXj9zbr9ajxcuaFTOdUnOpi25oSTsDmSfGzk8IRApmQTfWZTbdVQLcshfbce6ELR3l504Fw0c0_d_K1ZQJN_UrrPrdvB_0m00?></g></svg> |