Make normal Use-Case diargam
This commit is contained in:
@ -1,20 +1,17 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.3.0 Safari/537.36" version="26.0.9">
|
||||
<diagram name="Page-1" id="Q5se_paezd7bh9Hq_2kQ">
|
||||
<mxGraphModel dx="819" dy="518" 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">
|
||||
<mxGraphModel dx="1687" dy="1067" 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="TsSuOcFh9R8wNlV-BA49-2" value="Користувач" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="550" width="120" height="60" as="geometry" />
|
||||
<mxGeometry x="60" y="30" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="TsSuOcFh9R8wNlV-BA49-3" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TsSuOcFh9R8wNlV-BA49-3" value="Пошук пакунку" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="313" y="550" width="156" height="60" as="geometry" />
|
||||
<mxCell id="TsSuOcFh9R8wNlV-BA49-3" value="Завдання параметрів фільтрації та сортування<div>результатів</div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="50" y="110" width="140" height="85" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-20" value="" style="group" parent="1" connectable="0" vertex="1">
|
||||
<mxGeometry x="533" y="550" width="120" height="60" as="geometry" />
|
||||
<mxGeometry x="249" y="30" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-22" value="" style="group" parent="g8Hk9kY67_a-sykVnxVS-20" connectable="0" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
@ -31,23 +28,12 @@
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-28" target="g8Hk9kY67_a-sykVnxVS-64" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-28" value="Фільтрація та сортування<div>результатів</div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="313" y="640" width="156" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-36" value="" style="group" parent="1" connectable="0" vertex="1">
|
||||
<mxGeometry x="533" y="620" width="120" height="60" as="geometry" />
|
||||
<mxGeometry x="250" y="165" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-37" value="" style="group" parent="g8Hk9kY67_a-sykVnxVS-36" connectable="0" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="g8Hk9kY67_a-sykVnxVS-37" source="g8Hk9kY67_a-sykVnxVS-38" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="160" y="30" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-38" value="<span style="white-space: pre;">	</span>&nbsp;&nbsp; Користувачі" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-37" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
@ -61,17 +47,12 @@
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-46" value="" style="group" parent="1" connectable="0" vertex="1">
|
||||
<mxGeometry x="533" y="690" width="120" height="60" as="geometry" />
|
||||
<mxGeometry x="249" y="225" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-47" value="" style="group" parent="g8Hk9kY67_a-sykVnxVS-46" connectable="0" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="g8Hk9kY67_a-sykVnxVS-47" source="g8Hk9kY67_a-sykVnxVS-48" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="160" y="30" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-48" value="<div><span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>Ролі</div><div><span style="white-space: pre;">	</span>&nbsp;&nbsp; користувачей</div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-47" vertex="1">
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-48" value="<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ролі</div><div><span style="white-space: pre;">	</span>&nbsp;&nbsp; користувачей</div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-47" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-49" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" parent="g8Hk9kY67_a-sykVnxVS-47" vertex="1">
|
||||
@ -83,42 +64,16 @@
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-64" target="xkRWYsoNMHkY_TOU-Azu-11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-64" value="<div>Вибір пакунку</div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="313" y="720" width="156" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-67" value="" style="group" parent="1" connectable="0" vertex="1">
|
||||
<mxGeometry x="160" y="680" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-68" value="" style="group" parent="g8Hk9kY67_a-sykVnxVS-67" connectable="0" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-69" value="<span style="white-space: pre;">	</span>&nbsp; <span style="white-space: pre;">	</span>Звіт" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-68" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-70" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" parent="g8Hk9kY67_a-sykVnxVS-68" vertex="1">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-71" value="" style="endArrow=none;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" parent="g8Hk9kY67_a-sykVnxVS-68" source="g8Hk9kY67_a-sykVnxVS-69" target="g8Hk9kY67_a-sykVnxVS-69" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="10" y="90" as="sourcePoint" />
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
<mxGeometry x="49" y="280" width="142" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-76" value="" style="group" parent="1" connectable="0" vertex="1">
|
||||
<mxGeometry x="533" y="760" width="120" height="60" as="geometry" />
|
||||
<mxGeometry x="249" y="90" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-77" value="" style="group" parent="g8Hk9kY67_a-sykVnxVS-76" connectable="0" vertex="1">
|
||||
<mxGeometry x="2" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="g8Hk9kY67_a-sykVnxVS-77" source="g8Hk9kY67_a-sykVnxVS-78" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="60" y="90" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-78" value="<span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>Бази<div>&nbsp; &nbsp;&nbsp;<span style="white-space: pre;">	</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="white-space: pre;">	</span>пакунків</div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-77" vertex="1">
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-78" value="<span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>&nbsp;Бази<div>&nbsp; &nbsp;&nbsp;<span style="white-space: pre;">	</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;пакунків</div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-77" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-79" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" parent="g8Hk9kY67_a-sykVnxVS-77" vertex="1">
|
||||
@ -130,60 +85,208 @@
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-87" target="g8Hk9kY67_a-sykVnxVS-69" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-87" value="Формування звіту та завантаження" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="820" width="156" height="60" as="geometry" />
|
||||
<mxGeometry x="50" y="420" width="140" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-89" value="" style="group" parent="1" connectable="0" vertex="1">
|
||||
<mxGeometry x="20" y="680" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-27" 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;" parent="1" source="xkRWYsoNMHkY_TOU-Azu-11" target="g8Hk9kY67_a-sykVnxVS-87" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-11" value="Перегляд інформацї про пакунок" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="360" y="820" width="156" height="60" as="geometry" />
|
||||
<mxGeometry x="50" y="340" width="140" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="TsSuOcFh9R8wNlV-BA49-2" target="TsSuOcFh9R8wNlV-BA49-3" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-19" target="TsSuOcFh9R8wNlV-BA49-3" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="g8Hk9kY67_a-sykVnxVS-39" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-47" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="43nrA4cYu7d4_LjxyBvL-1" target="TsSuOcFh9R8wNlV-BA49-2">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="-20" y="60" as="targetPoint" />
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="650" />
|
||||
<mxPoint x="500" y="670" />
|
||||
<mxPoint x="30" y="530" />
|
||||
<mxPoint x="30" y="60" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-79" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="790" />
|
||||
<mxPoint x="500" y="670" />
|
||||
</Array>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-1" value="Звіт" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="61" y="500" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-28" value="<div><span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">Пошук пакунку</span></div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="55" y="220" width="130" height="40" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-5" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-19">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="190" y="240" as="sourcePoint" />
|
||||
<mxPoint x="220" y="60" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-49" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="720" />
|
||||
<mxPoint x="500" y="670" />
|
||||
</Array>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="195.5" as="sourcePoint" />
|
||||
<mxPoint x="220" y="195.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-69" target="TsSuOcFh9R8wNlV-BA49-2" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-7" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="249.5" as="sourcePoint" />
|
||||
<mxPoint x="220" y="249.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-17" target="xkRWYsoNMHkY_TOU-Azu-11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="693" y="580" />
|
||||
<mxPoint x="693" y="850" />
|
||||
</Array>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-8" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="119" as="sourcePoint" />
|
||||
<mxPoint x="220" y="119" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-10" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="220" y="250" as="sourcePoint" />
|
||||
<mxPoint x="220" y="60" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-15" value="" style="group" connectable="0" vertex="1" parent="1">
|
||||
<mxGeometry x="248" y="440" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-16" value="" style="group" connectable="0" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-15">
|
||||
<mxGeometry x="2" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-17" value="<span style="white-space: pre;">	</span>&nbsp; &nbsp; Залежності<div><span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>пакунку<br></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-16">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-18" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-16">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-19" value="" style="endArrow=none;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="43nrA4cYu7d4_LjxyBvL-16" source="43nrA4cYu7d4_LjxyBvL-17" target="43nrA4cYu7d4_LjxyBvL-17">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="10" y="90" as="sourcePoint" />
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-20" value="" style="group" connectable="0" vertex="1" parent="1">
|
||||
<mxGeometry x="247" y="310" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-21" value="" style="group" connectable="0" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-20">
|
||||
<mxGeometry x="2" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-22" value="<span style="white-space: pre;">	</span>&nbsp; &nbsp; Відносини<div><span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>пакунку<br></div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-21">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-23" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-21">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-24" value="" style="endArrow=none;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="43nrA4cYu7d4_LjxyBvL-21" source="43nrA4cYu7d4_LjxyBvL-22" target="43nrA4cYu7d4_LjxyBvL-22">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="10" y="90" as="sourcePoint" />
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-25" value="" style="group" connectable="0" vertex="1" parent="1">
|
||||
<mxGeometry x="248" y="500" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-26" value="" style="group" connectable="0" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-25">
|
||||
<mxGeometry x="2" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-27" value="<span style="white-space: pre;">	</span>&nbsp; &nbsp;<span style="white-space: pre;">	</span>Типи<br><span style="white-space: pre;">	</span>&nbsp; &nbsp;залежності" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-26">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-28" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-26">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-29" value="" style="endArrow=none;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="43nrA4cYu7d4_LjxyBvL-26" source="43nrA4cYu7d4_LjxyBvL-27" target="43nrA4cYu7d4_LjxyBvL-27">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="10" y="90" as="sourcePoint" />
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-30" value="" style="group" connectable="0" vertex="1" parent="1">
|
||||
<mxGeometry x="247" y="370" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-31" value="" style="group" connectable="0" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-30">
|
||||
<mxGeometry x="2" width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-32" value="<span style="white-space: pre;">	</span>&nbsp; &nbsp;<span style="white-space: pre;">	</span>Типи<br><span style="white-space: pre;">	</span>&nbsp; &nbsp;відносин" style="rounded=0;whiteSpace=wrap;html=1;align=left;" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-31">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-33" value="D" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;movable=1;resizable=1;rotatable=1;deletable=1;editable=1;locked=0;connectable=1;points=[[0,0,0,0,0],[0,0.25,0,0,0],[0,0.5,0,0,0],[0,0.75,0,0,0],[0,1,0,0,0],[0.25,0,0,0,0],[0.25,1,0,0,0],[0.5,0,0,0,0],[0.5,1,0,0,0],[0.75,0,0,0,0],[0.75,1,0,0,0],[1,0,0,0,0],[1,0.25,0,0,0],[1,0.5,0,0,0],[1,0.75,0,0,0],[1,1,0,0,0]];" vertex="1" parent="43nrA4cYu7d4_LjxyBvL-31">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-34" value="" style="endArrow=none;html=1;rounded=0;entryX=0.25;entryY=0;entryDx=0;entryDy=0;exitX=0.25;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="43nrA4cYu7d4_LjxyBvL-31" source="43nrA4cYu7d4_LjxyBvL-32" target="43nrA4cYu7d4_LjxyBvL-32">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="10" y="90" as="sourcePoint" />
|
||||
<mxPoint x="60" y="15" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-48" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="g8Hk9kY67_a-sykVnxVS-28">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="220" y="239.5" as="sourcePoint" />
|
||||
<mxPoint x="190" y="239.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-50" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="249" y="340" as="sourcePoint" />
|
||||
<mxPoint x="220" y="340" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-51" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="475.5" as="sourcePoint" />
|
||||
<mxPoint x="220" y="475.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-52" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="529.5" as="sourcePoint" />
|
||||
<mxPoint x="220" y="529.5" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-53" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="399" as="sourcePoint" />
|
||||
<mxPoint x="220" y="399" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-54" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="220" y="530" as="sourcePoint" />
|
||||
<mxPoint x="220" y="340" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-55" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="220" y="369.5" as="sourcePoint" />
|
||||
<mxPoint x="190" y="370" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-57" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="xkRWYsoNMHkY_TOU-Azu-11" target="g8Hk9kY67_a-sykVnxVS-87">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="340" as="sourcePoint" />
|
||||
<mxPoint x="170" y="290" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-59" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="480" as="sourcePoint" />
|
||||
<mxPoint x="120" y="500" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-60" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="320" as="sourcePoint" />
|
||||
<mxPoint x="120" y="340" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-61" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="260" as="sourcePoint" />
|
||||
<mxPoint x="120" y="280" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-62" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.498;exitY=0.984;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="119.72000000000003" y="194.64" as="sourcePoint" />
|
||||
<mxPoint x="120" y="221" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="43nrA4cYu7d4_LjxyBvL-63" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="120" y="90" as="sourcePoint" />
|
||||
<mxPoint x="120" y="110" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
|
@ -1,166 +1,715 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.3.0 Safari/537.36" version="26.0.9">
|
||||
<diagram name="Page-1" id="b5b7bab2-c9e2-2cf4-8b2a-24fd1a2a6d21">
|
||||
<mxGraphModel dx="819" dy="518" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<mxGraphModel dx="2885" dy="2345" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-1" value="Неавтентифікований&nbsp;<div>К<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">ористувач</span></div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="210" y="125" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-2" value="<span style="font-size: 10px;">Автентифікація</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="200" y="260" width="80" height="45" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.269;exitY=0.967;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-2" target="fWsHJvBSsPRKD1qfUvCc-7" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="745" y="-82" as="sourcePoint" />
|
||||
<mxPoint x="715" y="-82" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-1" value="Будь-який&nbsp;<div>К<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">ористувач</span></div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="25" y="150" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-7" value="<span style="font-size: 10px;">Логін</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="320" width="60" height="45" as="geometry" />
|
||||
<mxGeometry x="50" y="60.5" width="60" height="31" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-8" value="<span style="font-size: 10px;">Реєстрація</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="230" y="320" width="70" height="45" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-2" target="fWsHJvBSsPRKD1qfUvCc-8" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="693" y="-42" as="sourcePoint" />
|
||||
<mxPoint x="714" y="-66" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-10" value="<span style="font-size: 10px;">Статистика</span><div><span style="font-size: 10px;">репозиторію</span></div>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="300" y="260" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-11" value="<span style="font-size: 10px;">Статистика<br>акаунту</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="280" y="370" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-12" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.222;entryY=0.058;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-10" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="220" as="sourcePoint" />
|
||||
<mxPoint x="460" y="-50" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
<mxGeometry x="70" y="94" width="70" height="33" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-13" value="<span style="font-size: 10px;">Пошук пакунків</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="310" y="30" width="90" height="52" as="geometry" />
|
||||
<mxGeometry x="150" y="63" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-13" edge="1">
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.406;entryY=0.957;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-13" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="150" as="sourcePoint" />
|
||||
<mxPoint x="60" y="160" as="sourcePoint" />
|
||||
<mxPoint x="480" y="-40" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-17" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-2" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="240" y="230" as="sourcePoint" />
|
||||
<mxPoint x="610" y="-80" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-18" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.444;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.784;exitY=0.115;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="fWsHJvBSsPRKD1qfUvCc-21" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="423" y="130" as="sourcePoint" />
|
||||
<mxPoint x="600" y="-70" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-19" value="<span style="font-size: 10px;">Інформація пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="220" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-20" value="<span style="font-size: 10px;">Інформація<br>бази пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="125" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-21" value="<span style="font-size: 10px;">Інформація<br>користувача</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="450" y="40" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-22" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-10" target="fWsHJvBSsPRKD1qfUvCc-19" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="433" y="-40" as="sourcePoint" />
|
||||
<mxPoint x="480" y="-40" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-23" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="fWsHJvBSsPRKD1qfUvCc-20" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="550" y="-20" as="sourcePoint" />
|
||||
<mxPoint x="600" y="-70" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-28" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.736;exitY=0.981;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-7" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="475" y="18" as="sourcePoint" />
|
||||
<mxPoint x="220" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-29" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.324;exitY=0.959;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-8" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="583" y="98" as="sourcePoint" />
|
||||
<mxPoint x="240" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-34" value="<span style="font-size: 10px;">Редагування<br>користувача</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="280" width="90" height="52" as="geometry" />
|
||||
<mxGeometry x="230" y="220" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-35" value="<span style="font-size: 10px;">Редагування<br>пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="390" y="432" width="90" height="52" as="geometry" />
|
||||
<mxGeometry x="390" y="290" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-36" value="<span style="font-size: 10px;">Редагування<br>бази пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="360" width="90" height="52" as="geometry" />
|
||||
<mxGeometry x="250" y="280" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-40" value="Автентифікований&nbsp;<div>К<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">ористувач</span></div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="210" y="400" width="30" height="60" as="geometry" />
|
||||
<mxGeometry x="25" y="386" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-42" value="<span style="font-size: 10px;">Відкриття<br>веб-покликання</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="133" width="90" height="52" as="geometry" />
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-42" value="<span style="font-size: 10px;">Відкриття<br>веб-покликання на ресурс пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="660" y="134" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-45" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.389;exitY=1.011;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.531;entryY=0.006;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" edge="1" target="fWsHJvBSsPRKD1qfUvCc-42">
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-6" value="<span style="font-size: 10px;">Пошук за покликанням</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="600" y="82" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-7" value="<span style="font-size: 10px;">Пошук за назвою</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="50" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-8" value="<span style="font-size: 10px;">Пошук за назвою бази</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="680" y="-20" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-9" value="<span style="font-size: 10px;">Пошук за описом</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="500" y="82" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-11" value="<span style="font-size: 10px;">Властивості пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="-10" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-15" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.247;entryY=0.94;entryDx=0;entryDy=0;exitX=0.937;exitY=0.215;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-7" target="V5Ab3TWy5OOZFwxnvpL4-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="320" y="90" as="sourcePoint" />
|
||||
<mxPoint x="320" y="130" as="targetPoint" />
|
||||
<mxPoint x="370" y="50" as="sourcePoint" />
|
||||
<mxPoint x="400" y="18" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-46" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.459;exitY=-0.029;exitDx=0;exitDy=0;exitPerimeter=0;startArrow=classic;startFill=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-19" target="fWsHJvBSsPRKD1qfUvCc-20" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="420" y="220" as="sourcePoint" />
|
||||
<mxPoint x="490" y="164" as="targetPoint" />
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-23" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-15">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-47" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.078;entryY=0.224;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="fWsHJvBSsPRKD1qfUvCc-19" edge="1">
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-17" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-9" target="V5Ab3TWy5OOZFwxnvpL4-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="433" y="140" as="sourcePoint" />
|
||||
<mxPoint x="508" y="133" as="targetPoint" />
|
||||
<mxPoint x="506" y="95" as="sourcePoint" />
|
||||
<mxPoint x="572" y="41" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-48" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0.778;entryY=0.962;entryDx=0;entryDy=0;startArrow=classic;startFill=1;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-19" target="fWsHJvBSsPRKD1qfUvCc-21" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="551" y="207" as="sourcePoint" />
|
||||
<mxPoint x="487" y="233" as="targetPoint" />
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-24" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-17">
|
||||
<mxGeometry x="-0.0655" y="1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-49" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.268;entryY=0.962;entryDx=0;entryDy=0;startArrow=classic;startFill=1;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-20" target="fWsHJvBSsPRKD1qfUvCc-21" edge="1">
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-18" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.819;entryY=0.912;entryDx=0;entryDy=0;exitX=0.393;exitY=0.032;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-6" target="V5Ab3TWy5OOZFwxnvpL4-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="578" y="223" as="sourcePoint" />
|
||||
<mxPoint x="557" y="174" as="targetPoint" />
|
||||
<mxPoint x="595" y="92" as="sourcePoint" />
|
||||
<mxPoint x="595" y="44" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-50" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.024;entryY=0.764;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.667;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-11" target="fWsHJvBSsPRKD1qfUvCc-34" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="430" as="sourcePoint" />
|
||||
<mxPoint x="470" y="280" as="targetPoint" />
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-25" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-18">
|
||||
<mxGeometry x="0.0256" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-51" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.99;exitY=0.344;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-11" target="fWsHJvBSsPRKD1qfUvCc-36" edge="1">
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-20" value="" style="endArrow=classic;html=1;rounded=0;entryX=1.025;entryY=0.61;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-8" target="V5Ab3TWy5OOZFwxnvpL4-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="446" as="sourcePoint" />
|
||||
<mxPoint x="470" y="280" as="targetPoint" />
|
||||
<mxPoint x="669" y="102" as="sourcePoint" />
|
||||
<mxPoint x="624" y="39" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-52" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.191;entryY=0.05;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-11" target="fWsHJvBSsPRKD1qfUvCc-35" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="460" as="sourcePoint" />
|
||||
<mxPoint x="470" y="380" as="targetPoint" />
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-33" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-20">
|
||||
<mxGeometry x="0.0148" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-53" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-11" edge="1">
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-21" value="<span style="font-size: 10px;">Пошук за користувачем</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="-80" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-27" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.994;entryY=0.618;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-11" target="V5Ab3TWy5OOZFwxnvpL4-65">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="430" as="sourcePoint" />
|
||||
<mxPoint x="540" y="270" as="targetPoint" />
|
||||
<mxPoint x="506" y="95" as="sourcePoint" />
|
||||
<mxPoint x="490" y="-20" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-28" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-27">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint y="-2" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-29" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-21" target="V5Ab3TWy5OOZFwxnvpL4-65">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="370" y="50" as="sourcePoint" />
|
||||
<mxPoint x="450" y="-50" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-35" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-29">
|
||||
<mxGeometry x="-0.0981" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-36" value="<span style="font-size: 10px;">Пошук за ім'ям меінтейнера</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="530" y="-164" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-37" value="<span style="font-size: 10px;">Пошук за ім'ям помітчика</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="630" y="-140" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-38" value="<span style="font-size: 10px;">Пошук за ім'ям завантажувача</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="-78" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-39" value="<span style="font-size: 10px;">Пошук за ім'ям пакувальника</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="430" y="-160" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-40" value="" style="endArrow=none;html=1;rounded=0;entryX=0.751;entryY=0.978;entryDx=0;entryDy=0;exitX=0.223;exitY=0.077;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;startFill=1;startArrow=classic;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-21" target="V5Ab3TWy5OOZFwxnvpL4-39">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="570" y="18" as="sourcePoint" />
|
||||
<mxPoint x="490" y="18" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-41" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-40">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint y="-2" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-42" value="" style="endArrow=none;html=1;rounded=0;entryX=0.57;entryY=0.994;entryDx=0;entryDy=0;entryPerimeter=0;startFill=1;startArrow=classic;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-21" target="V5Ab3TWy5OOZFwxnvpL4-36">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="570" y="-72" as="sourcePoint" />
|
||||
<mxPoint x="590" y="-110" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-43" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-42">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint y="-2" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-44" value="" style="endArrow=none;html=1;rounded=0;entryX=0.237;entryY=0.917;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.969;exitY=0.228;exitDx=0;exitDy=0;exitPerimeter=0;startFill=1;startArrow=classic;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-21" target="V5Ab3TWy5OOZFwxnvpL4-37">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="604" y="-76" as="sourcePoint" />
|
||||
<mxPoint x="614" y="-107" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-45" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-44">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint y="-2" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-46" value="" style="endArrow=none;html=1;rounded=0;exitX=0.961;exitY=0.681;exitDx=0;exitDy=0;exitPerimeter=0;startFill=1;startArrow=classic;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-21" target="V5Ab3TWy5OOZFwxnvpL4-38">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="637" y="-64" as="sourcePoint" />
|
||||
<mxPoint x="672" y="-86" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-47" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-46">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint x="5" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-48" value="<span style="font-size: 10px;">Пошук за описом</span><div><span style="font-size: 10px;">бази</span></div>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="670" y="42" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-52" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.927;entryY=0.773;entryDx=0;entryDy=0;exitX=0;exitY=0.346;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-48" target="V5Ab3TWy5OOZFwxnvpL4-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="779" y="30" as="sourcePoint" />
|
||||
<mxPoint x="662" y="24" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-53" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-52">
|
||||
<mxGeometry x="0.0148" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-54" value="<span style="font-size: 10px;">Вибір режиму сортування</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="270" y="-62" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-55" value="<span style="font-size: 10px;">Сортування за назвою пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="220" y="-152" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-56" value="<span style="font-size: 10px;">Сортування за версією пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="400" y="-100" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-57" value="<span style="font-size: 10px;">Сортування за назвою бази</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="323.5" y="-152" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-58" value="<span style="font-size: 10px;">Сортування за часом створення</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="-152" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-59" value="<span style="font-size: 10px;">Сортування за часом оновлення</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="-98" width="100" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-65" value="<span style="font-size: 10px;">Вибір режиму пошуку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="350" y="-20" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-66" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.003;entryY=0.589;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="V5Ab3TWy5OOZFwxnvpL4-65">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="110" y="110" as="sourcePoint" />
|
||||
<mxPoint x="170" y="86" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-67" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-66">
|
||||
<mxGeometry x="-0.1232" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-68" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.326;entryY=0.993;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.778;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="V5Ab3TWy5OOZFwxnvpL4-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="230" y="49" as="sourcePoint" />
|
||||
<mxPoint x="230" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-69" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-68">
|
||||
<mxGeometry x="-0.1232" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-70" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.241;entryY=0.09;entryDx=0;entryDy=0;exitX=0.702;exitY=0.984;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-55" target="V5Ab3TWy5OOZFwxnvpL4-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="38.5" y="-469" as="sourcePoint" />
|
||||
<mxPoint x="124.5" y="-523" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-71" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-70">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-72" value="" style="endArrow=classic;html=1;rounded=0;entryX=-0.004;entryY=0.34;entryDx=0;entryDy=0;exitX=0.983;exitY=0.731;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-58" target="V5Ab3TWy5OOZFwxnvpL4-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="45.5" y="-372" as="sourcePoint" />
|
||||
<mxPoint x="2.5" y="-372" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-73" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-72">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-74" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.552;entryY=-0.035;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.369;exitY=0.955;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-57" target="V5Ab3TWy5OOZFwxnvpL4-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="-7.5" y="-254" as="sourcePoint" />
|
||||
<mxPoint x="-10.5" y="-354" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-75" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-74">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-76" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.963;entryY=0.33;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-56" target="V5Ab3TWy5OOZFwxnvpL4-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="-27.5" y="-251" as="sourcePoint" />
|
||||
<mxPoint x="-57.5" y="-356" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-77" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-76">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-78" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.002;entryY=0.599;entryDx=0;entryDy=0;exitX=1.005;exitY=0.634;exitDx=0;exitDy=0;entryPerimeter=0;exitPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-59" target="V5Ab3TWy5OOZFwxnvpL4-54">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="-17.5" y="-223" as="sourcePoint" />
|
||||
<mxPoint x="-42.5" y="-346" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-79" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-78">
|
||||
<mxGeometry x="-0.0793" y="2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-82" value="<span style="font-size: 10px;">Введення тексту для пошуку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="50" y="-54" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-83" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.797;entryY=0.909;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="V5Ab3TWy5OOZFwxnvpL4-82">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="254" y="73" as="sourcePoint" />
|
||||
<mxPoint x="347" y="40" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-84" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-83">
|
||||
<mxGeometry x="-0.1232" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-85" value="<span style="font-size: 10px;">Вибір строгості пошуку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="-40" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-86" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.315;entryY=0.953;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="V5Ab3TWy5OOZFwxnvpL4-85">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="254" y="73" as="sourcePoint" />
|
||||
<mxPoint x="347" y="40" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-87" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-86">
|
||||
<mxGeometry x="-0.1232" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-88" value="<span style="font-size: 10px;">Вибір ліміту кількості результатів</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="46" width="110" height="56" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-91" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.057;entryY=0.769;entryDx=0;entryDy=0;exitX=1.007;exitY=0.627;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="V5Ab3TWy5OOZFwxnvpL4-88">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="198" y="108" as="sourcePoint" />
|
||||
<mxPoint x="224" y="133" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-92" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-91">
|
||||
<mxGeometry x="-0.1232" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-93" value="<span style="font-size: 10px;">Вибір порядку сортування</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="10" y="-2" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-95" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.111;exitY=0.192;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="V5Ab3TWy5OOZFwxnvpL4-93">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="180" y="60" as="sourcePoint" />
|
||||
<mxPoint x="188" y="20" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-96" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-95">
|
||||
<mxGeometry x="-0.1232" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-97" value="<span style="font-size: 10px;">Перегляд статистики репозиторію&nbsp;</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="110" y="220" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-99" value="<span style="font-size: 10px;">Перегляд інформації про пакунок&nbsp;</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="150" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-100" value="<span style="font-size: 10px;">Перегляд інформації про користувача&nbsp;</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="127" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-103" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="V5Ab3TWy5OOZFwxnvpL4-99">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="200" as="sourcePoint" />
|
||||
<mxPoint x="170" y="160" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-106" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="V5Ab3TWy5OOZFwxnvpL4-100">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="70" y="180" as="sourcePoint" />
|
||||
<mxPoint x="121" y="143" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-107" value="<span style="font-size: 10px;">Перегляд інформації про базу пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="323.5" y="115" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-108" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.081;entryY=0.226;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.997;exitY=0.652;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-107" target="V5Ab3TWy5OOZFwxnvpL4-99">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="114" y="171" as="sourcePoint" />
|
||||
<mxPoint x="169" y="232" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-109" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-108">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-110" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.99;entryY=0.381;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-107" target="V5Ab3TWy5OOZFwxnvpL4-100">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="290" y="190" as="sourcePoint" />
|
||||
<mxPoint x="300" y="170" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-111" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-110">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-112" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="V5Ab3TWy5OOZFwxnvpL4-97">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="80" y="210" as="sourcePoint" />
|
||||
<mxPoint x="219" y="165" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-113" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=-0.006;exitY=0.564;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-42" target="V5Ab3TWy5OOZFwxnvpL4-99">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="480" y="190" as="sourcePoint" />
|
||||
<mxPoint x="331" y="183" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-114" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-113">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-120" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="40" y="260" as="sourcePoint" />
|
||||
<mxPoint x="40" y="380" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-123" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.02;entryY=0.74;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="fWsHJvBSsPRKD1qfUvCc-7">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="40" y="140" as="sourcePoint" />
|
||||
<mxPoint x="197" y="123" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-124" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.029;entryY=0.736;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="fWsHJvBSsPRKD1qfUvCc-8">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="50" y="150" as="sourcePoint" />
|
||||
<mxPoint x="61" y="93" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-126" value="<span style="font-size: 10px;">Редагування<br>даних</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="305" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-127" value="<span style="font-size: 10px;">Додаваня<br>даних</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="130" y="370" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-129" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.288;entryDx=0;entryDy=0;exitX=0;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-34" target="V5Ab3TWy5OOZFwxnvpL4-126">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="320" y="300" as="sourcePoint" />
|
||||
<mxPoint x="610" y="190" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-130" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-129">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-131" value="<span style="font-size: 10px;">Редагування<br>ролей користувачів</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="390" y="210" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-132" value="<span style="font-size: 10px;">Редагування<br>залежностей пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="218.5" width="100" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-133" value="<span style="font-size: 10px;">Редагування<br>відносин пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="640" y="222.5" width="100" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-134" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=-0.022;exitY=0.427;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-131" target="fWsHJvBSsPRKD1qfUvCc-34">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="300" y="296" as="sourcePoint" />
|
||||
<mxPoint x="200" y="296" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-135" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-134">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-136" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.965;entryY=0.259;entryDx=0;entryDy=0;exitX=0.562;exitY=1.046;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-131" target="fWsHJvBSsPRKD1qfUvCc-36">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="388" y="256" as="sourcePoint" />
|
||||
<mxPoint x="360" y="309" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-137" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-136">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-138" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.021;entryY=0.424;entryDx=0;entryDy=0;exitX=0.989;exitY=0.699;exitDx=0;exitDy=0;exitPerimeter=0;entryPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-36" target="fWsHJvBSsPRKD1qfUvCc-35">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="452" y="293" as="sourcePoint" />
|
||||
<mxPoint x="435" y="335" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-139" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-138">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-142" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-36" target="V5Ab3TWy5OOZFwxnvpL4-126">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="309" as="sourcePoint" />
|
||||
<mxPoint x="215" y="361" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-143" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-142">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-144" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.917;entryY=0.809;entryDx=0;entryDy=0;exitX=0.092;exitY=0.822;exitDx=0;exitDy=0;entryPerimeter=0;exitPerimeter=0;" edge="1" parent="1" source="fWsHJvBSsPRKD1qfUvCc-35" target="V5Ab3TWy5OOZFwxnvpL4-126">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="379" y="348" as="sourcePoint" />
|
||||
<mxPoint x="215" y="361" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-145" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-144">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-146" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="V5Ab3TWy5OOZFwxnvpL4-126">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="60" y="380" as="sourcePoint" />
|
||||
<mxPoint x="82" y="128" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-147" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.933;entryY=0.204;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-132" target="fWsHJvBSsPRKD1qfUvCc-35">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="462" y="283" as="sourcePoint" />
|
||||
<mxPoint x="347" y="303" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-148" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-147">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-149" value="" style="endArrow=classic;html=1;rounded=0;entryX=1.013;entryY=0.616;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-133" target="fWsHJvBSsPRKD1qfUvCc-35">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="545" y="276" as="sourcePoint" />
|
||||
<mxPoint x="484" y="311" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-150" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-149">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-152" value="<span style="font-size: 10px;">Створення<br>пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="420" y="357" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-153" value="<span style="font-size: 10px;">Створення<br>бази пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="280" y="390" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-154" value="<span style="font-size: 10px;">Призначення ролей користувачам</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="530" y="386" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-155" value="<span style="font-size: 10px;">Створення<br>залежностей пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="660" y="302" width="100" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-156" value="<span style="font-size: 10px;">Створення<br>відносин пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="550" y="305" width="100" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-157" value="" style="endArrow=classic;html=1;rounded=0;" edge="1" parent="1" target="V5Ab3TWy5OOZFwxnvpL4-127">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="60" y="400" as="sourcePoint" />
|
||||
<mxPoint x="110" y="341" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-158" value="" style="endArrow=classic;html=1;rounded=0;exitX=-0.016;exitY=0.401;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.956;entryY=0.305;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-152" target="V5Ab3TWy5OOZFwxnvpL4-127">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="260" y="316" as="sourcePoint" />
|
||||
<mxPoint x="220" y="410" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-159" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-158">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-160" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.946;entryY=0.783;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-153" target="V5Ab3TWy5OOZFwxnvpL4-127">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="260" y="316" as="sourcePoint" />
|
||||
<mxPoint x="200" y="341" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-161" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-160">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-162" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.308;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-153" target="V5Ab3TWy5OOZFwxnvpL4-152">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="330" y="420" as="sourcePoint" />
|
||||
<mxPoint x="364" y="397" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-163" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-162">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-164" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-154" target="V5Ab3TWy5OOZFwxnvpL4-153">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="570" y="330" as="sourcePoint" />
|
||||
<mxPoint x="491" y="332" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-165" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-164">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-166" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.957;entryY=0.602;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-155" target="V5Ab3TWy5OOZFwxnvpL4-152">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="665" y="279" as="sourcePoint" />
|
||||
<mxPoint x="500" y="430" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-167" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-166">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-168" value="" style="endArrow=classic;html=1;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-156" target="V5Ab3TWy5OOZFwxnvpL4-152">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="534" y="353" as="sourcePoint" />
|
||||
<mxPoint x="460" y="410" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-169" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-168">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-172" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.024;entryY=0.292;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" target="V5Ab3TWy5OOZFwxnvpL4-174">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="70" y="430" as="sourcePoint" />
|
||||
<mxPoint x="125.67000000000007" y="454.22" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-174" value="<span style="font-size: 10px;">Видалення<br>даних</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="100" y="470" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-175" value="<span style="font-size: 10px;">Видалення<br>пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="250" y="457" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-176" value="<span style="font-size: 10px;">Видалення бази пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="500" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-177" value="<span style="font-size: 10px;">Видалення ролей користувачів</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="620" y="480" width="110" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-178" value="<span style="font-size: 10px;">Видалення<br>залежностей пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="510" y="457" width="100" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-179" value="<span style="font-size: 10px;">Видалення<br>відносин пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="410" y="422" width="100" height="55" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-180" value="" style="endArrow=classic;html=1;rounded=0;exitX=-0.016;exitY=0.401;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.928;entryY=0.252;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-175" target="V5Ab3TWy5OOZFwxnvpL4-174">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="511" as="sourcePoint" />
|
||||
<mxPoint x="230" y="605" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-181" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-180">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-182" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.946;entryY=0.783;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-176" target="V5Ab3TWy5OOZFwxnvpL4-174">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="511" as="sourcePoint" />
|
||||
<mxPoint x="210" y="536" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-183" value="extend" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-182">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-184" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.088;exitY=0.179;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.999;entryY=0.674;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-176" target="V5Ab3TWy5OOZFwxnvpL4-175">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="410" y="530" as="sourcePoint" />
|
||||
<mxPoint x="320" y="510" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-185" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-184">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-186" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.009;entryY=0.643;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryPerimeter=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-176" target="V5Ab3TWy5OOZFwxnvpL4-177">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="501" y="527" as="sourcePoint" />
|
||||
<mxPoint x="580" y="525" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-187" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-186">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-188" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-175" target="V5Ab3TWy5OOZFwxnvpL4-178">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="510" y="625" as="sourcePoint" />
|
||||
<mxPoint x="675" y="474" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-189" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-188">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-190" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="V5Ab3TWy5OOZFwxnvpL4-175" target="V5Ab3TWy5OOZFwxnvpL4-179">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="470" y="605" as="sourcePoint" />
|
||||
<mxPoint x="544" y="548" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="V5Ab3TWy5OOZFwxnvpL4-191" value="include" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="V5Ab3TWy5OOZFwxnvpL4-190">
|
||||
<mxGeometry x="-0.2026" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 54 KiB |
Binary file not shown.
Before Width: | Height: | Size: 122 KiB After Width: | Height: | Size: 292 KiB |
@ -1,13 +1,13 @@
|
||||
#import "template.typ": *
|
||||
|
||||
#let author = (
|
||||
#let author = /*{{{*/ (
|
||||
name: "Білоус А. А.",
|
||||
full_name_gen: "Білоуса Антона Андрійовича",
|
||||
group: "ПЗПІ-23-3",
|
||||
gender: "m",
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#let mentors = (
|
||||
#let mentors = /*{{{*/ (
|
||||
(
|
||||
name: "Широкопетлєва М. С.",
|
||||
gender: "f",
|
||||
@ -23,41 +23,41 @@
|
||||
gender: "f",
|
||||
degree: "Доц. каф. ПІ",
|
||||
),
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#let task_list = (
|
||||
#let task_list = /*{{{*/ (
|
||||
done_date: datetime(year: 2024, month: 12, day: 27),
|
||||
initial_date: datetime(year: 2024, month: 9, day: 25),
|
||||
source: "методичні вказівки до виконання курсової роботи, вимоги до інформаційної системи, предметна область, що пов’язана з пакунковим репозиторієм та його менеджментом.",
|
||||
content: "вступ, аналіз предметної області; постановка задачі; проектування бази даних; опис програми; висновки; перелік джерел посилання.",
|
||||
graphics: "загальна діаграма класів, ER-діаграма, UML-діаграми, DFD-діаграма, схема БД в 1НФ, 2НФ, 3НФ, копії екранів (“скриншоти”) прикладної програми, приклади звітів прикладної програми.",
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#let calendar_plan = (
|
||||
#let calendar_plan /*{{{*/ = (
|
||||
plan_table: [
|
||||
#table(
|
||||
columns: 4,
|
||||
align: (center, left, center, center),
|
||||
[Номер], [Назва етапів курсової роботи], [Строк виконання етапів роботи], [Примітки],
|
||||
[1], [Аналіз предметної області], [25.09.24 - 30.09.24], [Виконано],
|
||||
[2], [Концептуальне моделювання], [30.09.24 - 3.10.24], [Виконано],
|
||||
[2], [Постановка задачі], [3.10.24 - 10.10.24], [Виконано],
|
||||
[1], [Аналіз предметної області], [25.09.24 -- 30.09.24], [Виконано],
|
||||
[2], [Концептуальне моделювання], [30.09.24 -- 3.10.24], [Виконано],
|
||||
[2], [Постановка задачі], [3.10.24 -- 10.10.24], [Виконано],
|
||||
[3], [Побудова ER-діаграми та схеми БД], [10.10.24 - 15.10.24], [Виконано],
|
||||
[4], [Оформлення розділів 1, 2 та 3.1, 3.2 пояснювальної записки], [15.10.24 - 18.10.24], [Виконано],
|
||||
[4], [Оформлення розділів 1, 2 та 3.1, 3.2 пояснювальної записки], [15.10.24 -- 18.10.24], [Виконано],
|
||||
[5], [Перша контрольна точка з курсової роботи], [20.10.24], [Виконано],
|
||||
[6], [Нормалізація бази даних], [20.10.24 - 15.11.24], [Виконано],
|
||||
[7], [Створення програми], [20.10.24 - 20.11.24], [Виконано],
|
||||
[8], [Тестування програми, наповнення бази даних], [20.11.24 - 5.12.24], [Виконано],
|
||||
[6], [Нормалізація бази даних], [20.10.24 -- 15.11.24], [Виконано],
|
||||
[7], [Створення програми], [20.10.24 -- 20.11.24], [Виконано],
|
||||
[8], [Тестування програми, наповнення бази даних], [20.11.24 -- 5.12.24], [Виконано],
|
||||
[9], [Друга контрольна точка з курсової роботи], [7.12.24], [Виконано],
|
||||
[10], [Реалізація остаточної версії програми], [7.12.24 - 15.12.24], [Виконано],
|
||||
[11], [Оформлення інших розділів пояснювальної записки], [1.11.24 - 25.12.24], [Виконано],
|
||||
[10], [Реалізація остаточної версії програми], [7.12.24 -- 15.12.24], [Виконано],
|
||||
[11], [Оформлення інших розділів пояснювальної записки], [1.11.24 -- 25.12.24], [Виконано],
|
||||
[12], [Третя контрольна точка з курсової роботи], [27.12.24], [Виконано],
|
||||
)
|
||||
],
|
||||
approval_date: datetime(year: 2024, month: 09, day: 25),
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#let abstract = (
|
||||
#let abstract = /*{{{*/ (
|
||||
keywords: (
|
||||
"БАЗА ДАНИХ",
|
||||
"АВТОМАТИЗАЦІЯ",
|
||||
@ -66,22 +66,23 @@
|
||||
"RUST",
|
||||
"MYSQL",
|
||||
"SQL",
|
||||
"AUR",
|
||||
),
|
||||
text: [
|
||||
Мета даної роботи -- проєктування та розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками" спрямованої на забезпечення надійного зберігання інформації про програмні пакунки,та надання інструментів для колективної співпраці користувачів, що забезпечить ефективне середовище для спільної розробки та управління програмними пакунками.
|
||||
Мета даної роботи -- проектування та розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками" спрямованої на забезпечення надійного зберігання інформації про програмні пакунки,та надання інструментів для колективної співпраці користувачів, що забезпечить ефективне середовище для спільної розробки та управління програмними пакунками.
|
||||
|
||||
Для реалізації інформаційної системи було обрано сучасний стек технологій, а саме:
|
||||
Rust -- як основна мова програмування для всих частин застосунку,
|
||||
Rust -- як основна мова програмування для всіх частин комп'ютерної програми,
|
||||
iced -- бібліотека для побудови графічних інтерфейсів з Elm архітектурою,
|
||||
SQLx -- бібліотека для низькорівневої роботи з базою даних, що забезпечує коректність SQL запитів і гнучкість,
|
||||
MySQL -- як СУБД для зберігання інформації про пакунки, користувачів, та їх відносини,
|
||||
Neovim -- як сучасний редактор коду для швидкої і зручної розробки.
|
||||
|
||||
Результат розробки -- комп'ютерна програма, яка дозволяє зберігати та відображати інформацію про користувачів, пакунки, та відносини між ними, а також генерувати статистику про користувача та його пакунки. Застосунок, створений з використанням мови програмування Rust є безпечним, правильним, надійним та швидким.
|
||||
Результат розробки -- комп'ютерна програма, яка дозволяє зберігати та відображати інформацію про користувачів, пакунки, та відносини між ними, а також генерувати статистику про користувача та його пакунки. Комп'ютерна програма, створена з використанням мови програмування Rust є безпечною, правильною, надійною та швидкою.
|
||||
],
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#let appendices = (
|
||||
#let appendices = /*{{{*/ (
|
||||
/*(
|
||||
title: "Приклад звіту 1",
|
||||
content: [test],
|
||||
@ -94,9 +95,9 @@
|
||||
title: "Приклад звіту 3",
|
||||
content: [test],
|
||||
),*/
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#show: cw-template.with(
|
||||
#show: /*{{{*/ cw-template.with(
|
||||
title: [Інформаційна система "Репозиторій пакунків". Колаборація над пакунками],
|
||||
subject_shorthand: "БД",
|
||||
department_gen: "Програмної інженерії",
|
||||
@ -108,106 +109,136 @@
|
||||
abstract: abstract,
|
||||
bib_path: "bibl.yml",
|
||||
appendices: appendices,
|
||||
)
|
||||
) //}}}
|
||||
|
||||
#nheading("Вступ")
|
||||
У сучасному світі істують мільйони пакунків з програмним забезпеченням, програмними бібліотеками та іншою інформацією.
|
||||
#nheading("Вступ") //{{{1
|
||||
У сучасному світі існують мільйони пакунків з програмним забезпеченням, програмними бібліотеками та іншою інформацією.
|
||||
Інформаційні системи управління цими пакунками стали критично важливим елементом сучасної розробки програмного забезпечення. Їх значення особливо зросло з розвитком відкритого програмного забезпечення та модульного підходу до розробки, де кожен проект може залежати від десятків, сотень, або навіть тисяч сторонніх компонентів.
|
||||
|
||||
Відсутність ефективних систем управління пакунками призводить до численних проблем у процесі розробки. Розробники стикаються з труднощами при пошуку потрібних бібліотек, виникають конфлікти версій, ускладнюється процес оновлення залежностей, а також з'являються проблеми з безпекою через використання застарілих версій компонентів. Це суттєво сповільнює процес розробки та може призвести до значних фінансових втрат.
|
||||
|
||||
Метою цієї курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрощує процес менеджменту пакунків, створення їх відносин, керування залежностями, та надання користувачам різних ролей у розвитку репозиторію. У процесі роботи над системою було проведено детальний аналіз зхожої системи AUR@aur, котра ефективно використовується для надання користувачам дистрибутиву Arch Linux@archlinux можливості публіковати свої пакунки. Було спроектовано реляційну базу даних і розроблено комп'ютерну програму, яка дозволяє взаємодіяти з репозиторієм.
|
||||
Метою цієї курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрощує процес менеджменту пакунків, створення їх відносин, керування залежностями, та надання користувачам різних ролей у розвитку репозиторію. У процесі роботи над системою було проведено детальний аналіз схожої системи AUR@aur, котра ефективно використовується для надання користувачам дистрибутиву Arch Linux@archlinux можливості публікувати свої пакунки. Було спроектовано реляційну базу даних і розроблено комп'ютерну програму, яка дозволяє взаємодіяти з репозиторієм.
|
||||
|
||||
Весь застосунок написано мовою програмування Rust@rust, для графічного інтерфейсу використовується бібліотека iced@iced, для взаємодії з базою даних використвуєтсья бібліотека SQLx@sqlx. Інформація зберігається у базі даних MySQL@mysql. Розробка виконувалася у текстовому редакторі Neovim@neovim.
|
||||
Комп'ютерну програму повністю написано мовою програмування Rust@rust, для графічного інтерфейсу використовується бібліотека iced@iced, для взаємодії з базою даних використовується бібліотека SQLx@sqlx. Інформація зберігається у базі даних MySQL@mysql. Розробка виконувалася у текстовому редакторі Neovim@neovim.
|
||||
|
||||
= Аналіз та концептуальне моделювання предметної області
|
||||
= Аналіз та концептуальне моделювання предметної області //{{{1
|
||||
#v(-spacing)
|
||||
== Аналіз предметної області
|
||||
== Аналіз предметної області //
|
||||
Дослідження предметної області є ключовим етапом у розробці інформаційної системи "Репозиторій пакунків. Колаборація над пакунками". Основною метою даного аналізу є визначення функціональних вимог та технічних особливостей системи, необхідних для ефективного управління програмними пакунками та забезпечення продуктивної співпраці розробників.
|
||||
|
||||
Репозиторій пакунків являє собою централізоване сховище інформації про програмне забезпечення, що забезпечує зберігання, версіонування та розповсюдження програмних компонентів. В сучасних умовах критично важливою є автоматизація таких процесів як управління залежностями, контроль версій, перевірка сумісності та забезпечення безпеки пакунків. Це дозволяє значно підвищити ефективність розробки програмного забезпечення та мінімізувати ризики, пов'язані з використанням сторонніх компонентів.
|
||||
|
||||
Для створення ефективної системи управління пакунками необхідно ретельно проаналізувати існуючі рішення та їх особливості. Такий аналіз допомагає виявити найбільш важливі функціональні можливості та уникнути потенційних проблем при проектуванні власної системи.
|
||||
|
||||
В якості системи-аналогу розглянемо Arch User Repository (AUR)@aur -- репозиторій користувацьких пакунків для дистрибутиву Arch Linux@archlinux. AUR є яскравим прикладом успішної реалізації концепції колаборативної розробки та управління пакунками. Система надає користувачам можливість самостійно створювати та поширювати пакунки, які не входять до офіційного репозиторію.
|
||||
В якості системи аналогу розглянемо Arch User Repository (AUR)@aur -- репозиторій користувацьких пакунків для дистрибутиву Arch Linux@archlinux. AUR є яскравим прикладом успішної реалізації концепції кооперативної розробки та управління пакунками. Система надає користувачам можливість самостійно створювати та поширювати пакунки, які не входять до офіційних репозиторіїв пакунків Arch Linux.
|
||||
|
||||
При відвідуванні головної сторінки AUR @aur_main можна побачити статиску свого акаунту, всього репозиторію а також останні оновлення пакунків. За допомогою поля пошуку можна перейти до сторінки пошуку пакунків @aur_search.
|
||||
При відвідуванні головної сторінки AUR @aur_main можна побачити статистку свого облікового запису, всього репозиторію а також останні оновлення пакунків. За допомогою поля пошуку можна перейти до сторінки пошуку пакунків @aur_search.
|
||||
|
||||
#img("img/aur/main.png", "Головна сторінка AUR", [@aur])
|
||||
|
||||
#img("img/aur/search.png", "Сторінка пошуку AUR", [@aur-search])
|
||||
|
||||
Зі сторінки пошуку пакунків можна перейти до сторінки інформації пакунку, або ж до сторінки користувача який супроводжує пакунку. На сторінці інформації пакунку @aur_package можна побачити що пакунок має базу пакунку, пошукові слова, ліцензії, різні ролі користувачів, інформацію про залежності, тощо. На сторінці інформації про користувача @aur_user можна побачити різні атрибути пов'язані з акаунтом.
|
||||
Зі сторінки пошуку пакунків можна перейти до сторінки інформації пакунку, або ж до сторінки користувача який відповідає за супроводження пакунку. На сторінці інформації пакунку @aur_package можна побачити що пакунок має базу пакунку, пошукові слова, ліцензії, різні ролі користувачів, інформацію про залежності, тощо. На сторінці інформації про користувача @aur_user можна побачити різні атрибути пов'язані з обліковим записом.
|
||||
|
||||
#img("img/aur/package.png", "Деталі пакунку в AUR", [@aur-package])
|
||||
|
||||
#img("img/aur/user.png", "Деталі користувача в AUR", [@aur-user])
|
||||
|
||||
Навігація по репозиторію здебільного здійснюється за допомогою гіперпосилань на сторінку пошуку де можна обрати досить багато критерій пошуку. Наприклад, при натисканні посилання "View this user's packages" в профілі користувача lsf, можна побачити всі пакунки котрі цей користувач підтримує @aur_search_func.
|
||||
Навігація по репозиторію здебільшого здійснюється за допомогою гіперпосилань з параметрами для сторінки пошуку, де можна обрати багато критерій пошуку. Наприклад, при натисканні посилання "View this user's packages" в профілі користувача lsf, можна побачити всі пакунки які цей користувач підтримує @aur_search_func.
|
||||
|
||||
#img("img/aur/search_func.png", "Фунціонал пошуку AUR", [@aur-search-func])
|
||||
|
||||
В контексті розробки пакункового репозиторію важливо визначити основні ролі користувачів та їхні потреби. Розробники пакунків виступають основними користувачами системи, створюючи та підтримуючи програмні компоненти, в той час як інші учасники можуть долучатися до процесу тестування, рецензування та вдосконалення пакунків.
|
||||
В контексті розробки пакункового репозиторію важливо визначити основні ролі користувачів та їхні потреби. Розробники пакунків виступають основним рушієм системи, створюючи та підтримуючи програмні компоненти, в той час як інші учасники можуть долучатися до процесу тестування, рецензування та вдосконалення пакунків.
|
||||
|
||||
Аналіз інформаційної системи виявив наступні ключові об'єкти предметної області: читач, супроводжуючий, пакунок, база пакунку, залежності пакунків, відносини пакунків, роль користувача. Основним користувачем виступає читач, який потребує ефективних інструментів для отримання інформації про програмні компоненти.
|
||||
Аналіз інформаційної системи виявив наступні ключові об'єкти предметної області: читач, супроводжуючий, пакунок, база пакунку, залежності пакунків, відносини пакунків, роль користувача для бази пакунків. Основним користувачем виступає читач, який потребує ефективних інструментів для отримання інформації про програмні компоненти.
|
||||
|
||||
Основні інформаційні потреби користувачів системи включають:
|
||||
- перегляд і завантаження інформації про пакунки;
|
||||
- забезпечення повного циклу управління пакунками: створення, редагування, версіонування та видалення;
|
||||
- надання інструментів для автоматизованої перевірки залежностей та сумісності компонентів;
|
||||
- забезпечення генерації технічної документації та звітів про використання пакунків.
|
||||
|
||||
На основі проведеного аналізу було визначено критичні вимоги до функціоналу репозиторію пакунків. Ця інформація становитиме основу для проектування системи, яка забезпечить ефективну колаборацію над програмними компонентами та автоматизує ключові процеси їх розробки та супроводу.
|
||||
На основі проведеного аналізу було визначено критичні вимоги до функціоналу репозиторію пакунків. Ця інформація становитиме основу для проектування системи, яка забезпечить ефективну кооперацію над програмними компонентами та автоматизує ключові процеси їх розробки та супроводу.
|
||||
|
||||
Особлива увага буде приділена реалізації механізмів забезпечення якості та безпеки пакунків, оскільки ці аспекти є критичними для створення надійної екосистеми програмного забезпечення. Система також передбачатиме можливості для масштабування та інтеграції з іншими інструментами розробки.
|
||||
|
||||
== Концептуальне моделювання предметної області
|
||||
Інформаційна система передбачає взаємодію як для читачів (неавтентифікованих користувачів), так і для автентифікованих користувачів. Система автоматизує процеси пов'язні з відстеженням залежностей пакунків, прав користувачів, пошуком пакунків і генеруванням статистик.
|
||||
== Концептуальне моделювання предметної області //
|
||||
Інформаційна система передбачає взаємодію як для читачів (незареєстрованих користувачів), так і для зареєстрованих користувачів. Система автоматизує процеси пов'язані з відстеженням залежностей пакунків, прав користувачів, пошуком пакунків і генеруванням статистик.
|
||||
|
||||
Кожний неавтентифікований користувач буде мати можливість ефективно:
|
||||
Кожний незареєстрований користувач повинен мати можливість ефективно:
|
||||
- здійснювати пошук пакунків за різними параметрами;
|
||||
- переглядати інформацію про пакунки, їх бази;
|
||||
- переглядати інформацію про користувачів;
|
||||
- переглядати статистику репозиторію;
|
||||
- увійти у існуючий, або створити новий акаунт.
|
||||
- увійти у існуючий, або створити новий обліковий запис.
|
||||
|
||||
Разом з можливостями неавтентифікованих користувачів, автентифіковані користувачі повинні мати можливість ефективно:
|
||||
- створювати пакунки;
|
||||
- створювати бази пакунків;
|
||||
Разом з можливостями незареєстрованих користувачів, зареєстровані користувачі повинні мати можливість ефективно:
|
||||
- створювати пакунки та бази пакунків;
|
||||
- видаляти власні пакунки та бази пакунків;
|
||||
- додавати, видаляти та оновлювати залежності та відносини для власних пакунків;
|
||||
- додавати, видаляти та оновлювати ролі інших користувачів для власних пакунків;
|
||||
- оновлювати чужі пакунки та бази пакунків до яких був наданий доступ редагування;
|
||||
- переглядати статистику свого акаунту;
|
||||
- змінювати інформацію своєго акаунту;
|
||||
- вийти з акаунту;
|
||||
- видалити свій акаунт.
|
||||
- переглядати статистику свого облікового запису;
|
||||
- змінювати інформацію свого облікового запису;
|
||||
- вийти з облікового запису;
|
||||
- видалити свій обліковий запис.
|
||||
|
||||
Всі дані зберігатимуться в базі даних, яка містить пов'язані таблиці спроектовані таким чином, що б забезпечити цілістність і коректність даних в них. Розумне проектування бази даних забезпечить оптимізацію обробку, пошук та оновлення інформації. Кожному об'єкту предметної області, як от користувач, пакунок, база пакунку, залежності пакунків, відносини пакунків та роль користувача, буде відповідати певна таблиця. Для розуміння структури інформаційної системи спроектовано загаліну діаграму класів @class_diagram, яка є основою для проектування бази даних.
|
||||
Всі дані зберігатимуться в базі даних, яка містить пов'язані таблиці спроектовані таким чином, щоб забезпечити цілісність і коректність даних в них. Розумне проектування бази даних забезпечить оптимізацію обробки, пошуку та оновлення інформації.
|
||||
|
||||
В предметній області існують наступні поняття та зв'язки:
|
||||
- користувач може мати багато типів ролей для багатьох баз пакунків;
|
||||
- кожна роль користувача може мати коментар від користувача;
|
||||
- база пакунку може мати багато підлеглих пакунків;
|
||||
- пакунок обов'язково має одну базу пакунку;
|
||||
- пакунок може мати багато типів відносин з назвами інших пакунків;
|
||||
- пакунок може мати багато типів залежностей від назв інших пакунків.
|
||||
|
||||
|
||||
Для розуміння структури інформаційної системи спроектовано загальну діаграму класів @class_diagram, яка стане основою для проектування бази даних та визначення функціональних вимог до системи.
|
||||
|
||||
#img("img/class_diagram.png", "Загальна діаграма класів")
|
||||
|
||||
Система буде зберігати наступні дані: // TODO: яка система? інформація з реального світу
|
||||
- об'єкт користувача буде зберігати інформацію про користувачів системи. Він буде містити ім'я користувача, електронну пошту, пароль, час останнього використання обілкового запису, та його час створення з оновленням. Ця інформація необхідна для автентифікації та авторизації користувачів, а також для аудиту дій користувачів в системі;
|
||||
- об'єкт бази пакунку буде зберігати базову інформацію про групи пакунків. Він дозволить об'єднувати пакунки зі спільними компонентами та користувачами. Містить ім'я та опис групи пакунків, а також час створення та останнього оновлення. Ця інформація дозволяє групувати пакунки за їх базовою функціональністю;
|
||||
- об'єкт типу ролі користувача буде описувати ролі користувачів у контексті груп пакунків. Містить ідентифікатор ролі, її ім'я та опис. Приклади ролей: submitter (відправник), packager (пакувальник), maintainer (супроводжуючий), flagger (позначник). Цей об'єкт визначає дозволи користувачів на певні дії з групами пакунків;
|
||||
- об'єкт ролі користувача буде прив'язувати користувачів до груп пакунків та визначати їх ролі в цих групах. Містить ідентифікатор групи пакунків, ідентифікатор користувача, ідентифікатор ролі та коментар від користувача. Ця інформація дозволяє визначити, хто, чому, і які права має в кожній групі пакунків;
|
||||
- об'єкт пакунку буде зерігати інформацію про окремі пакунки. Містить ідентифікатор групи пакунків, ім'я пакунку, версію, опис, веб-покликання, опціональний час позначення, час створення та останнього оновлення. Ця інфрмація є основною для ідентифікації та опису кожного пакунку;
|
||||
- об'єкт виду залежності буде визначати типи залежностей пакунків (наприклад, проста залежність, залежність для збірки пакунку, опціональна залежність). Містить ідентифікатор типу залежності та її назву. Цей об'єкт дозволить класифікувати залежності пакунків;
|
||||
- об'єкт залежностей пакунку буде зберігати інформацію про залежності пакунків. Він буде містити архітектуру, умову, опис, ідентифікатор пакунку, ідентифікатор типу залежності та псевдонім назви залежності. Ця інформація дозволяє визначити, від яких інших пакунків залежить даний пакунок.
|
||||
- об'єкт виду відносин буде визначати типи відносин між пакунками (наприклад: конфліктує, надає, замінює). Містить ідентифікатор типу відношення та його назву. Цей об'єкт дозволяє класифікувати відносини між пакунками;
|
||||
- об'єкт відносин пакунків буде зберігати інформацію про відносини пакунків (конфлікти, надання, заміна). Містить архітектуру, вимоги, ідентифікатор пакунку, ідентифікатор типу відношення та ім'я пакунку-відношення. Ця інформація дозволяє визначити, які пакунки конфліктують з даним пакунком, які функції він надає, і які пакунки він замінює.
|
||||
На підставі проведеного аналізу для опису виділених понять предметної області можна визначити дані які буде зберігати система:
|
||||
- об'єкт користувача буде зберігати інформацію про користувачів системи. Він буде містити ім'я користувача, електронну пошту, пароль, час останнього використання облікового запису, його створення, і оновлення. Ця інформація необхідна для автентифікації та авторизації користувачів, а також для аудиту дій користувачів в системі;
|
||||
- об'єкт бази пакунку буде зберігати базову інформацію про групи пакунків. Він дозволить об'єднувати пакунки зі спільними компонентами та користувачами. Містить ім'я та опис бази пакунків, а також час створення та останнього оновлення. Ця інформація дозволяє групувати пакунки за їх базовою функціональністю;
|
||||
- об'єкт типу ролі користувача буде описувати ролі користувачів у контексті баз пакунків. Містить назву ролі та опис. Приклади можливих ролей: submitter (відправник), packager (пакувальник), maintainer (супроводжуючий), flagger (позначник). Цей об'єкт визначає дозволи користувачів на певні дії з групами пакунків;
|
||||
- об'єкт ролі користувача буде прив'язувати користувачів до баз пакунків, та визначати їх ролі в цих базах. Містить групу пакунків, користувача, тип ролі, а також коментар від користувача. Ця інформація дозволяє визначити, хто, чому, і які права має в кожній групі пакунків;
|
||||
- об'єкт пакунку буде зберігати інформацію про окремі пакунки. Містить групу пакунків, назву пакунку, версію, опис, веб-покликання на ресурс пакунку, час позначення, створення та останнього оновлення. Ця інформація є основною для ідентифікації та опису кожного пакунку;
|
||||
- об'єкт виду залежності буде визначати типи залежностей пакунків (наприклад: проста залежність, залежність для збірки пакунку, опціональна залежність). Містить номер типу залежності та її назву. Цей об'єкт дозволить класифікувати залежності пакунків;
|
||||
- об'єкт залежностей пакунку буде зберігати інформацію про залежності пакунків. Він буде містити архітектуру, умову, опис, пакунок, тип залежності та назву пакунку який є залежністю. Ця інформація дозволяє визначити, від яких інших назв пакунків залежить даний пакунок.
|
||||
- об'єкт виду відносин буде визначати типи відносин між пакунками (наприклад: конфліктує, надає, замінює). Містить номер типу відношення та його назву. Цей об'єкт дозволяє класифікувати відносини між пакунками;
|
||||
- об'єкт відносин пакунків буде зберігати інформацію про відносини пакунків. Містить архітектуру, вимоги, пакунок, тип відношення та назву пакунку до якого формується відношення. Ця інформація дозволяє визначити, які пакунки конфліктують з даним пакунком, які функції він надає, і які пакунки він замінює.
|
||||
|
||||
// TODO: Системи ще не має, тому немає можливості
|
||||
Користувач системи має можливість здійснювати пошук пакунків та перегляди їх інформацію, переходити до профілей користувачів та переглядати їх пакунки. Для наочного представлення процесів та потоків даних в системі під час виконання користувачем поставленої задачі створимо DFD-діаграму @data_diagram, що відображатиме послідовність кроків під час виконання користувачем цільової бізнес-задачі перегляду інформації про пакунок та отримання звіту з цієї інформації.
|
||||
Для ефективного опису функціональної структури та процесів пакункового репозиторію, необхідно побудувати DFD-діаграму, яка описує потоки даних. Ця діаграма відображає основні етапи обробки інформації та взаємодію між різними компонентами системи під час виконання бізнес задачі.
|
||||
|
||||
Зареєстровані користувачі створюють нові пакунки та бази пакунків, надають ролі іншим зареєстрованим користувачам до своїх баз пакунків, налаштовують залежності і відносини для своїх пакунків. Для виконання своїх цілей вони користуються даними про чужі пакунки, їх залежності, відносини та користувачів, котрі відповідають за ці пакунки.
|
||||
|
||||
Незареєстровані користувачі здійснюють пошук та переглядають інформацію про пакунки, їх базу, залежності та відносини пакунку, різноманітні ролі зареєстрованих користувачів для баз пакунків та інформацію про облікові записи зареєстрованих користувачів.
|
||||
|
||||
Для наочного представлення процесів та потоків даних в системі під час формування звіту про пакунок, створимо DFD-діаграму @data_diagram, що відображає послідовність кроків під час виконання користувачем цільової задачі перегляду інформації про пакунок.
|
||||
|
||||
// Звіт як користувач позначається
|
||||
#img("img/data_diagram.png", "Діаграма потоків даних")
|
||||
|
||||
Для ефективного відображення інформаційних потреб користувачів необхідно побудувати діаграму варіантів використання (Use Case). Ця діаграма @usecase_diagram демонструє взаємодію між різними акторами системи, такими як користувачі, адміністратори та інші учасники, та функціональними можливостями системи, такими як управління пакунками, їх створення, перегляд, отримання інформації та інші операції. Діаграма варіантів використання дозволяє визначити основні сценарії взаємодії користувачів з системою, ідентифікувати ключові функції та процеси, що відбуваються під час цієї взаємодії, та забезпечити розробку системи, яка відповідає реальним потребам користувачів. Крім того, діаграма варіантів використання може бути використана для визначення пріоритетів функціональних можливостей системи, виявлення потенційних проблем та слабких місць у процесах взаємодії з користувачами, а також для оптимізації архітектури системи для забезпечення максимальної ефективності та зручності використання.
|
||||
Для забезпечення ефективної розробки та впровадження інформаційної системи критично важливим етапом є побудова діаграми варіантів використання (Use-Case Diagram). Дана діаграма @usecase_diagram є фундаментальним інструментом моделювання, який дозволяє показати та систематизувати більшість можливих сценаріїв взаємодії між системою та її користувачами.
|
||||
|
||||
|
||||
#img("img/usecase_diagram.png", "Use-Case діаграма")
|
||||
|
||||
= Постановка задачі
|
||||
У контексті розроблюваної системи діаграма варіантів використання відображає складну мережу взаємозв'язків між двома категоріями акторів (користувачів системи) та функціональними можливостями, які система надає. До основних акторів належать будь-які користувачі, в тому числі незареєстровані, а також зареєстровані та автентифіковані користувачі, кожен з яких має свій унікальний набір прав та можливостей взаємодії з системою.
|
||||
|
||||
Функціональні можливості, представлені на діаграмі, охоплюють широкий спектр операцій, включаючи, але не обмежуючись, управління пакунками, їх створення та модифікацію, перегляд доступної інформації, генерацію звітів, адміністрування ролей користувачів для баз пакунків та залежностей і відносин між пакунками. Кожен варіант використання супроводжується описом послідовності дій, необхідних для досягнення конкретної мети користувача.
|
||||
|
||||
Значущість діаграми варіантів використання полягає в тому, що вона служить потужним інструментом для:
|
||||
- Визначення та узгодження вимог користувачів до системи
|
||||
- Ідентифікації ключових бізнес-процесів та їх взаємозв'язків
|
||||
- Оптимізації архітектурних рішень на ранніх етапах проектування
|
||||
- Забезпечення відповідності розроблюваної системи реальним потребам користувачів
|
||||
|
||||
Більше того, Use-Case діаграма відіграє важливу роль у процесі розробки системи, допомагаючи виявити потенційні проблеми та незручності ще на етапі проектування. Це дозволяє своєчасно вносити необхідні корективи в архітектуру системи та оптимізувати її компоненти для досягнення максимальної ефективності та зручності використання.
|
||||
|
||||
На основі аналізу діаграми варіантів використання можна також визначити пріоритетність розробки різних функціональних модулів системи, що особливо важливо при обмежених ресурсах та часових рамках проекту. Це забезпечує раціональний розподіл ресурсів та дозволяє сконцентруватися на реалізації найбільш критичних функцій системи в першу чергу.
|
||||
|
||||
= Постановка задачі //{{{1
|
||||
|
||||
Метою курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка забезпечить ефективне зберігання, пошук, управління та спільну розробку програмних пакунків. Після аналізу предметної області було виділено наступні вимоги щодо функціоналу інформаційної системи:
|
||||
|
||||
@ -241,9 +272,9 @@
|
||||
+ інформація про пакунки кожного користувача та рівень прав який цей користувач має для цих пакунків.
|
||||
|
||||
|
||||
= Проектування бази даних
|
||||
= Проектування бази даних //{{{1
|
||||
#v(-spacing)
|
||||
== Побудова ER-діаграми
|
||||
== Побудова ER-діаграми //{{{2
|
||||
Проведений аналіз предметної області дозволив визначити наступні сутності та їх атрибути:
|
||||
|
||||
- сутність "Користувач": ім'я, електронна пошта, пароль, дата останнього використання, дата створення, дата оновлення;
|
||||
@ -273,7 +304,7 @@
|
||||
|
||||
Отримана ER-діаграма буде використана для обрання та побудови логічної моделі бази даних.
|
||||
|
||||
== Вибір та побудова логічної моделі бази даних на базі ER-діаграми
|
||||
== Вибір та побудова логічної моделі бази даних на базі ER-діаграми //{{{2
|
||||
|
||||
Для створення логічної моделі бази даних репозиторію пакунків було обрано реляційну модель. Ця модель дозволяє ефективно організувати дані у вигляді взаємопов'язаних таблиць, що забезпечує чітку структуру інформації в контексті управління пакунками та колаборації між користувачами. Вона гарантує узгодженість всіх зв'язків між сутностями, такими як "Користувач", "Пакунок", "База пакунку" та іншими, а також підтримує обмеження цілісності даних.
|
||||
|
||||
@ -362,7 +393,7 @@
|
||||
+ від первинного ключа id залежать всі неключові атрибути, а саме: arch, requirement, package, relation_type, relation_package_name;
|
||||
+ таблиця відповідає всім вимогам 3НФ: всі атрибути атомарні, всі неключові атрибути залежать безпосередньо від первинного ключа id, відсутні транзитивні залежності.
|
||||
|
||||
== Побудова логічної моделі бази даних шляхом нормалізаці
|
||||
== Побудова логічної моделі бази даних шляхом нормалізаці //{{{2
|
||||
|
||||
Нормалізація структури даних відіграє фундаментальну роль у процесі проектування сучасних інформаційних систем, оскільки забезпечує створення раціональної архітектури даних, що ефективно запобігає надлишковості інформації та можливим аномаліям. В контексті розробки інформаційної системи пакункового репозиторію, нормалізація набуває особливої значущості через комплексну природу зв'зків між пакунками.
|
||||
|
||||
@ -425,21 +456,21 @@
|
||||
Порівняння отриманої схеми даних з початковою ER-діаграмою @er_diagram показує їхню повну відповідність, що свідчить про успішну нормалізацію схеми даних до третьої нормальної форми. Це значить, що всі сутності, атрибути та зв'язки між ними були правильно ідентифіковані, а всі непотрібні залежності та повторення даних були усунуті. Це забезпечить ефективність та масштабованість інформаційної системи.
|
||||
|
||||
|
||||
= Опис програми
|
||||
= Опис програми //{{{1
|
||||
#v(-spacing)
|
||||
== Загальні відомості
|
||||
== Загальні відомості //{{{2
|
||||
Для забеспечення простоти, ефективності та елегантності розробки інформаційної системи "Репозиторій пакунків. Колаборація над пакунками" було використано операційну систему Arch Linux@archlinux та текстовий редактор Neovim@neovim.
|
||||
|
||||
Для реалізації всієї комп'ютерної програми було обрано сучасну мову програмування Rust@rust, яка є надзвичайно швидкою, надійною та продуктивною. За зберігання даних відповідає база даних MySQL@mysql, вона відома своєю стабільнітю, можливостями та швидкістю. Для взаємодії з базою даних було обрано бібліотеку SQLx@sqlx, вона є дуже гарно спроектованим проектом, розрахована на асинхроні операції та підтримку багатьох баз даних на низькому рівні. Для написання інтерфейсу комп'ютерної програми було обрано бібліотеку iced@iced, ця бібліотека фокусується на простоті та безпеці програм з графічним інтерфейсом за допомогю дотримання принципів проектування Elm@elm.
|
||||
|
||||
== Виклик і завантаження
|
||||
== Виклик і завантаження //{{{2
|
||||
Користувач може взаємодіяти з ком'ютерною програмою після встановки її до своєї операційної системи та запуску бази даних.
|
||||
|
||||
Для зберігання даних використовується СУБД MySQL@mysql. База даних та комп'ютерна програма можуть знаходитись на різних пристроях. Перед тим як кінцевий користувач приступить до використання програми, системний адміністратор, котрий відповідає за роботу інформаційної системи, має налаштувати змінну середовища "DATABASE_URL" в котрій буде адреса до налаштованого екземпляру MySQL. Для максимальної зручності налаштування рекомендуєтсья використовувати контейнерізацю за допомогою Docker@docker, особливо рекомендується його інструмент Compose@compose.
|
||||
|
||||
Інформаційна система була розроблена з використанням мови Rust@rust, тому результуюча програма не потребує залежностей під час виконання і може бути використана у вигляді самодостатнього файлу виконання.
|
||||
|
||||
== Призначення і логічна структура
|
||||
== Призначення і логічна структура //{{{2
|
||||
Інформаційна система полегшує колаборацію над пакунками у репозиторії для розробників. Система забеспечує інтуїтивний інтерфейс для навігації по пакункам, їх залежностям з відносинами, та користувачам. Перелік основних функцій системи:
|
||||
- управління пакунками та їх метаданими;
|
||||
- система користувацьких акаунтів;
|
||||
@ -468,7 +499,7 @@
|
||||
|
||||
Проєкт має всі використані під час розробки ресурси, такі як SQL скрипти та Docker Compose@compose файли, за допомогою яких можна створити тестову базу даних та наповнити її даними.
|
||||
|
||||
== Опис фізичної моделі бази даних
|
||||
== Опис фізичної моделі бази даних //{{{2
|
||||
Для інформаційної системи створено базу даних яка має дев’ять таблиць. Код для її створення яких описаний нижче.
|
||||
|
||||
Таблиця "Users" містить інформацію про користувачів системи та має таку структуру:
|
||||
@ -671,7 +702,7 @@ CREATE TABLE PackageRelations (
|
||||
);
|
||||
```
|
||||
|
||||
== Опис програмної реалізації
|
||||
== Опис програмної реалізації //{{{2
|
||||
|
||||
При запуску комп'ютерної програми стартовим екраном є сторінка логіну @repo_login. Користувачі з існуючими акаунтами можуть увійти у свій акаунт за допомогою пошти або юзернема та свого паролю який надійно та безпечно зберігається в базі даних у зашифрованому вигляді.
|
||||
|
||||
@ -922,7 +953,7 @@ pub fn view(&self) -> Element<'static, Message> {
|
||||
|
||||
Подібну реалізацію мають всі частини програми. Представлений програмний код демонструє ефективну реалізацію принципів гексагональної архітектури@hexagonal. Структура коду чітко відображає розділення на рівні, кожен з яких відповідає за визначену функціональну роль, що є ключовою характеристикою даної архітектурної парадигми. Цей підхід надає чітке розмежування відповідальності де кожен компонент системи, від інтерфейсу користувача до адаптерів баз даних, має чітко визначений набір обов'язків. Це полегшує процес розробки та спрощує підтримку програмного забезпечення у довгостроковій перспективі. Незалежність бізнес-логіки від інфраструктурних рішень дозволяє спростити процес міграції до простого доповнення арсеналу адаптерів. Сервісний шар, що містить основну бізнес-логіку пошуку, не залежить від конкретних технологій зберігання даних або реалізації графічного інтерфейсу, тому його можна буде використати в інших проектах. Крім того, модульна архітектура дозволяє проводити ізольоване тестування кожного компонента, за допомогою використання макетів (mock objects) для залежностей що забезпечить глибоке покриття коду тестами.
|
||||
|
||||
#nheading("Висновки")
|
||||
#nheading("Висновки") //{{{1
|
||||
|
||||
В результаті виконання курсової роботи було розроблено інформаційну систему "Репозиторій пакунків" для організації ефективної колаборації над програмними пакунками. В процесі розробки було проведено ґрунтовний аналіз предметної області, визначено ключові вимоги до системи та спроектовано оптимальну структуру бази даних для зберігання інформації про пакунки, їх версії, залежності, користувачів та їхні ролі.
|
||||
|
||||
@ -932,4 +963,4 @@ pub fn view(&self) -> Element<'static, Message> {
|
||||
|
||||
Розроблена інформаційна система значно спрощує процес управління та отримання інформації про програмні пакунки. Вона відповідає поставленим завданням та має потенціал подальшої реалізації завдяки використанню дуже модульної архітектури моделювання програмного забеспечення, відомої як Гексагональна архітектура@hexagonal.
|
||||
|
||||
// vim:sts=2:sw=2
|
||||
// vim:sts=2:sw=2:fdl=0:fdm=marker:cms=/*%s*/
|
||||
|
Reference in New Issue
Block a user