mirror of
https://github.com/github/awesome-copilot.git
synced 2026-04-14 04:05:58 +00:00
Add Draw.io Diagram Generator skill and instructions (#1179)
* Add draw-io diagram generator skill for awesome github copilot * Add comprehensive shape libraries and style reference documentation for draw.io - Introduced a new markdown file for draw.io shape libraries detailing various built-in shapes, their style keys, and usage. - Added a complete style reference for `<mxCell>` elements, including universal style keys, shape-specific keys, edge styles, and color palettes. - Included examples for common styles and shapes to aid users in creating diagrams effectively. * Add draw-io diagram validation and shape addition scripts * Add new diagram templates for flowchart, sequence, and UML class diagrams - Created a flowchart template with a structured layout including start, steps, decision points, and end. - Added a sequence diagram template illustrating interactions between a client, API server, and database with activation boxes and message arrows. - Introduced a UML class diagram template featuring an interface, classes, attributes, methods, and relationships, including composition and realization. * Add draw-io diagram generator skill to README with detailed usage instructions and bundled assets * Add draw.io instructions with workflow, XML structure rules, style conventions, and validation checklist * Add draw.io diagram standards to README instructions for enhanced diagram creation and editing * Moving diagram templates to assets/ to follow agentskills structure - Moved flowchart template with start, steps, decision points, and end nodes. - Moved sequence diagram template illustrating interactions between a client, API server, and database. - Moved UML class diagram template featuring an interface, classes, attributes, methods, and relationships. * Clarify installation instructions for draw.io VS Code extension in SKILL.md
This commit is contained in:
@@ -0,0 +1,160 @@
|
||||
<mxfile host="Electron" modified="2026-03-25T00:00:00.000Z" version="26.0.0">
|
||||
<diagram id="architecture" name="Architecture">
|
||||
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1"
|
||||
tooltips="1" connect="1" arrows="1" fold="1"
|
||||
page="1" pageScale="1" pageWidth="1169" pageHeight="827"
|
||||
math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<!-- TITLE -->
|
||||
<mxCell id="2" value="System Architecture"
|
||||
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontStyle=1;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="330" y="30" width="500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TIER 1: CLIENT LAYER ====== -->
|
||||
<mxCell id="tier1" value="Client Layer"
|
||||
style="swimlane;startSize=30;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="100" width="1050" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- NOTE: Cells id="3" and id="4" use Cisco shape library.
|
||||
Enable it in VS Code draw.io extension: More Shapes > Networking > Cisco.
|
||||
If the library is unavailable, replace with:
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" -->
|
||||
<mxCell id="3" value="Web Browser"
|
||||
style="shape=mxgraph.cisco.computers_and_peripherals.pc;html=1;pointerEvents=1;dashed=0;fillColor=#dae8fc;strokeColor=#6c8ebf;sketch=0;aspect=fixed;"
|
||||
vertex="1" parent="tier1">
|
||||
<mxGeometry x="60" y="40" width="100" height="70" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="4" value="Mobile App"
|
||||
style="shape=mxgraph.cisco.computers_and_peripherals.mobile_phone;html=1;pointerEvents=1;dashed=0;fillColor=#dae8fc;strokeColor=#6c8ebf;sketch=0;aspect=fixed;"
|
||||
vertex="1" parent="tier1">
|
||||
<mxGeometry x="220" y="40" width="60" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="5" value="Third-party Client"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=12;"
|
||||
vertex="1" parent="tier1">
|
||||
<mxGeometry x="370" y="50" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TIER 2: API GATEWAY ====== -->
|
||||
<mxCell id="tier2" value="API Gateway / Load Balancer"
|
||||
style="swimlane;startSize=30;fillColor=#fff2cc;strokeColor=#d6b656;fontStyle=1;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="270" width="1050" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="6" value="API Gateway"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;"
|
||||
vertex="1" parent="tier2">
|
||||
<mxGeometry x="200" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="7" value="Auth / JWT"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;"
|
||||
vertex="1" parent="tier2">
|
||||
<mxGeometry x="440" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="8" value="Rate Limiter"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=12;"
|
||||
vertex="1" parent="tier2">
|
||||
<mxGeometry x="680" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TIER 3: SERVICES ====== -->
|
||||
<mxCell id="tier3" value="Services Layer"
|
||||
style="swimlane;startSize=30;fillColor=#d5e8d4;strokeColor=#82b366;fontStyle=1;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="440" width="1050" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="9" value="Order Service"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;"
|
||||
vertex="1" parent="tier3">
|
||||
<mxGeometry x="60" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="10" value="User Service"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;"
|
||||
vertex="1" parent="tier3">
|
||||
<mxGeometry x="280" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="11" value="Notification Service"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;"
|
||||
vertex="1" parent="tier3">
|
||||
<mxGeometry x="500" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="12" value="Billing Service"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=12;"
|
||||
vertex="1" parent="tier3">
|
||||
<mxGeometry x="720" y="30" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TIER 4: DATA LAYER ====== -->
|
||||
<mxCell id="tier4" value="Data Layer"
|
||||
style="swimlane;startSize=30;fillColor=#f8cecc;strokeColor=#b85450;fontStyle=1;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="60" y="610" width="1050" height="130" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="13" value="Primary DB
(PostgreSQL)"
|
||||
style="shape=mxgraph.flowchart.database;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;"
|
||||
vertex="1" parent="tier4">
|
||||
<mxGeometry x="100" y="20" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="14" value="Cache
(Redis)"
|
||||
style="shape=mxgraph.flowchart.database;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;"
|
||||
vertex="1" parent="tier4">
|
||||
<mxGeometry x="320" y="20" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="15" value="Message Queue
(Kafka)"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;"
|
||||
vertex="1" parent="tier4">
|
||||
<mxGeometry x="540" y="35" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="16" value="Object Store
(S3)"
|
||||
style="shape=mxgraph.flowchart.stored_data;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=12;"
|
||||
vertex="1" parent="tier4">
|
||||
<mxGeometry x="760" y="25" width="100" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- INTER-TIER CONNECTORS (tier-level, using absolute coords) -->
|
||||
|
||||
<!-- Client → API Gateway -->
|
||||
<mxCell id="c1" value="HTTPS"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;"
|
||||
edge="1" source="tier1" target="tier2" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- API Gateway → Services -->
|
||||
<mxCell id="c2" value="REST / gRPC"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;"
|
||||
edge="1" source="tier2" target="tier3" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Services → Data -->
|
||||
<mxCell id="c3" value="SQL / Cache / Events"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;"
|
||||
edge="1" source="tier3" target="tier4" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,375 @@
|
||||
<mxfile host="Electron" modified="2026-03-25T00:00:00.000Z" version="26.0.0">
|
||||
<diagram id="er-diagram" name="ER Diagram">
|
||||
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1"
|
||||
tooltips="1" connect="1" arrows="1" fold="1"
|
||||
page="1" pageScale="1" pageWidth="1169" pageHeight="827"
|
||||
math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<!-- TITLE -->
|
||||
<mxCell id="2" value="Entity Relationship Diagram"
|
||||
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontStyle=1;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="300" y="20" width="570" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TABLE: users ====== -->
|
||||
<!-- Table container -->
|
||||
<mxCell id="tbl_users" value="users"
|
||||
style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="120" width="260" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Header row (already part of container via startSize, add column headers) -->
|
||||
<mxCell id="tbl_users_r0" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=1;"
|
||||
vertex="1" parent="tbl_users">
|
||||
<mxGeometry y="30" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r0_c1" value="PK"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r0">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r0_c2" value="id (UUID)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r0">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r0_c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_users_r0">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_users_r1" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_users">
|
||||
<mxGeometry y="60" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r1_c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r1">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r1_c2" value="email (VARCHAR 255)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r1">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r1_c3" value="UNIQUE"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_users_r1">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_users_r2" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_users">
|
||||
<mxGeometry y="90" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r2_c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r2">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r2_c2" value="name (VARCHAR 100)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r2">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r2_c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_users_r2">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_users_r3" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_users">
|
||||
<mxGeometry y="120" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r3_c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r3">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r3_c2" value="created_at (TIMESTAMP)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r3">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r3_c3" value="DEFAULT NOW()"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_users_r3">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_users_r4" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_users">
|
||||
<mxGeometry y="150" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r4_c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r4">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r4_c2" value="updated_at (TIMESTAMP)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r4">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="tbl_users_r4_c3" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_users_r4">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TABLE: orders ====== -->
|
||||
<mxCell id="tbl_orders" value="orders"
|
||||
style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="120" width="260" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_orders_r0" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=1;"
|
||||
vertex="1" parent="tbl_orders">
|
||||
<mxGeometry y="30" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t2r0c1" value="PK"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r0">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r0c2" value="id (UUID)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r0">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r0c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_orders_r0">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_orders_r1" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_orders">
|
||||
<mxGeometry y="60" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t2r1c1" value="FK"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=2;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r1">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r1c2" value="user_id (UUID)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r1">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r1c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_orders_r1">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_orders_r2" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_orders">
|
||||
<mxGeometry y="90" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t2r2c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r2">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r2c2" value="status (VARCHAR 20)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r2">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r2c3" value="DEFAULT 'pending'"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_orders_r2">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_orders_r3" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_orders">
|
||||
<mxGeometry y="120" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t2r3c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r3">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r3c2" value="total (DECIMAL 10,2)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r3">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r3c3" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r3">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_orders_r4" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_orders">
|
||||
<mxGeometry y="150" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t2r4c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r4">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r4c2" value="created_at (TIMESTAMP)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_orders_r4">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t2r4c3" value="DEFAULT NOW()"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_orders_r4">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== TABLE: order_items ====== -->
|
||||
<mxCell id="tbl_items" value="order_items"
|
||||
style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="430" width="260" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_items_r0" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=1;"
|
||||
vertex="1" parent="tbl_items">
|
||||
<mxGeometry y="30" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t3r0c1" value="PK"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r0">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r0c2" value="id (UUID)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r0">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r0c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_items_r0">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_items_r1" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_items">
|
||||
<mxGeometry y="60" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t3r1c1" value="FK"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=2;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r1">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r1c2" value="order_id (UUID)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r1">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r1c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_items_r1">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_items_r2" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_items">
|
||||
<mxGeometry y="90" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t3r2c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r2">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r2c2" value="product_name (VARCHAR)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r2">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r2c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_items_r2">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_items_r3" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_items">
|
||||
<mxGeometry y="120" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t3r3c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r3">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r3c2" value="quantity (INT)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r3">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r3c3" value="CHECK (> 0)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_items_r3">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<mxCell id="tbl_items_r4" value=""
|
||||
style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;fontSize=12;top=0;left=0;right=0;bottom=0;"
|
||||
vertex="1" parent="tbl_items">
|
||||
<mxGeometry y="150" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="t3r4c1" value=""
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r4">
|
||||
<mxGeometry width="50" height="30" as="geometry"><mxRectangle width="50" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r4c2" value="unit_price (DECIMAL 10,2)"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;"
|
||||
vertex="1" parent="tbl_items_r4">
|
||||
<mxGeometry x="50" width="140" height="30" as="geometry"><mxRectangle width="140" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="t3r4c3" value="NOT NULL"
|
||||
style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;fontStyle=2;"
|
||||
vertex="1" parent="tbl_items_r4">
|
||||
<mxGeometry x="190" width="70" height="30" as="geometry"><mxRectangle width="70" height="30" as="alternateBounds" /></mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== RELATIONSHIPS ====== -->
|
||||
|
||||
<!-- users 1 → orders (one-to-many): ERone on users side, ERmanyToOne on orders side -->
|
||||
<mxCell id="rel1" value=""
|
||||
style="edgeStyle=entityRelationEdgeStyle;html=1;endArrow=ERmany;startArrow=ERone;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;"
|
||||
edge="1" source="tbl_users_r1" target="tbl_orders_r1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- orders 1 → order_items (one-to-many) -->
|
||||
<mxCell id="rel2" value=""
|
||||
style="edgeStyle=entityRelationEdgeStyle;html=1;endArrow=ERmany;startArrow=ERone;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;"
|
||||
edge="1" source="tbl_orders_r0" target="tbl_items_r1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,63 @@
|
||||
<mxfile host="Electron" modified="" version="26.0.0">
|
||||
<diagram id="flowchart" name="Flowchart">
|
||||
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0"/>
|
||||
<mxCell id="1" parent="0"/>
|
||||
<mxCell id="2" value="[Diagram Title]" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="380" y="40" width="400" height="40" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="3" value="Start" style="ellipse;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="500" y="120" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="4" value="Step 1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="500" y="240" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="5" value="Step 2" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="500" y="360" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="6" value="Decision?" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="480" y="480" width="200" height="100" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="7" value="Yes Path" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="720" y="500" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="8" value="No Path" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=13;" parent="1" vertex="1">
|
||||
<mxGeometry x="280" y="500" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="9" value="End" style="ellipse;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;fontSize=13;fontStyle=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="500" y="660" width="160" height="60" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="10" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="3" target="4" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="11" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="4" target="5" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="12" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="5" target="6" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="13" value="Yes" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="6" target="7" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="14" value="No" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="6" target="8" edge="1">
|
||||
<mxGeometry relative="1" as="geometry"/>
|
||||
</mxCell>
|
||||
<mxCell id="15" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="7" target="9" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="800" y="690"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="16" value="" style="edgeStyle=orthogonalEdgeStyle;html=1;" parent="1" source="8" target="9" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="360" y="690"/>
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,169 @@
|
||||
<mxfile host="Electron" modified="2026-03-25T00:00:00.000Z" version="26.0.0">
|
||||
<diagram id="sequence" name="Sequence Diagram">
|
||||
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1"
|
||||
tooltips="1" connect="1" arrows="1" fold="1"
|
||||
page="1" pageScale="1" pageWidth="1169" pageHeight="827"
|
||||
math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<!-- TITLE -->
|
||||
<mxCell id="2" value="Sequence Diagram"
|
||||
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontStyle=1;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="334" y="20" width="500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== ACTOR BOXES (top row) ====== -->
|
||||
<!-- Actor A: Client -->
|
||||
<mxCell id="actorA" value="Client"
|
||||
style="shape=mxgraph.uml.actor;pointerEvents=1;dashed=0;fillColor=#dae8fc;strokeColor=#6c8ebf;sketch=0;aspect=fixed;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="80" width="60" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Actor B: API Server -->
|
||||
<mxCell id="actorB" value="<b>API Server</b>"
|
||||
style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="100" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Actor C: Database -->
|
||||
<mxCell id="actorC" value="<b>Database</b>"
|
||||
style="shape=mxgraph.flowchart.database;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="870" y="90" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== LIFELINES ====== -->
|
||||
<!-- Lifeline A -->
|
||||
<mxCell id="lifA" value=""
|
||||
style="edgeStyle=none;dashed=1;endArrow=none;entryX=0.5;entryY=0;entryDx=0;entryDy=0;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="140" y="160" as="sourcePoint" />
|
||||
<mxPoint x="140" y="780" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- Lifeline B -->
|
||||
<mxCell id="lifB" value=""
|
||||
style="edgeStyle=none;dashed=1;endArrow=none;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="560" y="160" as="sourcePoint" />
|
||||
<mxPoint x="560" y="780" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- Lifeline C -->
|
||||
<mxCell id="lifC" value=""
|
||||
style="edgeStyle=none;dashed=1;endArrow=none;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="910" y="170" as="sourcePoint" />
|
||||
<mxPoint x="910" y="780" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== ACTIVATION BOXES (thin rectangles on lifelines) ====== -->
|
||||
<!-- Activation on A during request flow -->
|
||||
<mxCell id="actA1" value=""
|
||||
style="fillColor=#dae8fc;strokeColor=#6c8ebf;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="130" y="220" width="20" height="200" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Activation on B during processing -->
|
||||
<mxCell id="actB1" value=""
|
||||
style="fillColor=#fff2cc;strokeColor=#d6b656;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="550" y="260" width="20" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Activation on C during DB query -->
|
||||
<mxCell id="actC1" value=""
|
||||
style="fillColor=#d5e8d4;strokeColor=#82b366;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="900" y="300" width="20" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== MESSAGE ARROWS ====== -->
|
||||
<!-- 1. A → B: Request -->
|
||||
<mxCell id="msg1" value="1: POST /api/orders"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="150" y="240" as="sourcePoint" />
|
||||
<mxPoint x="550" y="240" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- 2. B → B: Validate input (self-message) -->
|
||||
<mxCell id="msg2" value="2: Validate & Authenticate"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="570" y="280" as="sourcePoint" />
|
||||
<mxPoint x="570" y="300" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="620" y="280" />
|
||||
<mxPoint x="620" y="300" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- 3. B → C: Query -->
|
||||
<mxCell id="msg3" value="3: INSERT orders (...)"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="570" y="320" as="sourcePoint" />
|
||||
<mxPoint x="900" y="320" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- 4. C → B: Return result -->
|
||||
<mxCell id="msg4" value="4: {id: 42, status: created}"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=open;endFill=0;dashed=1;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="900" y="360" as="sourcePoint" />
|
||||
<mxPoint x="570" y="360" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- 5. B → A: Response -->
|
||||
<mxCell id="msg5" value="5: 201 Created {orderId: 42}"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=open;endFill=0;dashed=1;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="550" y="410" as="sourcePoint" />
|
||||
<mxPoint x="150" y="410" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== NOTES ====== -->
|
||||
<mxCell id="note1" value="<i>Requires Authorization header</i>"
|
||||
style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;fontSize=11;fillColor=#fffacd;strokeColor=#aaa;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="200" y="220" width="200" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- connector from note to arrow -->
|
||||
<mxCell id="noteEdge1" value=""
|
||||
style="edgeStyle=none;dashed=1;endArrow=none;"
|
||||
edge="1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="290" y="240" as="sourcePoint" />
|
||||
<mxPoint x="350" y="240" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
@@ -0,0 +1,224 @@
|
||||
<mxfile host="Electron" modified="2026-03-25T00:00:00.000Z" version="26.0.0">
|
||||
<diagram id="uml-class" name="UML Class Diagram">
|
||||
<mxGraphModel dx="1422" dy="762" grid="1" gridSize="10" guides="1"
|
||||
tooltips="1" connect="1" arrows="1" fold="1"
|
||||
page="1" pageScale="1" pageWidth="1169" pageHeight="827"
|
||||
math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
|
||||
<!-- TITLE -->
|
||||
<mxCell id="2" value="UML Class Diagram"
|
||||
style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=18;fontStyle=1;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="334" y="20" width="500" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== INTERFACE: IOrderRepository ====== -->
|
||||
<mxCell id="iface1" value="«interface»
IOrderRepository"
|
||||
style="swimlane;fontStyle=3;align=center;startSize=40;fillColor=#f5f5f5;strokeColor=#666666;fontColor=#333333;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="80" width="260" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iface1_div" value=""
|
||||
style="swimlane;startSize=0;fillColor=none;strokeColor=#666666;"
|
||||
vertex="1" parent="iface1">
|
||||
<mxGeometry y="40" width="260" height="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iface1_m1" value="+ findById(id: UUID): Order"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="iface1">
|
||||
<mxGeometry y="50" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iface1_m2" value="+ findByUserId(userId: UUID): Order[]"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="iface1">
|
||||
<mxGeometry y="80" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iface1_m3" value="+ save(order: Order): Order"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="iface1">
|
||||
<mxGeometry y="110" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="iface1_m4" value="+ delete(id: UUID): void"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="iface1">
|
||||
<mxGeometry y="140" width="260" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== CLASS: Order ====== -->
|
||||
<mxCell id="cls_order" value="Order"
|
||||
style="swimlane;fontStyle=1;align=center;startSize=40;fillColor=#dae8fc;strokeColor=#6c8ebf;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="370" width="280" height="290" as="geometry" />
|
||||
</mxCell>
|
||||
<!-- Attributes section divider -->
|
||||
<mxCell id="cls_order_d1" value=""
|
||||
style="swimlane;startSize=0;fillColor=none;strokeColor=#6c8ebf;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="40" width="280" height="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_a1" value="- id: UUID"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="50" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_a2" value="- userId: UUID"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="75" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_a3" value="- items: OrderItem[]"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="100" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_a4" value="- status: OrderStatus"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="125" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_a5" value="- total: Decimal"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="150" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<!-- Methods divider -->
|
||||
<mxCell id="cls_order_d2" value=""
|
||||
style="swimlane;startSize=0;fillColor=none;strokeColor=#6c8ebf;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="175" width="280" height="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_m1" value="+ addItem(item: OrderItem): void"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="185" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_m2" value="+ removeItem(itemId: UUID): void"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="210" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_m3" value="+ calculateTotal(): Decimal"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="235" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_order_m4" value="+ confirm(): void"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_order">
|
||||
<mxGeometry y="260" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== CLASS: OrderItem ====== -->
|
||||
<mxCell id="cls_item" value="OrderItem"
|
||||
style="swimlane;fontStyle=1;align=center;startSize=40;fillColor=#d5e8d4;strokeColor=#82b366;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="370" width="280" height="230" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_d1" value=""
|
||||
style="swimlane;startSize=0;fillColor=none;strokeColor=#82b366;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="40" width="280" height="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_a1" value="- id: UUID"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="50" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_a2" value="- productName: string"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="75" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_a3" value="- quantity: int"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="100" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_a4" value="- unitPrice: Decimal"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="125" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_d2" value=""
|
||||
style="swimlane;startSize=0;fillColor=none;strokeColor=#82b366;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="150" width="280" height="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_m1" value="+ subtotal(): Decimal"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="160" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="cls_item_m2" value="+ validate(): boolean"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="cls_item">
|
||||
<mxGeometry y="185" width="280" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== ENUM: OrderStatus ====== -->
|
||||
<mxCell id="enum1" value="«enumeration»
OrderStatus"
|
||||
style="swimlane;fontStyle=3;align=center;startSize=40;fillColor=#fff2cc;strokeColor=#d6b656;fontSize=13;"
|
||||
vertex="1" parent="1">
|
||||
<mxGeometry x="820" y="370" width="200" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="enum1_d1" value=""
|
||||
style="swimlane;startSize=0;fillColor=none;strokeColor=#d6b656;"
|
||||
vertex="1" parent="enum1">
|
||||
<mxGeometry y="40" width="200" height="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="enum1_v1" value="PENDING"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="enum1">
|
||||
<mxGeometry y="50" width="200" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="enum1_v2" value="CONFIRMED"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="enum1">
|
||||
<mxGeometry y="75" width="200" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="enum1_v3" value="SHIPPED"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="enum1">
|
||||
<mxGeometry y="100" width="200" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="enum1_v4" value="DELIVERED"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="enum1">
|
||||
<mxGeometry y="125" width="200" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="enum1_v5" value="CANCELLED"
|
||||
style="text;html=1;align=left;verticalAlign=top;spacingLeft=5;whiteSpace=wrap;overflow=hidden;rotatable=0;"
|
||||
vertex="1" parent="enum1">
|
||||
<mxGeometry y="150" width="200" height="25" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- ====== RELATIONSHIPS ====== -->
|
||||
|
||||
<!-- Order REALIZES IOrderRepository (dashed + open triangle) -->
|
||||
<mxCell id="rel_realize" value=""
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=0;dashed=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;"
|
||||
edge="1" source="cls_order" target="iface1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Order COMPOSITION OrderItem (filled diamond on Order side) -->
|
||||
<mxCell id="rel_compose" value="1 *"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;startArrow=ERmandOne;endArrow=ERmany;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;"
|
||||
edge="1" source="cls_order" target="cls_item" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
<!-- Order USES OrderStatus (dashed dependency) -->
|
||||
<mxCell id="rel_dep" value="«use»"
|
||||
style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=open;startArrow=none;dashed=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;"
|
||||
edge="1" source="cls_order" target="enum1" parent="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
Reference in New Issue
Block a user