academia/docs/architecture/diagrams/04-components.svg

1 line
51 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" data-diagram-type="DESCRIPTION" height="1612px" preserveAspectRatio="none" style="width:1463px;height:1612px;background:#FFFFFF;" version="1.1" viewBox="0 0 1463 1612" width="1463px" zoomAndPan="magnify"><title>Sistema de Registro de Estudiantes - Arquitectura de Componentes</title><defs/><g><g class="title" data-source-line="9"><text fill="#000000" font-family="Verdana" font-size="22" font-weight="bold" lengthAdjust="spacing" textLength="840.458" x="306.771" y="35.4209">Sistema de Registro de Estudiantes - Arquitectura de Componentes</text></g><!--cluster frontend--><g class="cluster" data-entity="frontend" data-source-line="11" data-uid="ent0002" id="cluster_frontend"><rect fill="#FFFFFF" height="487.19" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="1324" x="109" y="151.8427"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="176.1963" x="682.9019" y="166.8378">Frontend (Angular 21)</text></g><!--cluster Core--><g class="cluster" data-entity="Core" data-source-line="18" data-uid="ent0008" id="cluster_Core"><rect fill="#FFFFFF" height="204.59" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="610" x="260" y="410.4427"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="36.292" x="546.854" y="425.4378">Core</text></g><!--cluster Shared--><g class="cluster" data-entity="Shared" data-source-line="26" data-uid="ent0014" id="cluster_Shared"><rect fill="#FFFFFF" height="97.3" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="586" x="823" y="280.1427"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="55.918" x="1088.041" y="295.1378">Shared</text></g><!--cluster backend--><g class="cluster" data-entity="backend" data-source-line="33" data-uid="ent0018" id="cluster_backend"><rect fill="#FFFFFF" height="918.18" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="1075" x="12" y="688.0327"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="145.3867" x="476.8066" y="703.0278">Backend (.NET 10)</text></g><!--cluster host--><g class="cluster" data-entity="host" data-source-line="35" data-uid="ent0019" id="cluster_host"><rect fill="#FFFFFF" height="97.3" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="314" x="36" y="782.1827"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="36.3604" x="174.8198" y="797.1778">Host</text></g><!--cluster adapters--><g class="cluster" data-entity="adapters" data-source-line="40" data-uid="ent0022" id="cluster_adapters"><rect fill="#FFFFFF" height="292.44" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="689" x="374" y="731.0327"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="71.75" x="682.625" y="746.0278">Adapters</text></g><!--cluster Driving (Primary)--><g class="cluster" data-entity="Driving .Primary." data-source-line="41" data-uid="ent0023" id="cluster_Driving .Primary."><rect fill="#FFFFFF" height="225.44" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="295" x="398" y="774.0327"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="136.9375" x="477.0313" y="789.0278">Driving (Primary)</text></g><!--cluster Driven (Secondary)--><g class="cluster" data-entity="Driven .Secondary." data-source-line="48" data-uid="ent0028" id="cluster_Driven .Secondary."><rect fill="#FFFFFF" height="217.29" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="322" x="717" y="782.1827"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="152.5439" x="801.728" y="797.1778">Driven (Secondary)</text></g><!--cluster application--><g class="cluster" data-entity="application" data-source-line="55" data-uid="ent0032" id="cluster_application"><rect fill="#FFFFFF" height="204.6" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="426" x="330" y="1087.4727"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="89.2979" x="498.3511" y="1102.4678">Application</text></g><!--cluster domain--><g class="cluster" data-entity="domain" data-source-line="63" data-uid="ent0038" id="cluster_domain"><rect fill="#FFFFFF" height="225.14" rx="2.5" ry="2.5" style="stroke:#DEE2E6;stroke-width:1;" width="421" x="623" y="1349.0727"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="60.04" x="803.48" y="1364.0678">Domain</text></g><!--cluster sqlserver--><g class="cluster" data-entity="sqlserver" data-source-line="71" data-uid="ent0043" id="cluster_sqlserver"><path d="M1119,1074.4727 C1119,1064.4727 1282.5,1064.4727 1282.5,1064.4727 C1282.5,1064.4727 1446,1064.4727 1446,1074.4727 L1446,1290.0727 C1446,1300.0727 1282.5,1300.0727 1282.5,1300.0727 C1282.5,1300.0727 1119,1300.0727 1119,1290.0727 L1119,1074.4727" fill="#FFFFFF" style="stroke:#DEE2E6;stroke-width:1;"/><path d="M1119,1074.4727 C1119,1084.4727 1282.5,1084.4727 1282.5,1084.4727 C1282.5,1084.4727 1446,1084.4727 1446,1074.4727" fill="none" style="stroke:#DEE2E6;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="14" font-weight="bold" lengthAdjust="spacing" textLength="131.626" x="1216.687" y="1099.4678">SQL Server 2022</text></g><!--entity app--><g class="entity" data-entity="app" data-source-line="12" data-uid="ent0003" id="entity_app"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="153.0801" x="455.46" y="186.8427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="588.5401" y="191.8427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="586.5401" y="193.8427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="586.5401" y="197.8427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="113.0801" x="470.46" y="219.8378">App Component</text></g><!--entity studentList--><g class="entity" data-entity="studentList" data-source-line="13" data-uid="ent0004" id="entity_studentList"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="124.0342" x="124.98" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="229.0142" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="227.0142" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="227.0142" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="84.0342" x="139.98" y="348.1378">Student List</text></g><!--entity studentForm--><g class="entity" data-entity="studentForm" data-source-line="14" data-uid="ent0005" id="entity_studentForm"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="135.5732" x="284.21" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="399.7832" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="397.7832" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="397.7832" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="95.5732" x="299.21" y="348.1378">Student Form</text></g><!--entity enrollPage--><g class="entity" data-entity="enrollPage" data-source-line="15" data-uid="ent0006" id="entity_enrollPage"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="155.4043" x="454.3" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="589.7043" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="587.7043" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="587.7043" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="115.4043" x="469.3" y="348.1378">Enrollment Page</text></g><!--entity classmates--><g class="entity" data-entity="classmates" data-source-line="16" data-uid="ent0007" id="entity_classmates"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="159.417" x="644.29" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="783.707" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="781.707" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="781.707" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="119.417" x="659.29" y="348.1378">Classmates Page</text></g><!--entity apollo--><g class="entity" data-entity="apollo" data-source-line="19" data-uid="ent0009" id="entity_apollo"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="128.3545" x="422.82" y="552.7327"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="531.1745" y="557.7327"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="529.1745" y="559.7327"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="529.1745" y="563.7327"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="88.3545" x="437.82" y="585.7278">Apollo Client</text></g><!--entity studentSvc--><g class="entity" data-entity="studentSvc" data-source-line="20" data-uid="ent0010" id="entity_studentSvc"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="151.3027" x="276.35" y="445.4427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="407.6527" y="450.4427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="405.6527" y="452.4427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="405.6527" y="456.4427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="111.3027" x="291.35" y="478.4378">Student Service</text></g><!--entity enrollSvc--><g class="entity" data-entity="enrollSvc" data-source-line="21" data-uid="ent0011" id="entity_enrollSvc"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="172.624" x="462.69" y="445.4427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="615.314" y="450.4427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="613.314" y="452.4427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="613.314" y="456.4427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="132.624" x="477.69" y="478.4378">Enrollment Service</text></g><!--entity connSvc--><g class="entity" data-entity="connSvc" data-source-line="22" data-uid="ent0012" id="entity_connSvc"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="183.917" x="670.04" y="445.4427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="833.957" y="450.4427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="831.957" y="452.4427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="831.957" y="456.4427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="143.917" x="685.04" y="478.4378">Connectivity Service</text></g><!--entity errorHandler--><g class="entity" data-entity="errorHandler" data-source-line="23" data-uid="ent0013" id="entity_errorHandler"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="134.2539" x="694.87" y="552.7327"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="809.1239" y="557.7327"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="807.1239" y="559.7327"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="807.1239" y="563.7327"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="94.2539" x="709.87" y="585.7278">Error Handler</text></g><!--entity overlay--><g class="entity" data-entity="overlay" data-source-line="27" data-uid="ent0015" id="entity_overlay"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="186.6035" x="838.7" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1005.3035" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1003.3035" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1003.3035" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="146.6035" x="853.7" y="348.1378">Connectivity Overlay</text></g><!--entity spinner--><g class="entity" data-entity="spinner" data-source-line="28" data-uid="ent0016" id="entity_spinner"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="153.709" x="1060.15" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1193.859" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1191.859" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1191.859" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="113.709" x="1075.15" y="348.1378">Loading Spinner</text></g><!--entity dialog--><g class="entity" data-entity="dialog" data-source-line="29" data-uid="ent0017" id="entity_dialog"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="144.4668" x="1248.77" y="315.1427"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1373.2368" y="320.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1371.2368" y="322.1427"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1371.2368" y="326.1427"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="104.4668" x="1263.77" y="348.1378">Confirm Dialog</text></g><!--entity program--><g class="entity" data-entity="program" data-source-line="36" data-uid="ent0020" id="entity_program"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="119.0645" x="52.47" y="817.1827"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="151.5345" y="822.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="149.5345" y="824.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="149.5345" y="828.1827"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="79.0645" x="67.47" y="850.1778">Program.cs</text></g><!--entity di--><g class="entity" data-entity="di" data-source-line="37" data-uid="ent0021" id="entity_di"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="127.7734" x="206.11" y="817.1827"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="313.8834" y="822.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="311.8834" y="824.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="311.8834" y="828.1827"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="87.7734" x="221.11" y="850.1778">DI Container</text></g><!--entity graphql--><g class="entity" data-entity="graphql" data-source-line="42" data-uid="ent0024" id="entity_graphql"><rect fill="#F8F9FA" height="62.5938" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="145.5537" x="414.22" y="809.0327"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="539.7737" y="814.0327"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="537.7737" y="816.0327"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="537.7737" y="820.0327"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="88.3613" x="429.22" y="842.0278">GraphQL API</text><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="105.5537" x="429.22" y="858.3247">(HotChocolate)</text></g><!--entity query--><g class="entity" data-entity="query" data-source-line="43" data-uid="ent0025" id="entity_query"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="82.5469" x="562.73" y="937.1727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="625.2769" y="942.1727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="623.2769" y="944.1727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="623.2769" y="948.1727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="42.5469" x="577.73" y="970.1678">Query</text></g><!--entity mutation--><g class="entity" data-entity="mutation" data-source-line="44" data-uid="ent0026" id="entity_mutation"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="101.8379" x="426.08" y="937.1727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="507.9179" y="942.1727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="505.9179" y="944.1727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="505.9179" y="948.1727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="61.8379" x="441.08" y="970.1678">Mutation</text></g><!--entity types--><g class="entity" data-entity="types" data-source-line="45" data-uid="ent0027" id="entity_types"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="81.6309" x="595.18" y="817.1827"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="656.8109" y="822.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="654.8109" y="824.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="654.8109" y="828.1827"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="41.6309" x="610.18" y="850.1778">Types</text></g><!--entity repos--><g class="entity" data-entity="repos" data-source-line="49" data-uid="ent0029" id="entity_repos"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="126.584" x="732.71" y="817.1827"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="839.294" y="822.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="837.294" y="824.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="837.294" y="828.1827"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="86.584" x="747.71" y="850.1778">Repositories</text></g><!--entity loaders--><g class="entity" data-entity="loaders" data-source-line="50" data-uid="ent0030" id="entity_loaders"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="128.9219" x="894.54" y="817.1827"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1003.4619" y="822.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1001.4619" y="824.1827"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1001.4619" y="828.1827"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="88.9219" x="909.54" y="850.1778">DataLoaders</text></g><!--entity dbContext--><g class="entity" data-entity="dbContext" data-source-line="51" data-uid="ent0031" id="entity_dbContext"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="114.7578" x="769.62" y="937.1727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="864.3778" y="942.1727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="862.3778" y="944.1727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="862.3778" y="948.1727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="74.7578" x="784.62" y="970.1678">DbContext</text></g><!--entity commands--><g class="entity" data-entity="commands" data-source-line="56" data-uid="ent0033" id="entity_commands"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="119.249" x="475.38" y="1229.7727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="574.629" y="1234.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="572.629" y="1236.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="572.629" y="1240.7727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="79.249" x="490.38" y="1262.7678">Commands</text></g><!--entity queries--><g class="entity" data-entity="queries" data-source-line="57" data-uid="ent0034" id="entity_queries"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="94.0586" x="345.97" y="1229.7727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="420.0286" y="1234.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="418.0286" y="1236.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="418.0286" y="1240.7727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="54.0586" x="360.97" y="1262.7678">Queries</text></g><!--entity handlers--><g class="entity" data-entity="handlers" data-source-line="58" data-uid="ent0035" id="entity_handlers"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="102.4189" x="483.79" y="1122.4727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="566.2089" y="1127.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="564.2089" y="1129.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="564.2089" y="1133.4727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="62.4189" x="498.79" y="1155.4678">Handlers</text></g><!--entity validators--><g class="entity" data-entity="validators" data-source-line="59" data-uid="ent0036" id="entity_validators"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="110.5059" x="629.75" y="1229.7727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="720.2559" y="1234.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="718.2559" y="1236.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="718.2559" y="1240.7727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="70.5059" x="644.75" y="1262.7678">Validators</text></g><!--entity dtos--><g class="entity" data-entity="dtos" data-source-line="60" data-uid="ent0037" id="entity_dtos"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="77.6455" x="641.18" y="1122.4727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="698.8255" y="1127.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="696.8255" y="1129.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="696.8255" y="1133.4727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="37.6455" x="656.18" y="1155.4678">DTOs</text></g><!--entity entities--><g class="entity" data-entity="entities" data-source-line="64" data-uid="ent0039" id="entity_entities"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="92.3838" x="659.81" y="1503.9127"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="732.1938" y="1508.9127"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="730.1938" y="1510.9127"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="730.1938" y="1514.9127"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="52.3838" x="674.81" y="1536.9078">Entities</text></g><!--entity valueObjects--><g class="entity" data-entity="valueObjects" data-source-line="65" data-uid="ent0040" id="entity_valueObjects"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="136.8721" x="787.56" y="1503.9127"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="904.4321" y="1508.9127"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="902.4321" y="1510.9127"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="902.4321" y="1514.9127"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="96.8721" x="802.56" y="1536.9078">Value Objects</text></g><!--entity domainSvc--><g class="entity" data-entity="domainSvc" data-source-line="66" data-uid="ent0041" id="entity_domainSvc"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="157.8105" x="647.09" y="1392.0727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="784.9005" y="1397.0727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="782.9005" y="1399.0727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="782.9005" y="1403.0727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="117.8105" x="662.09" y="1425.0678">Domain Services</text></g><!--entity ports--><g class="entity" data-entity="ports" data-source-line="67" data-uid="ent0042" id="entity_ports"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="160.8936" x="839.55" y="1392.0727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="980.4436" y="1397.0727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="978.4436" y="1399.0727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="978.4436" y="1403.0727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="120.8936" x="854.55" y="1425.0678">Ports (Interfaces)</text></g><!--entity Students--><g class="entity" data-entity="Students" data-source-line="72" data-uid="ent0044" id="entity_Students"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="102.4053" x="1147.8" y="1122.4727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1230.2053" y="1127.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1228.2053" y="1129.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1228.2053" y="1133.4727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="62.4053" x="1162.8" y="1155.4678">Students</text></g><!--entity Subjects--><g class="entity" data-entity="Subjects" data-source-line="73" data-uid="ent0045" id="entity_Subjects"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="99.6299" x="1285.19" y="1122.4727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1364.8199" y="1127.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1362.8199" y="1129.4727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1362.8199" y="1133.4727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="59.6299" x="1300.19" y="1155.4678">Subjects</text></g><!--entity Professors--><g class="entity" data-entity="Professors" data-source-line="74" data-uid="ent0046" id="entity_Professors"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="112.5088" x="1142.75" y="1229.7727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1235.2588" y="1234.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1233.2588" y="1236.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1233.2588" y="1240.7727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="72.5088" x="1157.75" y="1262.7678">Professors</text></g><!--entity Enrollments--><g class="entity" data-entity="Enrollments" data-source-line="75" data-uid="ent0047" id="entity_Enrollments"><rect fill="#F8F9FA" height="46.2969" rx="2.5" ry="2.5" style="stroke:#495057;stroke-width:1;" width="123.7266" x="1290.14" y="1229.7727"/><rect fill="#F8F9FA" height="10" style="stroke:#495057;stroke-width:1;" width="15" x="1393.8666" y="1234.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1391.8666" y="1236.7727"/><rect fill="#F8F9FA" height="2" style="stroke:#495057;stroke-width:1;" width="4" x="1391.8666" y="1240.7727"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="83.7266" x="1305.14" y="1262.7678">Enrollments</text></g><!--entity browser--><g class="entity" data-entity="browser" data-source-line="78" data-uid="ent0048" id="entity_browser"><path d="M498.2898,68.3613 C500.3523,62.8944 505.3151,62.3957 508.6101,67.1123 C512.5063,61.0816 516.7547,60.6099 521.2608,66.463 C523.0949,59.4261 528.8013,57.6094 533.7492,63.4413 C538.2926,59.0393 541.9541,60.5133 543.8811,66.0962 C547.3704,59.8045 553.7192,59.2778 556.9391,66.3593 C560.5007,61.3928 564.3323,61.2162 567.5694,66.6897 C575.4771,70.3933 577.7408,75.8352 571.4627,82.9379 C579.3639,88.5365 577.246,95.0065 569.6677,98.8601 C566.469,104.7256 562.6882,106.1802 557.6303,100.8609 C554.8569,107.3583 550.6798,107.6163 545.729,103.2451 C543.0527,109.898 537.8685,111.4263 532.9884,105.4723 C528.6108,109.9799 523.1731,109.3503 521.0601,102.9875 C516.3008,107.8143 510.0732,106.6127 508.5988,99.5458 C504.6436,105.9628 499.7687,105.1113 496.5453,98.85 C489.4901,96.06 487.9347,88.7556 493.3871,83.4076 C486.7,76.4872 490.7347,70.641 498.2898,68.3613" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="14" lengthAdjust="spacing" textLength="57.0391" x="503.48" y="86.5478">Browser</text></g><g class="entity" data-entity="GMN79" data-source-line="122" data-uid="ent0080" id="entity_GMN79"><path d="M1102.98,1387.5127 L1102.98,1442.9112 L1293.0117,1442.9112 L1293.0117,1397.5127 L1283.0117,1387.5127 L1102.98,1387.5127" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1283.0117,1387.5127 L1283.0117,1397.5127 L1293.0117,1397.5127 L1283.0117,1387.5127" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" font-weight="bold" lengthAdjust="spacing" textLength="169.0317" x="1108.98" y="1404.5796">Regla de Dependencia:</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="131.8916" x="1108.98" y="1419.7124">Domain no depende</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="119.7295" x="1108.98" y="1434.8452">de capas externas</text></g><g class="entity" data-entity="GMN82" data-source-line="128" data-uid="ent0083" id="entity_GMN82"><path d="M1102.99,932.6227 L1102.99,988.0212 L1193.0017,988.0212 L1193.0017,942.6227 L1183.0017,932.6227 L1102.99,932.6227" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><path d="M1183.0017,932.6227 L1183.0017,942.6227 L1193.0017,942.6227 L1183.0017,932.6227" fill="#FFFFFF" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="69.0117" x="1108.99" y="949.6896">Endpoints:</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="63.1211" x="1108.99" y="964.8224">- /graphql</text><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="54.355" x="1108.99" y="979.9552">- /health</text></g><!--link browser to app--><g class="link" data-entity-1="browser" data-entity-2="app" data-source-line="81" data-uid="lnk49" id="link_browser_app"><path d="M532,105.2727 C532,128.2627 532,157.6927 532,180.6127" fill="none" id="browser-to-app" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="532,186.6127,536,177.6127,532,181.6127,528,177.6127,532,186.6127" style="stroke:#000000;stroke-width:1;"/></g><!--link app to studentList--><g class="link" data-entity-1="app" data-entity-2="studentList" data-source-line="82" data-uid="lnk50" id="link_app_studentList"><path d="M455.23,219.2927 C400.59,227.4127 326.59,242.9827 267,272.1427 C245.12,282.8527 228.2695,296.4403 213.1895,310.7003" fill="none" id="app-to-studentList" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="208.83,314.8227,218.1176,311.5454,212.4629,311.3873,212.621,305.7327,208.83,314.8227" style="stroke:#000000;stroke-width:1;"/></g><!--link app to studentForm--><g class="link" data-entity-1="app" data-entity-2="studentForm" data-source-line="83" data-uid="lnk51" id="link_app_studentForm"><path d="M495.45,233.5327 C477.59,244.7927 455.93,258.8327 437,272.1427 C417.69,285.7227 401.3405,298.1591 385.0005,310.9791" fill="none" id="app-to-studentForm" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="380.28,314.6827,389.8298,312.2743,384.2138,311.5964,384.8917,305.9803,380.28,314.6827" style="stroke:#000000;stroke-width:1;"/></g><!--link app to enrollPage--><g class="link" data-entity-1="app" data-entity-2="enrollPage" data-source-line="84" data-uid="lnk52" id="link_app_enrollPage"><path d="M532,233.5727 C532,256.5627 532,285.9927 532,308.9027" fill="none" id="app-to-enrollPage" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="532,314.9027,536,305.9027,532,309.9027,528,305.9027,532,314.9027" style="stroke:#000000;stroke-width:1;"/></g><!--link app to classmates--><g class="link" data-entity-1="app" data-entity-2="classmates" data-source-line="85" data-uid="lnk53" id="link_app_classmates"><path d="M567.3,233.4827 C585.23,244.9627 607.33,259.2127 627,272.1427 C648.36,286.1827 667.2178,298.8245 685.9178,311.4545" fill="none" id="app-to-classmates" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="690.89,314.8127,685.6706,306.4606,686.7465,312.0142,681.1929,313.0902,690.89,314.8127" style="stroke:#000000;stroke-width:1;"/></g><!--link app to overlay--><g class="link" data-entity-1="app" data-entity-2="overlay" data-source-line="86" data-uid="lnk54" id="link_app_overlay"><path d="M608.83,218.0927 C671.58,225.8427 761.58,241.5027 835,272.1427 C860.46,282.7627 881.4937,296.8352 900.0637,311.1152" fill="none" id="app-to-overlay" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="904.82,314.7727,900.1239,306.1156,900.8564,311.7248,895.2472,312.4573,904.82,314.7727" style="stroke:#000000;stroke-width:1;"/></g><!--link studentList to studentSvc--><g class="link" data-entity-1="studentList" data-entity-2="studentSvc" data-source-line="88" data-uid="lnk55" id="link_studentList_studentSvc"><path d="M216.12,361.9327 C246.19,385.3127 288.0925,417.9008 318.1625,441.2708" fill="none" id="studentList-to-studentSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="322.9,444.9527,318.2484,436.2716,318.9521,441.8845,313.3392,442.5882,322.9,444.9527" style="stroke:#000000;stroke-width:1;"/></g><!--link studentForm to studentSvc--><g class="link" data-entity-1="studentForm" data-entity-2="studentSvc" data-source-line="89" data-uid="lnk56" id="link_studentForm_studentSvc"><path d="M352,361.9327 C352,385.3827 352,415.8027 352,439.1727" fill="none" id="studentForm-to-studentSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="352,445.1727,356,436.1727,352,440.1727,348,436.1727,352,445.1727" style="stroke:#000000;stroke-width:1;"/></g><!--link enrollPage to enrollSvc--><g class="link" data-entity-1="enrollPage" data-entity-2="enrollSvc" data-source-line="90" data-uid="lnk57" id="link_enrollPage_enrollSvc"><path d="M535,361.9327 C538.11,385.3827 542.141,415.8548 545.241,439.2248" fill="none" id="enrollPage-to-enrollSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="546.03,445.1727,548.8118,435.7249,545.3725,440.2161,540.8813,436.7769,546.03,445.1727" style="stroke:#000000;stroke-width:1;"/></g><!--link classmates to enrollSvc--><g class="link" data-entity-1="classmates" data-entity-2="enrollSvc" data-source-line="91" data-uid="lnk58" id="link_classmates_enrollSvc"><path d="M693.12,361.9327 C661.23,385.3127 616.5891,418.0354 584.7091,441.4054" fill="none" id="classmates-to-enrollSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="579.87,444.9527,589.4935,442.8578,583.9025,441.9966,584.7637,436.4057,579.87,444.9527" style="stroke:#000000;stroke-width:1;"/></g><!--link overlay to connSvc--><g class="link" data-entity-1="overlay" data-entity-2="connSvc" data-source-line="92" data-uid="lnk59" id="link_overlay_connSvc"><path d="M902,361.9327 C871.02,385.3127 827.7494,417.9686 796.7794,441.3386" fill="none" id="overlay-to-connSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="791.99,444.9527,801.5835,442.7245,795.9812,441.941,796.7647,436.3387,791.99,444.9527" style="stroke:#000000;stroke-width:1;"/></g><!--link studentSvc to apollo--><g class="link" data-entity-1="studentSvc" data-entity-2="apollo" data-source-line="94" data-uid="lnk60" id="link_studentSvc_apollo"><path d="M380.96,492.1727 C403.74,509.9427 430.5889,530.8826 453.3589,548.6426" fill="none" id="studentSvc-to-apollo" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="458.09,552.3327,453.4535,543.6435,454.1474,549.2576,448.5333,549.9516,458.09,552.3327" style="stroke:#000000;stroke-width:1;"/></g><!--link enrollSvc to apollo--><g class="link" data-entity-1="enrollSvc" data-entity-2="apollo" data-source-line="95" data-uid="lnk61" id="link_enrollSvc_apollo"><path d="M535.7,492.1727 C525.24,509.9427 513.7728,529.4015 503.3228,547.1615" fill="none" id="enrollSvc-to-apollo" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="500.28,552.3327,508.2916,546.6044,502.8156,548.0234,501.3966,542.5474,500.28,552.3327" style="stroke:#000000;stroke-width:1;"/></g><!--link connSvc to errorHandler--><g class="link" data-entity-1="connSvc" data-entity-2="errorHandler" data-source-line="96" data-uid="lnk62" id="link_connSvc_errorHandler"><path d="M762,492.1727 C762,509.9427 762,528.5727 762,546.3327" fill="none" id="connSvc-to-errorHandler" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="#000000" points="762,552.3327,766,543.3327,762,547.3327,758,543.3327,762,552.3327" style="stroke:#000000;stroke-width:1;"/></g><!--link apollo to graphql--><g class="link" data-entity-1="apollo" data-entity-2="graphql" data-source-line="99" data-uid="lnk63" id="link_apollo_graphql"><path d="M487,599.2627 C487,646.2427 487,749.2127 487,802.6627" fill="none" id="apollo-to-graphql" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="487,808.6627,491,799.6627,487,803.6627,483,799.6627,487,808.6627" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="95.2275" x="488" y="668.0996">HTTP/GraphQL</text></g><!--link graphql to query--><g class="link" data-entity-1="graphql" data-entity-2="query" data-source-line="101" data-uid="lnk64" id="link_graphql_query"><path d="M517.43,872.0227 C537.61,892.3727 559.4048,914.3527 577.6248,932.7227" fill="none" id="graphql-to-query" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="581.85,936.9827,578.3522,927.7759,578.329,933.4327,572.6722,933.4095,581.85,936.9827" style="stroke:#000000;stroke-width:1;"/></g><!--link graphql to mutation--><g class="link" data-entity-1="graphql" data-entity-2="mutation" data-source-line="102" data-uid="lnk65" id="link_graphql_mutation"><path d="M484.4,872.0227 C482.67,892.3727 480.9577,912.6342 479.3977,931.0042" fill="none" id="graphql-to-mutation" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="478.89,936.9827,483.6372,928.3535,479.3131,932.0007,475.6659,927.6765,478.89,936.9827" style="stroke:#000000;stroke-width:1;"/></g><!--link query to handlers--><g class="link" data-entity-1="query" data-entity-2="handlers" data-source-line="103" data-uid="lnk66" id="link_query_handlers"><path d="M595.54,983.8027 C582.26,1019.0727 558.7946,1081.4277 545.5346,1116.6377" fill="none" id="query-to-handlers" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="543.42,1122.2527,550.3353,1115.2399,545.1822,1117.5735,542.8486,1112.4205,543.42,1122.2527" style="stroke:#000000;stroke-width:1;"/></g><!--link mutation to handlers--><g class="link" data-entity-1="mutation" data-entity-2="handlers" data-source-line="104" data-uid="lnk67" id="link_mutation_handlers"><path d="M484.11,983.8027 C495.27,1019.0727 514.9701,1081.3222 526.1101,1116.5322" fill="none" id="mutation-to-handlers" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="527.92,1122.2527,529.0188,1112.4654,526.4118,1117.4856,521.3915,1114.8786,527.92,1122.2527" style="stroke:#000000;stroke-width:1;"/></g><!--link handlers to validators--><g class="link" data-entity-1="handlers" data-entity-2="validators" data-source-line="105" data-uid="lnk68" id="link_handlers_validators"><path d="M567.18,1169.2127 C592.49,1186.9827 622.6698,1208.1645 647.9598,1225.9245" fill="none" id="handlers-to-validators" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="652.87,1229.3727,647.8035,1220.927,648.7782,1226.4992,643.2059,1227.4739,652.87,1229.3727" style="stroke:#000000;stroke-width:1;"/></g><!--link handlers to commands--><g class="link" data-entity-1="handlers" data-entity-2="commands" data-source-line="106" data-uid="lnk69" id="link_handlers_commands"><path d="M535,1169.2127 C535,1186.9827 535,1205.6127 535,1223.3727" fill="none" id="handlers-to-commands" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="535,1229.3727,539,1220.3727,535,1224.3727,531,1220.3727,535,1229.3727" style="stroke:#000000;stroke-width:1;"/></g><!--link handlers to queries--><g class="link" data-entity-1="handlers" data-entity-2="queries" data-source-line="107" data-uid="lnk70" id="link_handlers_queries"><path d="M504.54,1169.2127 C480.58,1186.9827 452.1795,1208.0389 428.2295,1225.7989" fill="none" id="handlers-to-queries" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="423.41,1229.3727,433.0218,1227.2249,427.4262,1226.3945,428.2567,1220.7989,423.41,1229.3727" style="stroke:#000000;stroke-width:1;"/></g><!--link commands to domainSvc--><g class="link" data-entity-1="commands" data-entity-2="domainSvc" data-source-line="109" data-uid="lnk71" id="link_commands_domainSvc"><path d="M561.96,1276.5427 C598.36,1307.0927 658.2541,1357.3556 694.5841,1387.8456" fill="none" id="commands-to-domainSvc" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="699.18,1391.7027,694.8575,1382.8531,695.3501,1388.4884,689.7147,1388.981,699.18,1391.7027" style="stroke:#000000;stroke-width:1;"/></g><!--link queries to repos--><g class="link" data-entity-1="queries" data-entity-2="repos" data-source-line="110" data-uid="lnk72" id="link_queries_repos"><path d="M384.76,1229.5727 C365.23,1172.2427 323.11,1018.4827 398,932.6227 C441.59,882.6527 629.39,906.2227 693,887.4827 C713.21,881.5227 729.1775,875.0011 747.2075,866.4611" fill="none" id="queries-to-repos" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="752.63,863.8927,742.784,864.1303,748.1113,866.033,746.2085,871.3603,752.63,863.8927" style="stroke:#000000;stroke-width:1;"/></g><!--link domainSvc to entities--><g class="link" data-entity-1="domainSvc" data-entity-2="entities" data-source-line="111" data-uid="lnk73" id="link_domainSvc_entities"><path d="M721.9,1438.7127 C718.45,1457.6627 714.6147,1478.7498 711.1647,1497.6998" fill="none" id="domainSvc-to-entities" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="710.09,1503.6027,715.6373,1495.4647,710.9856,1498.6836,707.7667,1494.0318,710.09,1503.6027" style="stroke:#000000;stroke-width:1;"/></g><!--link domainSvc to valueObjects--><g class="link" data-entity-1="domainSvc" data-entity-2="valueObjects" data-source-line="112" data-uid="lnk74" id="link_domainSvc_valueObjects"><path d="M752.62,1438.7127 C775.05,1457.6627 802.4076,1480.7795 824.8276,1499.7295" fill="none" id="domainSvc-to-valueObjects" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="829.41,1503.6027,825.1185,1494.738,825.5913,1500.3751,819.9543,1500.8479,829.41,1503.6027" style="stroke:#000000;stroke-width:1;"/></g><!--link repos to dbContext--><g class="link" data-entity-1="repos" data-entity-2="dbContext" data-source-line="114" data-uid="lnk75" id="link_repos_dbContext"><path d="M801.9,863.8027 C807.42,884.8027 814.0852,910.1697 819.5952,931.1397" fill="none" id="repos-to-dbContext" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="821.12,936.9427,822.7015,927.2217,819.8493,932.1069,814.9641,929.2547,821.12,936.9427" style="stroke:#000000;stroke-width:1;"/></g><!--link loaders to dbContext--><g class="link" data-entity-1="loaders" data-entity-2="dbContext" data-source-line="115" data-uid="lnk76" id="link_loaders_dbContext"><path d="M933.86,863.8027 C910.37,884.8027 879.9725,911.9732 856.5225,932.9432" fill="none" id="loaders-to-dbContext" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="852.05,936.9427,861.4252,933.9251,855.7771,933.6098,856.0925,927.9617,852.05,936.9427" style="stroke:#000000;stroke-width:1;"/></g><!--link dbContext to sqlserver--><g class="link" data-entity-1="dbContext" data-entity-2="sqlserver" data-source-line="116" data-uid="lnk77" id="link_dbContext_sqlserver"><path d="M884.88,980.9327 C936.66,997.5327 1014.97,1020.3627 1085,1031.4727 C1122.91,1037.4927 1402.41,1021.8027 1430,1048.4727 C1433.7938,1052.1402 1436.775,1056.361 1439.0863,1060.9434 C1439.6641,1062.089 1437.8868,1057.721 1438.3831,1058.9088" fill="none" id="dbContext-to-sqlserver" style="stroke:#000000;stroke-width:1;"/><polygon fill="#000000" points="1440.6963,1064.4449,1440.9173,1054.5986,1438.7687,1059.8315,1433.5358,1057.6828,1440.6963,1064.4449" style="stroke:#000000;stroke-width:1;"/></g><!--link repos to ports--><g class="link" data-entity-1="repos" data-entity-2="ports" data-source-line="119" data-uid="lnk78" id="link_repos_ports"><path d="M828.58,863.7827 C865.32,890.3227 920,934.0627 920,959.3227 C920,959.3227 920,959.3227 920,1253.9227 C920,1303.0427 920,1342.6227 920,1373.6527" fill="none" id="repos-to-ports" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/><polygon fill="none" points="920,1391.6527,926,1373.6527,914,1373.6527,920,1391.6527" style="stroke:#000000;stroke-width:1;"/><text fill="#000000" font-family="Verdana" font-size="13" lengthAdjust="spacing" textLength="76.9082" x="921" y="1150.1896">implements</text></g><!--link domain to GMN79--><g class="link" data-entity-1="domain" data-entity-2="GMN79" data-source-line="122" data-uid="lnk81" id="link_domain_GMN79"><path d="M1044.093,1415.2127 C1044.1787,1415.2127 1044.2645,1415.2127 1044.3503,1415.2127 C1044.5219,1415.2127 1044.6934,1415.2127 1044.865,1415.2127 C1047.61,1415.2127 1050.3549,1415.2127 1053.0998,1415.2127 C1058.5897,1415.2127 1064.0794,1415.2127 1069.5688,1415.2127 C1080.5475,1415.2127 1091.525,1415.2127 1102.5,1415.2127" fill="none" id="domain-GMN79" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--link graphql to GMN82--><g class="link" data-entity-1="graphql" data-entity-2="GMN82" data-source-line="128" data-uid="lnk84" id="link_graphql_GMN82"><path d="M539.53,872.1027 C551.8,878.1127 565.07,883.7127 578,887.4827 C775.65,945.0627 836.06,898.0127 1039,932.6227 C1060.13,936.2327 1083.22,941.6627 1102.69,946.6927" fill="none" id="graphql-GMN82" style="stroke:#000000;stroke-width:1;stroke-dasharray:7,7;"/></g><!--SRC=[RLRRRXit47tdLx3kG-K7ouxGD8qH251rgGsujH89VMdpGErI4XikIP5SrOQRh-edvCSwlEsIiWG8u9mvExUT6UvtTayRYXKdJ23pXGb5D6bm9Hib1HLsPPyvnMt3HvbMaUeBsT6WqxIoHEmuFVVuBy3SQTcAUYgvrFZxnS-Bzul9MQhKDTMHzkFxjpTltxrs-TgU_vqXvjPcy_be_XD2bba8UCMCfGt1DSMVw0u4BTrvRcnRCo8iDVWAJ_IXPHPIQxLdJbEOr20KVU2BXPQ0Y1eF9cBNSgBnwCtb1IO6RvFc1M7u_JbHghVnsJ68Ka6r0hy0uWS8nMjC09nSCXPIDpd3oO4n5rfotZZI4YBp9Een9mREb1DZ6kBowpXLXo5FwZARIaqlOl0n0J0cyPIpFW67z8mKvOhg8wje7kZgMFMyBDQS6i8jc5Cf1Bm2TcJskU1Me2XjQWql-ew8cbCTp3aa0fxtzIJ3rPveMXSv5luUZrHpykoDoN3kcG-Ir4piy4enU2HuDE5ScDiotU0P8rpkFAVsnnZFrwoJN6FxHXh-Fb_ZDpUXYpOHVJc9_KuQwmbxEEGPBBNSmHGCA-FTgI3s-jazTA6mCEmnw9gTBSwa9ifIRRmJ4eNCKKUSQQWM56AmrAmX-laoBwXt-QicQl_n0K-Mzt-9mPsqqxsi98UUk_GHx9p-mCk7FhPKXz8VtAbK_jPQOfaKNjz4eQIidnKD9R3kr2bZdgzIe08FLXJQgZwRmoUgf65MQXQjQWUKd1cnnBK55CfJU3YVa3Qk_FGfJ52Tf2o-isz3ASugd-P5N1r9BjktQQ3XJHoH8A2YfYd-GpZtoZWfGRkFGg_-Wt1M4oX081mxCMkjzMDGrZQMvZIDcMoWyNm6jJ_cmSy5RESK7er24K1ByUFcRvZFBeQMHY2B8XYEoo86vB5YNoobjWOFxg7wUak067fHERYVJaYHR8Xnom8QsDcaiE5lHYEVWpbm4w2NOasRpr5iOxGeZUQM6kDAUBgp0G5l5PTj3Pj0ot_0RfZ_S4Re1pUsz0bUE6plTEkWgCPNLsD_dS3Vd_CBv0JpLqR2iXiYGTc5aA2q_51cDZVf2fjPFrNrJZAVJj6xEb54Xo6UkEbHRp6cwo-Vxg4SZC_WuN1SNWDb6UFAHU4fRo3k8doBxzRhvNLSNGWbt772GigHRWLvbOUw2Kgw4aq7ZsR3LE3T11TecboKr1xjMppgFHgsLAUBPOwZLSB5D27_O33ShQYupqxGxXHUUne9L-hxHd7gsfjKxDj_mdr5AGZEROTWVpZyTnn63WhE4XlS2sdXkvBjzXRBRSmDPkR3PWmVRDn_ZyseWdT7HSN8xOVhpHZKSVI5-vhpIi20MH7bDieJJBeW1hdhrDcFNZRIMjauD_qzD1UraWmYkGNX2b_t6X3sb72xxyty3m00]--></g></svg>