Update Document
This commit is contained in:
parent
95ad73f6c3
commit
9b5a65ce02
3 changed files with 364 additions and 33 deletions
334
Document/EDM.drawio
Normal file
334
Document/EDM.drawio
Normal file
|
|
@ -0,0 +1,334 @@
|
|||
<mxfile host="Electron" modified="2023-11-27T01:42:40.197Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/22.0.3 Chrome/114.0.5735.289 Electron/25.8.4 Safari/537.36" etag="MNfPSDuya5x_EEAEGOs3" version="22.0.3" type="device">
|
||||
<diagram name="Page-1" id="RLboldwgPuiFbGZkpBUd">
|
||||
<mxGraphModel dx="1120" dy="1866" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-1" value="API Gateway<br>192.168.1.100" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.servers.reverse_proxy;" parent="1" vertex="1">
|
||||
<mxGeometry x="310" y="-917.5999999999999" width="41" height="53" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-2" value="Backend" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.android;fillColor=#FF6830;gradientColor=none;" parent="1" vertex="1">
|
||||
<mxGeometry x="630" y="-933.0999999999999" width="73.5" height="84" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-3" value="Frontend" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.android;fillColor=#8CC64F;gradientColor=none;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="-816" width="73.5" height="84" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-6" value="User" style="dashed=0;outlineConnect=0;html=1;align=center;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;shape=mxgraph.weblogos.chrome;fillColor=#FF6830;" parent="1" vertex="1">
|
||||
<mxGeometry x="9.999999999999993" y="-928.8" width="74.8" height="75.4" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-9" value="edm.frappet.synology.me/api" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" parent="1" source="qrBoiBcnWzxhBA2JE3Tb-1" target="qrBoiBcnWzxhBA2JE3Tb-2" edge="1">
|
||||
<mxGeometry x="0.0795" y="19" width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="390" y="-720" as="sourcePoint" />
|
||||
<mxPoint x="440" y="-770" as="targetPoint" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-12" value="" style="endArrow=classic;html=1;rounded=0;" parent="1" source="qrBoiBcnWzxhBA2JE3Tb-3" target="qrBoiBcnWzxhBA2JE3Tb-1" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="380" y="-830" as="sourcePoint" />
|
||||
<mxPoint x="430" y="-880" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-13" value="edm.frappet.synology.me" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="qrBoiBcnWzxhBA2JE3Tb-12" vertex="1" connectable="0">
|
||||
<mxGeometry x="0.0289" y="-1" relative="1" as="geometry">
|
||||
<mxPoint x="28" y="20" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="qrBoiBcnWzxhBA2JE3Tb-14" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" parent="1" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="-720" as="sourcePoint" />
|
||||
<mxPoint x="120" y="-1140" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-1" value="NAS Reverse proxy<br>192.168.1.5" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;fillColor=#505050;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.servers.reverse_proxy;" vertex="1" parent="1">
|
||||
<mxGeometry x="160" y="-917.5999999999999" width="41" height="53" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-2" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-1" target="qrBoiBcnWzxhBA2JE3Tb-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-880" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-930" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-3" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="qrBoiBcnWzxhBA2JE3Tb-6" target="0NdD80OInc1QJW_aUxTs-1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-880" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-930" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-4" value="192.168.1.100:9200" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#8C4FFF;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.elasticsearch_service;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="-810" width="78" height="78" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-5" value="" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#232F3E;fillColor=#7AA116;strokeColor=#ffffff;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3;" vertex="1" parent="1">
|
||||
<mxGeometry x="291.5" y="-1120" width="78" height="78" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-6" value="edm-s3.frappet.synology.me" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="qrBoiBcnWzxhBA2JE3Tb-1" target="0NdD80OInc1QJW_aUxTs-5">
|
||||
<mxGeometry x="0.1582" y="8" width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="361" y="-881" as="sourcePoint" />
|
||||
<mxPoint x="600" y="-881" as="targetPoint" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-7" value="" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-4" target="qrBoiBcnWzxhBA2JE3Tb-2">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="-810" as="sourcePoint" />
|
||||
<mxPoint x="350" y="-860" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-8" value="RabbitMQ" style="outlineConnect=0;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;shape=mxgraph.aws3.queue;fillColor=#D9A741;gradientColor=none;" vertex="1" parent="1">
|
||||
<mxGeometry x="630" y="-1105" width="73.5" height="48" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-9" value="bucket notificatoin<br>RabbitMQ" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-5" target="0NdD80OInc1QJW_aUxTs-8">
|
||||
<mxGeometry x="0.0031" y="19" width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="-810" as="sourcePoint" />
|
||||
<mxPoint x="350" y="-860" as="targetPoint" />
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-10" value="consume" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-8" target="qrBoiBcnWzxhBA2JE3Tb-2">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="-810" as="sourcePoint" />
|
||||
<mxPoint x="350" y="-860" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-11" value="bucket notificatoin<br>(webhook)" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;curved=1;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-5" target="qrBoiBcnWzxhBA2JE3Tb-2">
|
||||
<mxGeometry x="-0.034" y="-10" width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="310" y="-1020" as="sourcePoint" />
|
||||
<mxPoint x="646.5000000000002" y="-911.0999999999999" as="targetPoint" />
|
||||
<mxPoint as="offset" />
|
||||
<Array as="points">
|
||||
<mxPoint x="647" y="-1050" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-12" value="Test/Development" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontSize=20;" vertex="1" parent="1">
|
||||
<mxGeometry x="610" y="-1160" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-14" value="upload/download<br>presigned URL" style="endArrow=classic;startArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="qrBoiBcnWzxhBA2JE3Tb-6" target="0NdD80OInc1QJW_aUxTs-5">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="-780" as="sourcePoint" />
|
||||
<mxPoint x="330" y="-830" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-15" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="-30" as="sourcePoint" />
|
||||
<mxPoint x="250" y="-640" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-16" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="390" y="-30" as="sourcePoint" />
|
||||
<mxPoint x="390" y="-640" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-17" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="530" y="-30" as="sourcePoint" />
|
||||
<mxPoint x="530" y="-640" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-18" value="upload file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="-240" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-19" value="Browser" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="140" y="-690" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-20" value="Receive file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="-240" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-22" value="S3" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="439.5" y="-690" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-23" value="API" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="-690" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-24" value="Request upload" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="-320" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-25" value="Generate Presigned URL" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-320" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-27" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-25" target="0NdD80OInc1QJW_aUxTs-18">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-260" as="sourcePoint" />
|
||||
<mxPoint x="450" y="-170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-28" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-18" target="0NdD80OInc1QJW_aUxTs-20">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-260" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-310" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-30" value="Elasticsearch" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="570" y="-690" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-31" value="Index document" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="545.0000000000001" y="-639" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-32" value="Index document" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="545" y="-90" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-33" value="Consume event and process" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-200" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-35" value="upload file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="-639" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-36" value="Receive file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="414.5" y="-589" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-37" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-35" target="0NdD80OInc1QJW_aUxTs-38">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="239.99999999999997" y="-429" as="sourcePoint" />
|
||||
<mxPoint x="290" y="-609" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-38" value="Process file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-639" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-39" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-38" target="0NdD80OInc1QJW_aUxTs-31">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-469" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-519" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-41" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-38" target="0NdD80OInc1QJW_aUxTs-36">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-469" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-519" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-42" value="Trigger event" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="-320" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-43" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-24" target="0NdD80OInc1QJW_aUxTs-25">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-180" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-44" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-20" target="0NdD80OInc1QJW_aUxTs-42">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-180" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-45" value="RqbbitMQ" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="700" y="-690" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-46" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="670" y="-30" as="sourcePoint" />
|
||||
<mxPoint x="668" y="-640" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-47" value="Receive event and place in queue" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="690" y="-200" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-48" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-42" target="0NdD80OInc1QJW_aUxTs-47">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-260" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-310" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-49" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-47" target="0NdD80OInc1QJW_aUxTs-33">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-260" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-310" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-50" value="download file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="414" y="-150" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-51" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-33" target="0NdD80OInc1QJW_aUxTs-50">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-180" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-52" value="Receive and process index" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-90" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-53" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-50" target="0NdD80OInc1QJW_aUxTs-52">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-90" as="sourcePoint" />
|
||||
<mxPoint x="440" y="60" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-54" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-52" target="0NdD80OInc1QJW_aUxTs-32">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-180" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-55" value="Pure API" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="17.400000000000013" y="-624" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-56" value="Index method" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="17.400000000000006" y="-690" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-57" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="100.00000000000001" y="-30" as="sourcePoint" />
|
||||
<mxPoint x="100.00000000000001" y="-640" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-58" value="Use presign url and MQ" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="10.000000000000014" y="-310" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-59" value="Generate Presigned URL" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-520" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-62" value="Index document" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="545.0000000000001" y="-400" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-63" value="upload file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="-445" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-64" value="Receive file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="-445" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-65" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-63" target="0NdD80OInc1QJW_aUxTs-66">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="239.99999999999997" y="-235" as="sourcePoint" />
|
||||
<mxPoint x="290" y="-415" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-66" value="Process file" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-400" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-67" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-66" target="0NdD80OInc1QJW_aUxTs-62">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-275" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-325" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-68" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-63" target="0NdD80OInc1QJW_aUxTs-64">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="350" y="-275" as="sourcePoint" />
|
||||
<mxPoint x="400" y="-325" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-69" value="Presigned URL" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="17.400000000000013" y="-505" width="60" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-70" value="Request upload" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="120" y="-520" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-71" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-70" target="0NdD80OInc1QJW_aUxTs-59">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="480" y="-455" as="sourcePoint" />
|
||||
<mxPoint x="530" y="-505" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="0NdD80OInc1QJW_aUxTs-72" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" source="0NdD80OInc1QJW_aUxTs-59" target="0NdD80OInc1QJW_aUxTs-63">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="480" y="-375" as="sourcePoint" />
|
||||
<mxPoint x="530" y="-425" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
|
|
@ -1,18 +1,5 @@
|
|||
# Document
|
||||
เอกสารของโครงการ
|
||||
|
||||
## Requirement
|
||||
|
||||
### ข้อกำหนดเบื้องต้น
|
||||
- เป็น Stand alone Product ไม่ขึ้นกับโปรเจ็กอื่น
|
||||
- มี Backend Frontend Document ใน repo เดียว
|
||||
- Integrate กับโปรเจ็กอื่นๆได้ด้วย Single Sign On
|
||||
- ถึงจะทำเพื่อลูกค้ารายเดียวแต่ให้ออกแบบให้ใช้ซ้ำได้ Backend คอนฟิกตามลูกค้าแต่ละรายได้ Frontend อาจจะมองเรื่องการเปลี่ยน Theme ไว้ด้วย (เป็นเรื่องรองไว้ทำทีหลังได้)
|
||||
- ผู้ใช้งานมีสอง Roles
|
||||
- dm_admin : เป็น role สำหรับจัดการ เพิ่ม ลบ แก้ไขจัดระเบียบ เอกสาร
|
||||
- login user: บุคคลเข้าระบบได้ไม่ต้องมี role พิเศษใดๆ ค้นหาและดาว์นโหลดเอกสาร
|
||||
|
||||
อ่านเพิ่มเติมที่ไฟล์ [ระบบจัดเก็บข้อมูลผลการประเมินบุคคล (EV3)](./ระบบจัดเก็บข้อมูลผลการประเมินบุคคล%20(EV3).pdf), [db.png](./db.png)
|
||||
เอกสารของโครงการอ่านเพิ่มเติมที่ไฟล์ [ระบบจัดเก็บข้อมูลผลการประเมินบุคคล (EV3)](./ระบบจัดเก็บข้อมูลผลการประเมินบุคคล%20(EV3).pdf), [db.png](./db.png)
|
||||
|
||||
## UI
|
||||
[ดูใน Figma](https://www.figma.com/file/PilhhtvH4jbwwY12WRy74f/eHR?type=design&node-id=6671-3880&mode=design)
|
||||
|
|
|
|||
48
README.md
48
README.md
|
|
@ -1,26 +1,36 @@
|
|||
# EDM
|
||||
enterprise document management (EDM)
|
||||
|
||||
- [เอกสารโครงการ](./Document/Readme.md)
|
||||
Enterprise Document Management (EDM) เป็นโปรแกรมสำหรับจัดการข้อมูลเอกสารในองค์กร
|
||||
การออกแบบทำสำหรับ ระบบจัดเก็บข้อมูลผลการประเมินบุคคล ซึ่งเป็นระบบย่อยของโปรเจ็ก eHR ของกทม แต่จะออกแบบให้สามารถนำกลับมาใช้ซ้ำได้ในโปรเจ็กอื่นๆ และ เป็นสินค้าตัวต่อไป EDM ถือเป็นหนึ่งในโปรแกรมสำหรับจัดการงานในองค์กร เหมือนกัน
|
||||
[EHR](https://1stcraft.com/what-is-ehr/),
|
||||
[ERP](https://www.qad.com/th-TH/what-is-erp),
|
||||
[EAM](https://th.raceku.com/th/eam-enterprise-asset-management/)
|
||||
|
||||
## Third party
|
||||
คิดว่าน่าจะไม่ต้องใช้ฐานข้อมูล traefik dashboard และ Kibana เพิ่มการ login ต่างหาก
|
||||
- Minio
|
||||
- Keycloak
|
||||
## คุณลักษณะปัจจุบัน
|
||||
|
||||
- เป็น Stand alone Product ไม่ขึ้นกับโปรเจ็กอื่น มีทุกอย่างใน Repository เดียวกัน
|
||||
- ใช้ Object Storage(MiniO) เก็บข้อมูล ใช้ minio presigned url ทั้งอัปโหลดและดาว์นโหลด จาก client โดยตรงลดการทำงานของ Backend รองรับไฟล์ขนาดใหญ่เป็นจำนวนมาก และยังมีความปลอดภัย
|
||||
- ไม่ใช้ SQL Database ข้อมูลต่างๆใช้จาก MiniO หรือ Elasticsearch เพื่อลดส่วนประกอบของระบบ ต้องการแบบเรียบง่าย
|
||||
- จัดทำ index เอกสารด้วย Attachment processory ของ Elasticsearch รองรับเอกสารหลายประเภท รองรับภาษาไทยซึ่งเป็นฟีเจอร์สำคัญของระบบ
|
||||
- Integrate ยูสเซอร์กับโปรเจ็กอื่นๆได้ด้วย Single Sign On ของ Keycloak
|
||||
- ฟีเจอร์ต่างๆของ MiniO เช่น Version, Quota , metadata อาจจะนำมาใช้ในระบบ
|
||||
- bucket notification เพื่อทำ index เอกสารภายหลัง อาจจะใช้ webhook หรือ RabbitMQ ทำให้อัปโหลดเอกสารพร้อมๆกันได้โดยไม่มีปัญหากับประสิทธิ์ภาพการทำ Index
|
||||
- ควรรองรับ multi tenant แบ่งตามแผนกหรือบริษัทต่อหนึ่ง bucket สิทธิ์ในการใช้ แบ่งตาม Role
|
||||
- login user ค้นหาเอกสารในระบบ อาจจะมี role dm_user เพิ่มเติมเพื่อจัดการเอกสารตัวเอง สามารถสร้างเอกสารส่วนตัวได้ แชร์โฟลเดอร์หรือเอกสาร ให้ยูสเซอร์หรือกลุ่ม ดู group ใน keycloak
|
||||
- dm_management: รับผิดชอบแต่ละ tenant ผู้ดูแลระบบระดับสูงกว่านั้นไม่ต้องมีเพราะใช้การจัดการ keycloak แทน
|
||||
- ตามความต้องการของ BMA จะใช้ 1 tenant(default) ผู้ใช้งานมีสอง Role
|
||||
- dm_management : เป็น role สำหรับจัดการ เพิ่ม ลบ แก้ไขจัดระเบียบ เอกสาร
|
||||
- login user: บุคคลเข้าระบบได้ไม่ต้องมี role พิเศษใดๆ ค้นหาและดาว์นโหลดเอกสาร
|
||||
|
||||
## คุณลักษณะที่ทำเพิ่มในอนาคต
|
||||
|
||||
อยู่นอกเหนือขอบเขตงานขณะนี้ แต่น่าจะเหมาะกับระบบส่วนอื่นๆ ต้องคุยกับทีมงานก่อน
|
||||
- ระบบจัดการเอกสารของยูสเซอร์ สามารถใช้แชร์กันได้
|
||||
- จัดทำ Site เพื่อใช้ร่วมกันหรือเผยแพร่
|
||||
- preview เอกสาร
|
||||
|
||||
## Note
|
||||
- ELK (Elasticsearch+Kibana) ใช้แบบ unsecure อยู่หลัง firewall น่าจะเพียงพอ อาจจะ[ปรับเพิ่มเรื่องความปลอดภัย](https://vorapoap.medium.com/%E0%B8%95%E0%B8%AD%E0%B8%99%E0%B8%97%E0%B8%B5%E0%B9%88-3-%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87-security-%E0%B9%83%E0%B8%AB%E0%B9%89%E0%B8%81%E0%B8%B1%E0%B8%9A-elasticsearch-aa26a71b87ff)ในอนาคน
|
||||
- RabbitMQ (อาจจะไม่ได้ใช้)
|
||||
|
||||
## Backend
|
||||
- Node.js (TypeScript), Express ,
|
||||
- Web API Doc สร้าย Open API Spec ด้วย tsoa
|
||||
- Share Library Document ใช้ TypeDoc (ถ้ามี)
|
||||
- Unit test ใช้ vitest (ยังไม่ยืนยัน)
|
||||
|
||||
## Frontend
|
||||
- Vue (TypeScript)
|
||||
- Unit test ใช้ vitest
|
||||
- UI test Cypress/Playwrite/Robot framework ?
|
||||
- Playbook สำหรับเอกสาร UI Component
|
||||
|
||||
## Team
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue