|
| 1 | +<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.17 Chrome/128.0.6613.36 Electron/32.0.1 Safari/537.36" version="24.7.17"> |
| 2 | + <diagram name="Strona-1" id="LOKVYXWfDa1poe3U8vF1"> |
| 3 | + <mxGraphModel dx="2261" dy="2013" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="#ffffff" math="0" shadow="0"> |
| 4 | + <root> |
| 5 | + <mxCell id="0" /> |
| 6 | + <mxCell id="1" parent="0" /> |
| 7 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-53" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> |
| 8 | + <mxGeometry x="576" y="181" width="500" height="183" as="geometry" /> |
| 9 | + </mxCell> |
| 10 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-43" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1"> |
| 11 | + <mxGeometry x="-10" y="329.5" width="241" height="241" as="geometry" /> |
| 12 | + </mxCell> |
| 13 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-33" value="Stores" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.85;exitY=0.05;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.25;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-31" target="oS8Ueor-zqtWLND2Zhuv-16"> |
| 14 | + <mxGeometry relative="1" as="geometry"> |
| 15 | + <Array as="points"> |
| 16 | + <mxPoint x="447" y="80" /> |
| 17 | + <mxPoint x="575" y="80" /> |
| 18 | + </Array> |
| 19 | + </mxGeometry> |
| 20 | + </mxCell> |
| 21 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-34" value="Stores" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.15;exitY=0.05;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-31" target="oS8Ueor-zqtWLND2Zhuv-15"> |
| 22 | + <mxGeometry relative="1" as="geometry"> |
| 23 | + <Array as="points"> |
| 24 | + <mxPoint x="353" y="80" /> |
| 25 | + <mxPoint x="259" y="80" /> |
| 26 | + </Array> |
| 27 | + </mxGeometry> |
| 28 | + </mxCell> |
| 29 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-31" value="Database" style="shape=datastore;whiteSpace=wrap;html=1;" vertex="1" parent="1"> |
| 30 | + <mxGeometry x="332.5" y="97" width="135" height="90" as="geometry" /> |
| 31 | + </mxCell> |
| 32 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-25" value="Stores" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-1" target="oS8Ueor-zqtWLND2Zhuv-22"> |
| 33 | + <mxGeometry relative="1" as="geometry" /> |
| 34 | + </mxCell> |
| 35 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-44" value="Endpoints" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-1" target="oS8Ueor-zqtWLND2Zhuv-43"> |
| 36 | + <mxGeometry relative="1" as="geometry" /> |
| 37 | + </mxCell> |
| 38 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-52" value="Uses<div>(from code)</div>" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.75;exitDx=0;exitDy=0;entryX=0;entryY=0.25;entryDx=0;entryDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-1" target="oS8Ueor-zqtWLND2Zhuv-51"> |
| 39 | + <mxGeometry relative="1" as="geometry" /> |
| 40 | + </mxCell> |
| 41 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-1" value="Progressive Web App" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> |
| 42 | + <mxGeometry x="320" y="410" width="160" height="80" as="geometry" /> |
| 43 | + </mxCell> |
| 44 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" target="oS8Ueor-zqtWLND2Zhuv-1"> |
| 45 | + <mxGeometry relative="1" as="geometry"> |
| 46 | + <mxPoint x="400.02857142857147" y="525" as="sourcePoint" /> |
| 47 | + </mxGeometry> |
| 48 | + </mxCell> |
| 49 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-32" value="Uses" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-4" target="oS8Ueor-zqtWLND2Zhuv-31"> |
| 50 | + <mxGeometry relative="1" as="geometry" /> |
| 51 | + </mxCell> |
| 52 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-4" value="API" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="1"> |
| 53 | + <mxGeometry x="310" y="243" width="180" height="100" as="geometry" /> |
| 54 | + </mxCell> |
| 55 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-6" value="Uses" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-1" target="oS8Ueor-zqtWLND2Zhuv-4"> |
| 56 | + <mxGeometry relative="1" as="geometry" /> |
| 57 | + </mxCell> |
| 58 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-10" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://go-app.dev/web/icon.png;" vertex="1" parent="1"> |
| 59 | + <mxGeometry x="450" y="461" width="26" height="26" as="geometry" /> |
| 60 | + </mxCell> |
| 61 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-12" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png;" vertex="1" parent="1"> |
| 62 | + <mxGeometry x="383" y="295.52" width="100" height="36.04" as="geometry" /> |
| 63 | + </mxCell> |
| 64 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-14" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://miro.medium.com/v2/resize:fit:512/1*doAg1_fMQKWFoub-6gwUiQ.png;" vertex="1" parent="1"> |
| 65 | + <mxGeometry x="423.5" y="139" width="42" height="42" as="geometry" /> |
| 66 | + </mxCell> |
| 67 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-15" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">Users</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>_id (username)</td></tr><tr><td><br></td><td>pass_hash (bcrypt)</td></tr><tr><td></td><td>last_input_timestamp (request rate control)</td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" vertex="1" parent="1"> |
| 68 | + <mxGeometry x="124.28" y="-80" width="180" height="137" as="geometry" /> |
| 69 | + </mxCell> |
| 70 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-16" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">Flushes</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>_id</td></tr><tr><td>FK</td><td>user_id</td></tr><tr><td></td><td>time_start<br>time_end<br>rating (1-10 scale)<br>note (optional)<br>phone_used (bool)</td></tr></tbody></table><br><div><br></div>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" vertex="1" parent="1"> |
| 71 | + <mxGeometry x="526" y="-80" width="180" height="137" as="geometry" /> |
| 72 | + </mxCell> |
| 73 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-22" target="oS8Ueor-zqtWLND2Zhuv-23"> |
| 74 | + <mxGeometry relative="1" as="geometry" /> |
| 75 | + </mxCell> |
| 76 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-22" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">Browser LocalStorage - "user_data"</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td><br></td><td>LoginToken (user:pass in base64)<br>LoggedIn (bool)<br>CachedOfflineFlushes (for later posting)</td></tr><tr><td><br></td><td><br></td></tr><tr><td></td><td><br></td></tr></tbody></table>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" vertex="1" parent="1"> |
| 77 | + <mxGeometry x="550" y="403" width="201" height="95" as="geometry" /> |
| 78 | + </mxCell> |
| 79 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-23" value="Expire in 1 hour<div><br><div>If user checks 'remember me', expire in 7 days</div></div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" vertex="1" parent="1"> |
| 80 | + <mxGeometry x="772.22" y="385.5" width="100" height="130" as="geometry" /> |
| 81 | + </mxCell> |
| 82 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-45" value="Uses" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-28" target="oS8Ueor-zqtWLND2Zhuv-1"> |
| 83 | + <mxGeometry relative="1" as="geometry" /> |
| 84 | + </mxCell> |
| 85 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-28" value="User" style="points=[[0.35,0,0],[0.98,0.51,0],[1,0.71,0],[0.67,1,0],[0,0.795,0],[0,0.65,0]];verticalLabelPosition=bottom;sketch=0;html=1;verticalAlign=top;aspect=fixed;align=center;pointerEvents=1;shape=mxgraph.cisco19.user;fillColor=#005073;strokeColor=none;" vertex="1" parent="1"> |
| 86 | + <mxGeometry x="367.5" y="530" width="65" height="65" as="geometry" /> |
| 87 | + </mxCell> |
| 88 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-38" value="/login (optional<div>register also</div><div>here)</div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 89 | + <mxGeometry x="26.28" y="353" width="70.43" height="50" as="geometry" /> |
| 90 | + </mxCell> |
| 91 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-39" value="/ root with<div>latest stats,</div><div>plus (+) button etc.</div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 92 | + <mxGeometry x="124.28" y="353" width="70.43" height="50" as="geometry" /> |
| 93 | + </mxCell> |
| 94 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-40" value="/new for<div>adding flush</div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 95 | + <mxGeometry x="26.28" y="473" width="70.43" height="50" as="geometry" /> |
| 96 | + </mxCell> |
| 97 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-41" value="/settings" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 98 | + <mxGeometry x="124.28" y="473" width="70.43" height="50" as="geometry" /> |
| 99 | + </mxCell> |
| 100 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-46" value="/healthz<div>for<div>healthcheck<div>(200)</div></div></div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 101 | + <mxGeometry x="883" y="201" width="70.43" height="50" as="geometry" /> |
| 102 | + </mxCell> |
| 103 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-47" value="/readyz<div>for&nbsp;<span style="background-color: initial;">readiness</span><div>when db ok</div><div>(200)</div></div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 104 | + <mxGeometry x="979" y="201" width="70.43" height="50" as="geometry" /> |
| 105 | + </mxCell> |
| 106 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-48" value="/user<div>register or delete</div><div>account<br><div>POST/DELETE</div><div>(201/204)</div></div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 107 | + <mxGeometry x="596" y="201" width="70.43" height="50" as="geometry" /> |
| 108 | + </mxCell> |
| 109 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-49" value="/flush<div>create, update</div><div>or delete flush entry</div><div>use PUT for both</div><div>new and update<br><div>PUT/DELETE</div><div>(201/200/204)</div></div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 110 | + <mxGeometry x="692" y="201" width="70.43" height="50" as="geometry" /> |
| 111 | + </mxCell> |
| 112 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-50" value="/flushes<div>all of user's</div><div>flushes<br><div>GET</div><div>(200)</div></div>" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#434445;aspect=fixed;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.vvd.web_browser;" vertex="1" parent="1"> |
| 113 | + <mxGeometry x="787" y="201" width="70.43" height="50" as="geometry" /> |
| 114 | + </mxCell> |
| 115 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-51" value="API list<div>(for different places</div><div>with API deployed)</div>" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> |
| 116 | + <mxGeometry x="550" y="515" width="120" height="60" as="geometry" /> |
| 117 | + </mxCell> |
| 118 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-54" value="Endpoints" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.004;entryY=0.612;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-4" target="oS8Ueor-zqtWLND2Zhuv-53"> |
| 119 | + <mxGeometry relative="1" as="geometry" /> |
| 120 | + </mxCell> |
| 121 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-55" value="MongoDB Atlas (M0 free cluster)" style="sketch=0;html=1;aspect=fixed;strokeColor=none;shadow=0;align=center;fillColor=#2D9C5E;verticalAlign=top;labelPosition=center;verticalLabelPosition=bottom;shape=mxgraph.gcp2.external_data_center" vertex="1" parent="1"> |
| 122 | + <mxGeometry x="205" y="92" width="77" height="100" as="geometry" /> |
| 123 | + </mxCell> |
| 124 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-57" value="Uses" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1.007;entryY=0.507;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-31" target="oS8Ueor-zqtWLND2Zhuv-55"> |
| 125 | + <mxGeometry relative="1" as="geometry" /> |
| 126 | + </mxCell> |
| 127 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-60" value="<div style="box-sizing:border-box;width:100%;background:#e4e4e4;padding:2px;">Notifications</div><table style="width:100%;font-size:1em;" cellpadding="2" cellspacing="0"><tbody><tr><td>PK</td><td>_id</td></tr><tr><td>FK</td><td>user_id</td></tr><tr><td></td><td>time<br>message</td></tr></tbody></table><br><div><br></div>" style="verticalAlign=top;align=left;overflow=fill;html=1;whiteSpace=wrap;" vertex="1" parent="1"> |
| 128 | + <mxGeometry x="325" y="-80" width="180" height="137" as="geometry" /> |
| 129 | + </mxCell> |
| 130 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-61" value="Stores" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.427;entryY=0.992;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="oS8Ueor-zqtWLND2Zhuv-31" target="oS8Ueor-zqtWLND2Zhuv-60"> |
| 131 | + <mxGeometry relative="1" as="geometry" /> |
| 132 | + </mxCell> |
| 133 | + <mxCell id="oS8Ueor-zqtWLND2Zhuv-62" value="MongoDB does<div>not strictly use</div><div>FKs (as NoSQL),</div><div>but can</div><div>connect data</div><div>based on fields</div>" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" vertex="1" parent="1"> |
| 134 | + <mxGeometry x="729" y="-80" width="138" height="147" as="geometry" /> |
| 135 | + </mxCell> |
| 136 | + </root> |
| 137 | + </mxGraphModel> |
| 138 | + </diagram> |
| 139 | +</mxfile> |
0 commit comments