Initial commit
2
3/coursework/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*.pdf
|
||||
other
|
1
3/coursework/README.md
Normal file
@ -0,0 +1 @@
|
||||
[Coursework](https://gitea.linerds.us/0x1D8/repo) paper, declared in [typst](https://typst.app/), using [this template](https://gitea.linerds.us/pencelheimer/typst_nure_template]).
|
177
3/coursework/assets/1.2.DFD.drawio
Normal file
@ -0,0 +1,177 @@
|
||||
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0" version="26.0.11">
|
||||
<diagram name="Page-1" id="Q5se_paezd7bh9Hq_2kQ">
|
||||
<mxGraphModel dx="1477" dy="781" 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="151" y="550" 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;" edge="1" parent="1" source="TsSuOcFh9R8wNlV-BA49-3" target="g8Hk9kY67_a-sykVnxVS-28">
|
||||
<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>
|
||||
<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" />
|
||||
</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" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-17" value="<span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>Пакети" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-22" vertex="1">
|
||||
<mxGeometry width="120" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-19" 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-22" vertex="1">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-18" 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-22" source="g8Hk9kY67_a-sykVnxVS-17" target="g8Hk9kY67_a-sykVnxVS-17" 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>
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-28" target="g8Hk9kY67_a-sykVnxVS-64">
|
||||
<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" />
|
||||
</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;" edge="1" parent="g8Hk9kY67_a-sykVnxVS-37" source="g8Hk9kY67_a-sykVnxVS-38">
|
||||
<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>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-39" 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-37" vertex="1">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-40" 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-37" source="g8Hk9kY67_a-sykVnxVS-38" target="g8Hk9kY67_a-sykVnxVS-38" 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>
|
||||
</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" />
|
||||
</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;" edge="1" parent="g8Hk9kY67_a-sykVnxVS-47" source="g8Hk9kY67_a-sykVnxVS-48">
|
||||
<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">
|
||||
<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">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-50" 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-47" source="g8Hk9kY67_a-sykVnxVS-48" target="g8Hk9kY67_a-sykVnxVS-48" 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>
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-64" target="xkRWYsoNMHkY_TOU-Azu-11">
|
||||
<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="151" y="700" 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>
|
||||
</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" />
|
||||
</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;" edge="1" parent="g8Hk9kY67_a-sykVnxVS-77" source="g8Hk9kY67_a-sykVnxVS-78">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="60" y="80" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-78" value="<span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>Бази&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="white-space: pre;">	</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; пакетів" 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">
|
||||
<mxGeometry width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-80" 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-77" source="g8Hk9kY67_a-sykVnxVS-78" target="g8Hk9kY67_a-sykVnxVS-78" 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>
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-87" target="g8Hk9kY67_a-sykVnxVS-69">
|
||||
<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="133" y="810" width="156" 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;" edge="1" parent="1" source="xkRWYsoNMHkY_TOU-Azu-11" target="g8Hk9kY67_a-sykVnxVS-87">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-11" value="Перегляд інформацї про пакет" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="313" y="810" width="156" 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;" edge="1" parent="1" source="TsSuOcFh9R8wNlV-BA49-2" target="TsSuOcFh9R8wNlV-BA49-3">
|
||||
<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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-19" target="TsSuOcFh9R8wNlV-BA49-3">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-39" target="g8Hk9kY67_a-sykVnxVS-28">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-79" target="g8Hk9kY67_a-sykVnxVS-28">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-49" target="g8Hk9kY67_a-sykVnxVS-28">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-69" target="TsSuOcFh9R8wNlV-BA49-2">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</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;" edge="1" parent="1" source="g8Hk9kY67_a-sykVnxVS-17" target="xkRWYsoNMHkY_TOU-Azu-11">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="693" y="580" />
|
||||
<mxPoint x="693" y="840" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
173
3/coursework/assets/1.2.UML.drawio
Normal file
@ -0,0 +1,173 @@
|
||||
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0" version="26.0.11">
|
||||
<diagram name="Page-1" id="xRsSjXiDyx2HrTEbfJbS">
|
||||
<mxGraphModel dx="804" dy="290" 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="aeO1vsXZbVWh7k1FALDI-26" value="Користувач" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="130" y="260" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-28" value="База Пакунку" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="340" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-29" value="Роль Користувача" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="260" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-30" value="Залежності Пакунку" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="520.0000000000001" y="340" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-31" value="Вид залежності" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="520" y="420" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-32" value="Тип ролі користувача" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="514.3199999999999" y="260" width="140" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-33" value="Відносини пакунку" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="130" y="340" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-34" value="Тип відносин" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="130" y="420" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-35" value="Пакунок" style="swimlane;fontStyle=1;align=center;verticalAlign=middle;childLayout=stackLayout;horizontal=1;startSize=85;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=0;marginBottom=0;" vertex="1" parent="1">
|
||||
<mxGeometry x="320" y="420" width="128.64" height="37.62" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-36" value="" style="curved=0;startArrow=none;endArrow=none;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="aeO1vsXZbVWh7k1FALDI-30" target="aeO1vsXZbVWh7k1FALDI-35">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="530" y="460" as="sourcePoint" />
|
||||
<mxPoint x="180" y="350" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-37" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-36">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-6" y="-29" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-38" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-36">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="12" y="11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-40" value="" style="curved=0;startArrow=none;endArrow=none;rounded=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="aeO1vsXZbVWh7k1FALDI-29" target="aeO1vsXZbVWh7k1FALDI-26">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="544" y="370" as="sourcePoint" />
|
||||
<mxPoint x="414" y="370" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-41" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-40">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint y="1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-42" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-40">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="6" y="23" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-44" value="" style="curved=0;startArrow=none;endArrow=none;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="aeO1vsXZbVWh7k1FALDI-29" target="aeO1vsXZbVWh7k1FALDI-28">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="544" y="500" as="sourcePoint" />
|
||||
<mxPoint x="414" y="500" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-45" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-44">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-4" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-46" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-44">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="10" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-51" value="" style="curved=0;startArrow=none;endArrow=none;rounded=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="aeO1vsXZbVWh7k1FALDI-35" target="aeO1vsXZbVWh7k1FALDI-28">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="584" y="410" as="sourcePoint" />
|
||||
<mxPoint x="584" y="338" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-52" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-51">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="30" y="-20" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-53" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-51">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="-14" y="22" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-54" value="" style="curved=0;startArrow=none;endArrow=none;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="aeO1vsXZbVWh7k1FALDI-29" target="aeO1vsXZbVWh7k1FALDI-32">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="470" y="350" as="sourcePoint" />
|
||||
<mxPoint x="578.64" y="532" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-55" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-54">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="26" y="2" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-56" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-54">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="-16" y="21" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-57" value="" style="curved=0;startArrow=none;endArrow=none;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="aeO1vsXZbVWh7k1FALDI-33" target="aeO1vsXZbVWh7k1FALDI-35">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="229" y="309" as="sourcePoint" />
|
||||
<mxPoint x="310" y="309" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-58" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-57">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="31" y="-29" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-59" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-57">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="-20" y="11" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-62" value="" style="curved=0;startArrow=none;endArrow=none;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="aeO1vsXZbVWh7k1FALDI-30" target="aeO1vsXZbVWh7k1FALDI-31">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="232" y="310" as="sourcePoint" />
|
||||
<mxPoint x="180" y="402" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-63" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-62">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-10" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-64" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-62">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="10" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-65" value="" style="curved=0;startArrow=none;endArrow=none;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="aeO1vsXZbVWh7k1FALDI-33" target="aeO1vsXZbVWh7k1FALDI-34">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points" />
|
||||
<mxPoint x="244" y="328" as="sourcePoint" />
|
||||
<mxPoint x="169" y="401" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-66" value="0..n
" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=right;verticalAlign=top;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-65">
|
||||
<mxGeometry x="-1" relative="1" as="geometry">
|
||||
<mxPoint x="-10" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="aeO1vsXZbVWh7k1FALDI-67" value="1" style="edgeLabel;resizable=0;labelBackgroundColor=none;fontSize=12;align=left;verticalAlign=bottom;" vertex="1" parent="aeO1vsXZbVWh7k1FALDI-65">
|
||||
<mxGeometry x="1" relative="1" as="geometry">
|
||||
<mxPoint x="6" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
1061
3/coursework/assets/1.2.Use-Case.drawio
Normal file
9
3/coursework/assets/LICENSE
Normal file
@ -0,0 +1,9 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 NUREH8
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
356
3/coursework/assets/er_diagram.drawio
Normal file
@ -0,0 +1,356 @@
|
||||
<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="e56a1550-8fbb-45ad-956c-1786394a9013">
|
||||
<mxGraphModel dx="989" dy="2326" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-31" value="Пакунок" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="480" y="-700" width="160" height="248" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-32" value="Пакунок id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-33" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-32" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-34" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-35" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-34" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-36" value="Версія" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-37" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-36" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-38" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-39" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-38" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-55" value="Веб-покликання" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="134" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-56" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-55" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-57" value="Дата позначення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="160" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-58" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-57" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-59" value="Дата створення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="186" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-60" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-59" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-61" value="Дата оновлення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="212" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-62" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-61" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-40" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="238" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-41" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-40" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-70" value="Користувач" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="690" y="-882" width="150" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-71" value="Користувач id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="26" width="150" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-72" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-71" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-73" value="Ім'я" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="56" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-74" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-73" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-75" value="Електронна пошта" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="82" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-76" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-75" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-77" value="Пароль" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="108" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-78" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-77" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-79" value="Дата&nbsp; логіну" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="134" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-80" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-79" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-81" value="Дата створення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="160" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-82" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-81" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-93" value="Дата оновлення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="186" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-94" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-93" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-114" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="212" width="150" height="8" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-115" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-114" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="8" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-116" value="Тип ролі" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="-882" width="160" height="118" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-117" value="Тип ролі id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-118" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-117" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-119" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-120" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-119" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-121" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-122" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-121" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-127" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-128" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-127" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-140" value="Тип залежності" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="680" y="-440" width="160" height="92" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-141" value="Тип залежності id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-140" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-142" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-141" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-143" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-140" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-144" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-143" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-147" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-140" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-148" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-147" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-150" value="Тип відношення" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="480" y="-440" width="160" height="92" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-151" value="Тип відношення id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-150" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-152" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-151" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-153" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-150" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-154" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-153" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-155" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-150" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-156" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-155" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-157" value="База пакунку" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="-720" width="160" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-158" value="База пакунку id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-159" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-158" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-160" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-161" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-160" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-162" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-163" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-162" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-164" value="Дата створення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-165" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-164" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-166" value="Дата оновлення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="134" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-167" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-166" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-168" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="160" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-169" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-168" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-170" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=ERmandOne;startFill=0;endArrow=ERzeroToMany;endFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-162" target="TstbxcchZz1pR3d-lyST-36" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-171" value="Залежність" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="690" y="-640" width="150" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-172" value="Залежність id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="26" width="150" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-173" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-172" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-174" value="Архітектура" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="56" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-175" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-174" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-184" value="Умова" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="82" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-185" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-184" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-176" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="108" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-177" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-176" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-178" value="Назва залежного пакунку" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="134" width="150" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-179" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-178" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-188" value="Відношення" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="-502" width="160" height="154" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-189" value="Відношення id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-190" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-189" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-191" value="Архітектура" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-192" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-191" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-193" value="Умова" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-194" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-193" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-197" value="Назва пакунку з яким є відношення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-198" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-197" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-206" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.846;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-193" target="TstbxcchZz1pR3d-lyST-38" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-207" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-197" target="TstbxcchZz1pR3d-lyST-153" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-208" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-178" target="TstbxcchZz1pR3d-lyST-143" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="660" y="-483" />
|
||||
<mxPoint x="660" y="-371" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-210" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.012;entryY=0.419;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=ERmandOne;startFill=0;endArrow=ERzeroToMany;endFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-57" target="TstbxcchZz1pR3d-lyST-184" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-212" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;exitX=0;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="PkgUqFx-XmgoDWfw4lMe-4" target="TstbxcchZz1pR3d-lyST-119" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<mxPoint x="480" y="-841" as="sourcePoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-1" value="Роль" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="-882" width="160" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-2" value="Роль id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" vertex="1" parent="PkgUqFx-XmgoDWfw4lMe-1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-3" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" vertex="1" connectable="0" parent="PkgUqFx-XmgoDWfw4lMe-2">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-4" value="Тип ролі" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" vertex="1" parent="PkgUqFx-XmgoDWfw4lMe-1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-5" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" vertex="1" connectable="0" parent="PkgUqFx-XmgoDWfw4lMe-4">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-10" value="База пакунку" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" vertex="1" parent="PkgUqFx-XmgoDWfw4lMe-1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-11" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" vertex="1" connectable="0" parent="PkgUqFx-XmgoDWfw4lMe-10">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-6" value="Пакунок" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" vertex="1" parent="PkgUqFx-XmgoDWfw4lMe-1">
|
||||
<mxGeometry y="108" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-7" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" vertex="1" connectable="0" parent="PkgUqFx-XmgoDWfw4lMe-6">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-12" value="<div>Коментар</div>" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" vertex="1" parent="PkgUqFx-XmgoDWfw4lMe-1">
|
||||
<mxGeometry y="134" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-13" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" vertex="1" connectable="0" parent="PkgUqFx-XmgoDWfw4lMe-12">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-8" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" vertex="1" parent="PkgUqFx-XmgoDWfw4lMe-1">
|
||||
<mxGeometry y="160" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-9" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" vertex="1" connectable="0" parent="PkgUqFx-XmgoDWfw4lMe-8">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=ERmandOne;startFill=0;endArrow=ERzeroToMany;endFill=0;" edge="1" parent="1" source="TstbxcchZz1pR3d-lyST-160" target="PkgUqFx-XmgoDWfw4lMe-6">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="PkgUqFx-XmgoDWfw4lMe-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" edge="1" parent="1" source="TstbxcchZz1pR3d-lyST-77" target="PkgUqFx-XmgoDWfw4lMe-6">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
347
3/coursework/assets/logic_model.drawio
Normal file
@ -0,0 +1,347 @@
|
||||
<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="e56a1550-8fbb-45ad-956c-1786394a9013">
|
||||
<mxGraphModel dx="314" dy="1932" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1100" pageHeight="850" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-31" value="Пакунок" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="480" y="-720" width="160" height="248" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-32" value="Пакунок id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-33" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-32" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-34" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-35" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-34" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-36" value="Версія" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-37" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-36" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-38" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-39" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-38" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-55" value="Веб-покликання" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="134" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-56" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-55" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-57" value="Дата позначення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="160" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-58" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-57" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-59" value="Дата створення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="186" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-60" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-59" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-61" value="Дата оновлення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="212" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-62" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-61" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-40" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-31" vertex="1">
|
||||
<mxGeometry y="238" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-41" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-40" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-70" value="Користувач" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="690" y="-882" width="150" height="220" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-71" value="Користувач id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="26" width="150" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-72" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-71" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-73" value="Ім'я" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="56" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-74" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-73" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-75" value="Електронна пошта" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="82" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-76" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-75" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-77" value="Пароль" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="108" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-78" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-77" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-79" value="Дата&nbsp; логіну" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="134" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-80" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-79" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-81" value="Дата створення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="160" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-82" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-81" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-93" value="Дата оновлення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="186" width="150" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-94" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-93" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-114" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-70" vertex="1">
|
||||
<mxGeometry y="212" width="150" height="8" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-115" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-114" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="8" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-116" value="Тип ролі" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="-882" width="160" height="118" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-117" value="Тип ролі id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-118" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-117" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-119" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-120" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-119" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-121" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-122" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-121" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-127" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-116" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-128" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-127" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-129" value="Роль" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14" parent="1" vertex="1">
|
||||
<mxGeometry x="480" y="-882" width="160" height="142" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-130" value="Тип ролі" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=60;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-129" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-131" value="PK,FK1" style="shape=partialRectangle;fontStyle=1;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-130" vertex="1" connectable="0">
|
||||
<mxGeometry width="56" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-138" value="База пакунку" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=60;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-129" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-139" value="PK,FK2" style="shape=partialRectangle;fontStyle=1;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-138" vertex="1" connectable="0">
|
||||
<mxGeometry width="56" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-132" value="Користувач" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=60;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-129" vertex="1">
|
||||
<mxGeometry y="86" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-133" value="PK,FK3" style="shape=partialRectangle;fontStyle=1;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-132" vertex="1" connectable="0">
|
||||
<mxGeometry width="56" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-134" value="Коментар" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=60;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-129" vertex="1">
|
||||
<mxGeometry y="116" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-135" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-134" vertex="1" connectable="0">
|
||||
<mxGeometry width="56" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-140" value="Тип залежності" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="680" y="-440" width="160" height="92" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-141" value="Тип залежності id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-140" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-142" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-141" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-143" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-140" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-144" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-143" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-147" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-140" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-148" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-147" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-150" value="Тип відношення" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="480" y="-440" width="160" height="92" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-151" value="Тип відношення id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-150" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-152" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-151" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-153" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-150" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-154" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-153" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-155" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-150" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-156" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-155" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-157" value="База пакунку" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="-720" width="160" height="170" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-158" value="База пакунку id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-159" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-158" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-160" value="Назва" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-161" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-160" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-162" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-163" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-162" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-164" value="Дата створення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-165" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-164" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-166" value="Дата оновлення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="134" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-167" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-166" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-168" value="" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-157" vertex="1">
|
||||
<mxGeometry y="160" width="160" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-169" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-168" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="10" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-170" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;startArrow=ERmandOne;startFill=0;endArrow=ERzeroToMany;endFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-162" target="TstbxcchZz1pR3d-lyST-36" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-171" value="Залежність" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="680" y="-640" width="160" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-172" value="Залежність id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-173" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-172" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-174" value="Архітектура" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-175" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-174" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-184" value="Умова" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-185" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-184" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-176" value="Опис" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-177" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-176" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-178" value="Назва залежного пакунку" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-171" vertex="1">
|
||||
<mxGeometry y="134" width="160" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-179" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-178" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-188" value="Відношення" style="swimlane;html=1;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=26;fillColor=#e0e0e0;horizontalStack=0;resizeParent=1;resizeLast=0;collapsible=1;marginBottom=0;swimlaneFillColor=#ffffff;align=center;rounded=0;shadow=0;comic=0;labelBackgroundColor=none;strokeWidth=1;fontFamily=Verdana;fontSize=14;swimlaneLine=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="-502" width="160" height="154" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-189" value="Відношення id" style="shape=partialRectangle;top=0;left=0;right=0;bottom=1;html=1;align=left;verticalAlign=middle;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;fontStyle=5;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="26" width="160" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-190" value="PK" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-189" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-191" value="Архітектура" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="56" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-192" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-191" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-193" value="Умова" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="82" width="160" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-194" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-193" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="26" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-197" value="Назва пакунку з яким є відношення" style="shape=partialRectangle;top=0;left=0;right=0;bottom=0;html=1;align=left;verticalAlign=top;fillColor=none;spacingLeft=34;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;dropTarget=0;" parent="TstbxcchZz1pR3d-lyST-188" vertex="1">
|
||||
<mxGeometry y="108" width="160" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-198" value="" style="shape=partialRectangle;top=0;left=0;bottom=0;html=1;fillColor=none;align=left;verticalAlign=top;spacingLeft=4;spacingRight=4;whiteSpace=wrap;overflow=hidden;rotatable=0;points=[];portConstraint=eastwest;part=1;" parent="TstbxcchZz1pR3d-lyST-197" vertex="1" connectable="0">
|
||||
<mxGeometry width="30" height="46" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-203" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-138" target="TstbxcchZz1pR3d-lyST-158" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="450" y="-811" />
|
||||
<mxPoint x="450" y="-679" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-204" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;startArrow=ERmandOne;startFill=0;endArrow=ERzeroToMany;endFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-71" target="TstbxcchZz1pR3d-lyST-132" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-206" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.846;entryDx=0;entryDy=0;entryPerimeter=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-193" target="TstbxcchZz1pR3d-lyST-38" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-207" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-197" target="TstbxcchZz1pR3d-lyST-153" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-208" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-178" target="TstbxcchZz1pR3d-lyST-143" edge="1">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="660" y="-483" />
|
||||
<mxPoint x="660" y="-371" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-210" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=-0.012;entryY=0.419;entryDx=0;entryDy=0;entryPerimeter=0;startArrow=ERmandOne;startFill=0;endArrow=ERzeroToMany;endFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-57" target="TstbxcchZz1pR3d-lyST-184" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TstbxcchZz1pR3d-lyST-212" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;endArrow=ERmandOne;endFill=0;startArrow=ERzeroToMany;startFill=0;" parent="1" source="TstbxcchZz1pR3d-lyST-130" target="TstbxcchZz1pR3d-lyST-117" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
142
3/coursework/bibl.yml
Normal file
@ -0,0 +1,142 @@
|
||||
# ===== RESULT ==== #
|
||||
|
||||
repo:
|
||||
type: Web
|
||||
title: repo
|
||||
author: Білоус А. А.
|
||||
url:
|
||||
value: https://gitea.linerds.us/0x1D8/repo
|
||||
date: 2025-02-10
|
||||
|
||||
# ===== RUST ==== #
|
||||
rust:
|
||||
type: Web
|
||||
title: Rust Programming Language
|
||||
author: Rust Programming Language
|
||||
url:
|
||||
value: https://www.rust-lang.org/
|
||||
date: 2025-02-09
|
||||
|
||||
iced:
|
||||
type: Web
|
||||
title: iced - A cross-platform GUI library for Rust
|
||||
author: iced - A cross-platform GUI library for Rust
|
||||
url:
|
||||
value: https://iced.rs/
|
||||
date: 2025-02-09
|
||||
|
||||
sqlx:
|
||||
type: Web
|
||||
title: "GitHub - launchbadge/sqlx: 🧰 The Rust SQL Toolkit. An async, pure Rust SQL crate featuring compile-time checked queries without a DSL. Supports PostgreSQL, MySQL, and SQLite"
|
||||
author: GitHub
|
||||
url:
|
||||
value: https://github.com/launchbadge/sqlx/
|
||||
date: 2025-02-09
|
||||
|
||||
# ===== HOWTO ==== #
|
||||
|
||||
halloy:
|
||||
type: Web
|
||||
title: Halloy
|
||||
author: Halloy
|
||||
url:
|
||||
value: https://halloy.squidowl.org/
|
||||
date: 2025-02-09
|
||||
|
||||
iced-guide:
|
||||
type: Web
|
||||
title: Introduction - Unofficial Iced Guide
|
||||
author: GitHub Pages
|
||||
url:
|
||||
value: https://jl710.github.io/iced-guide/
|
||||
date: 2025-02-09
|
||||
|
||||
iced-editor:
|
||||
type: Web
|
||||
title: Building a simple text editor with iced, a cross-platform GUI library for Rust
|
||||
author: iced-rs
|
||||
publisher: YouTube
|
||||
url:
|
||||
value: https://www.youtube.com/watch?v=gcBJ7cPSALo
|
||||
date: 2025-02-09
|
||||
|
||||
# ===== DESIGN ==== #
|
||||
|
||||
# Richard Feldman. Making Impossible States Impossible, 2016. YouTube. URL: https://www.youtube.com/watch?v=IcgmSRJHu_8 (date of access: 09.02.2025).
|
||||
elm-conf:
|
||||
type: Web
|
||||
title: Making Impossible States Impossible, 2016
|
||||
author: Richard Feldman
|
||||
publisher: YouTube
|
||||
url:
|
||||
value: https://www.youtube.com/watch?v=IcgmSRJHu_8
|
||||
date: 2025-02-09
|
||||
|
||||
hexagonal:
|
||||
type: Web
|
||||
title: How to apply hexagonal architecture to Rust
|
||||
author: Josip Benko-Đaković
|
||||
publisher: Barrage
|
||||
url:
|
||||
value: https://www.barrage.net/blog/technology/how-to-apply-hexagonal-architecture-to-rust/
|
||||
date: 2025-02-09
|
||||
|
||||
state-machines:
|
||||
type: Web
|
||||
title: Pretty State Machine Patterns in Rust
|
||||
author: Hoverbear
|
||||
url:
|
||||
value: https://hoverbear.org/blog/rust-state-machine-pattern/
|
||||
date: 2025-02-09
|
||||
|
||||
# ===== EXAMPLES ==== #
|
||||
|
||||
aur:
|
||||
type: Web
|
||||
title: AUR (en) - Home
|
||||
author: AUR (en) - Home
|
||||
url:
|
||||
value: https://aur.archlinux.org/
|
||||
date: 2025-02-09
|
||||
|
||||
archlinux: # I use Arch btw!
|
||||
type: Web
|
||||
title: Arch Linux
|
||||
author: Arch Linux
|
||||
url:
|
||||
value: https://archlinux.org/
|
||||
date: 2025-02-09
|
||||
|
||||
# ===== TOOLS ==== #
|
||||
|
||||
neovim:
|
||||
type: Web
|
||||
title: Neovim
|
||||
author: Neovim
|
||||
url:
|
||||
value: https://neovim.io/
|
||||
date: 2025-02-09
|
||||
|
||||
mysql:
|
||||
type: Web
|
||||
title: MySQL
|
||||
author: MySQL
|
||||
url:
|
||||
value: https://www.mysql.com/
|
||||
date: 2025-02-09
|
||||
|
||||
docker:
|
||||
type: Web
|
||||
title: "Docker: accelerated container application development"
|
||||
author: Docker
|
||||
url:
|
||||
value: https://www.docker.com/
|
||||
date: 2025-02-09
|
||||
|
||||
compose:
|
||||
type: Web
|
||||
title: Docker compose
|
||||
author: Docker Documentation
|
||||
url:
|
||||
value: https://docs.docker.com/compose/
|
||||
date: 2025-02-09
|
BIN
3/coursework/img/aur_main.png
Normal file
After Width: | Height: | Size: 259 KiB |
BIN
3/coursework/img/aur_package.png
Normal file
After Width: | Height: | Size: 261 KiB |
BIN
3/coursework/img/aur_search.png
Normal file
After Width: | Height: | Size: 180 KiB |
BIN
3/coursework/img/aur_search_func.png
Normal file
After Width: | Height: | Size: 160 KiB |
BIN
3/coursework/img/aur_user.png
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
3/coursework/img/class_diagram.png
Normal file
After Width: | Height: | Size: 17 KiB |
BIN
3/coursework/img/data_diagram.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
3/coursework/img/er_diagram.png
Normal file
After Width: | Height: | Size: 108 KiB |
280
3/coursework/main.typ
Normal file
@ -0,0 +1,280 @@
|
||||
#import "template.typ": *
|
||||
#import "@preview/indenta:0.0.3": fix-indent
|
||||
|
||||
#let author = (
|
||||
name: "Білоус А. А.",
|
||||
full_name_gen: "Білоуса Антона Андрійовича",
|
||||
variant: 13, // TODO: custom variant.
|
||||
group: "ПЗПІ-23-3",
|
||||
gender: "m",
|
||||
)
|
||||
|
||||
#let mentors = (
|
||||
(
|
||||
name: "Широкопетлєва М. С.",
|
||||
gender: "f",
|
||||
degree: "Ст. викл. каф. ПІ",
|
||||
),
|
||||
(
|
||||
name: "Черепанова Ю. Ю.",
|
||||
gender: "f",
|
||||
degree: "Ст. викл. каф. ПІ",
|
||||
),
|
||||
(
|
||||
name: "Русакова Н. Є.",
|
||||
gender: "f",
|
||||
degree: "Доц. каф. ПІ",
|
||||
),
|
||||
)
|
||||
|
||||
#let task_list = (
|
||||
done_date: datetime(year: 2024, month: 12, day: 27),
|
||||
initial_data: datetime(year: 2024, month: 9, day: 15),
|
||||
source: "методичні вказівки до виконання курсової роботи, вимоги до інформаційної системи, предметна область, що пов’язана з пакунковим репозиторієм та його менеджментом.",
|
||||
content: "вступ, аналіз предметної області; постановка задачі; проектування бази даних; опис програми; висновки; перелік джерел посилання.",
|
||||
graphics: "загальна діаграма класів, ER-діаграма, UML-діаграми, DFD-діаграма, схема БД в 1НФ, 2НФ, 3НФ, копії екранів (“скриншоти”) прикладної програми, приклади звітів прикладної програми.",
|
||||
)
|
||||
|
||||
#let calendar_plan = (
|
||||
plan_table: [],
|
||||
approval_date: datetime(year: 2024, month: 12, day: 27),
|
||||
)
|
||||
|
||||
#let abstract = (
|
||||
keywords: (
|
||||
"БАЗА ДАНИХ",
|
||||
// "АВТОМАТИЗАЦІЯ",
|
||||
"РЕПОЗИТОРІЙ",
|
||||
"ПАКУНОК",
|
||||
"RUST",
|
||||
"MYSQL",
|
||||
"SQL",
|
||||
),
|
||||
text: [
|
||||
Мета даної роботи -- проєктування та розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрямована на створення ефективного середовища для спільної розробки та управління програмними пакунками. Система забезпечує зберігання інформації про програмні пакунки, а також надає інструменти для їх вдосконалення колективною співпрацею користувачів.
|
||||
|
||||
Для реалізації інформаційної системи було обрано сучасний стек технологій, а саме:
|
||||
Rust @rust -- як основна мова програмування для всих частин застосунку,
|
||||
iced @iced -- бібліотека для побудови графічних інтерфейсів з Elm архітектурою,
|
||||
SQLx @sqlx -- бібліотека для низькорівневої роботи з базою даних, що забезпечує коректність і гнучкість,
|
||||
MySQL @mysql -- як СУБД для зберігання інформації про пакунки, користувачів, та їх відносини,
|
||||
Neovim @neovim -- як сучасний редактор коду для швидкої і зручної розробки.
|
||||
|
||||
Результат розробки -- комп'ютерна програма, яка дозволяє зберігати та відображати інформацію про користувачів, пакунки та їх відносини; генерувати статистику про користувача та його пакунки. Застосунок, створений з використанням мови програмування Rust є безпечним, правильним, надійним та швидким.
|
||||
],
|
||||
)
|
||||
|
||||
#let appendices = (
|
||||
/*(
|
||||
title: "Приклад звіту 1",
|
||||
content: [test],
|
||||
),
|
||||
(
|
||||
title: "Приклад звіту 2",
|
||||
content: [test],
|
||||
),
|
||||
(
|
||||
title: "Приклад звіту 3",
|
||||
content: [test],
|
||||
),*/
|
||||
)
|
||||
|
||||
#show: cw-template.with(
|
||||
title: [Інформаційна система "Репозиторій пакунків". Колаборація над пакунками],
|
||||
subject_shorthand: "БД",
|
||||
department_gen: "Програмної інженерії",
|
||||
edu_program_shorthand: "ПЗПІ",
|
||||
author: author,
|
||||
mentors: mentors,
|
||||
task_list: task_list,
|
||||
calendar_plan: calendar_plan,
|
||||
abstract: abstract,
|
||||
bib_path: "bibl.yml",
|
||||
appendices: appendices,
|
||||
)
|
||||
|
||||
#show: fix-indent()
|
||||
|
||||
#nheading("Вступ")
|
||||
У сучасному світі істують мільйони пакунків з програмним забезпеченням, програмними бібліотеками та іншою інформацією.
|
||||
Інформаційні системи управління цими пакунками стали критично важливим елементом сучасної розробки програмного забезпечення. Їх значення особливо зросло з розвитком відкритого програмного забезпечення та модульного підходу до розробки, де кожен проект може залежати від десятків, сотень, або навіть тисяч сторонніх компонентів.
|
||||
|
||||
Відсутність ефективних систем управління пакунками призводить до численних проблем у процесі розробки. Розробники стикаються з труднощами при пошуку потрібних бібліотек, виникають конфлікти версій, ускладнюється процес оновлення залежностей, а також з'являються проблеми з безпекою через використання застарілих версій компонентів. Це суттєво сповільнює процес розробки та може призвести до значних фінансових втрат.
|
||||
|
||||
Метою цієї курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка спрощує процес менеджменту пакунків, створення їх відносин, керування залежностями, та надання користувачам різних ролей у розвитку репозиторію. У процесі роботи над системою було проведено детальний аналіз зхожої системи AUR @aur, котра ефективно використовується для надання користувачам дистрибутиву Arch Linux @archlinux можливості публіковати свої пакунки. Було спроектовано реляційну базу даних і розроблено комп'ютерну програму, яка дозволяє взаємодіяти з репозиторієм.
|
||||
|
||||
Весь застосунок написано мовою програмування Rust @rust, для графічного інтерфейсу використовується бібліотека iced @iced, для взаємодії з базою даних використвуєтсья бібліотека SQLx @sqlx. Інформація зберігається у базі даних MySQL @mysql. Розробка виконувалася у текстовому редакторі Neovim @neovim.
|
||||
|
||||
= АНАЛІЗ ТА КОНЦЕПТУАЛЬНЕ МОДЕЛЮВАННЯ ПРЕДМЕТНОЇ ОБЛАСТІ
|
||||
#v(-spacing)
|
||||
== Аналіз предметної області
|
||||
Дослідження предметної області є ключовим етапом у розробці інформаційної системи "Репозиторій пакунків. Колаборація над пакунками". Основною метою даного аналізу є визначення функціональних вимог та технічних особливостей системи, необхідних для ефективного управління програмними пакунками та забезпечення продуктивної співпраці розробників.
|
||||
|
||||
Пакунковий репозиторій являє собою централізоване сховище інформації про програмне забезпечення, що забезпечує зберігання, версіонування та розповсюдження програмних компонентів. В сучасних умовах критично важливою є автоматизація таких процесів як управління залежностями, контроль версій, перевірка сумісності та забезпечення безпеки пакунків. Це дозволяє значно підвищити ефективність розробки програмного забезпечення та мінімізувати ризики, пов'язані з використанням сторонніх компонентів.
|
||||
|
||||
Для створення ефективної системи управління пакунками необхідно ретельно проаналізувати існуючі рішення та їх особливості. Такий аналіз допомагає виявити найбільш важливі функціональні можливості та уникнути потенційних проблем при проектуванні власної системи.
|
||||
|
||||
В якості системи-аналогу розглянемо Arch User Repository (AUR) @aur -- репозиторій користувацьких пакунків для дистрибутиву Arch Linux @archlinux. AUR є яскравим прикладом успішної реалізації концепції колаборативної розробки та управління пакунками. Система надає користувачам можливість самостійно створювати та поширювати пакунки, які не входять до офіційного репозиторію.
|
||||
|
||||
При відвідуванні головної сторінки AUR @aur_main можна побачити статиску свого акаунту, всього репозиторію а також останні оновлення пакунків. За допомогою поля пошуку можна перейти до сторінки пошуку пакунків @aur_search.
|
||||
|
||||
#img("img/aur_main.png", "Головна сторінка AUR")
|
||||
|
||||
#img("img/aur_search.png", "Сторінка пошуку AUR")
|
||||
|
||||
Зі сторінки пошуку пакунків можна перейти до сторінки інформації пакунку, або ж до сторінки користувача який супроводжує пакунку. На сторінці інформації пакунку @aur_package можна побачити що пакунок має базу пакунку, пошукові слова, ліцензії, різні ролі користувачів, інформацію про залежності, тощо. На сторінці інформації про користувача @aur_user можна побачити різні атрибути пов'язані з акаунтом.
|
||||
|
||||
#img("img/aur_package.png", "Деталі пакунку в AUR")
|
||||
|
||||
#img("img/aur_user.png", "Деталі користувача в AUR")
|
||||
|
||||
Навігація по репозиторію здебільного здійснюється за допомогою гіперпосилань на сторінку пошуку де можна обрати досить багато критерій пошуку. Наприклад, при натисканні посилання "View this user's packages" в профілі користувача lsf, можна побачити всі пакунки котрі цей користувач підтримує @aur_search_func.
|
||||
|
||||
#img("img/aur_search_func.png", "Фунціонал пошуку AUR")
|
||||
|
||||
В контексті розробки пакункового репозиторію важливо визначити основні ролі користувачів та їхні потреби. Розробники пакунків виступають основними користувачами системи, створюючи та підтримуючи програмні компоненти, в той час як інші учасники можуть долучатися до процесу тестування, рецензування та вдосконалення пакунків.
|
||||
|
||||
Аналіз інформаційної системи виявив наступні ключові об'єкти предметної області: читач, супроводжуючий, пакунок, база пакунку, залежності пакунків, відносини пакунків, роль користувача. Основним користувачем виступає читач, який потребує ефективних інструментів для отримання інформації про програмні компоненти.
|
||||
|
||||
Основні інформаційні потреби користувачів системи включають:
|
||||
- забезпечення повного циклу управління пакунками: створення, редагування, версіонування та видалення;
|
||||
- надання інструментів для автоматизованої перевірки залежностей та сумісності компонентів;
|
||||
- забезпечення генерації технічної документації та звітів про використання пакунків.
|
||||
|
||||
На основі проведеного аналізу було визначено критичні вимоги до функціоналу репозиторію пакунків. Ця інформація становитиме основу для проектування системи, яка забезпечить ефективну колаборацію над програмними компонентами та автоматизує ключові процеси їх розробки та супроводу.
|
||||
|
||||
Особлива увага буде приділена реалізації механізмів забезпечення якості та безпеки пакунків, оскільки ці аспекти є критичними для створення надійної екосистеми програмного забезпечення. Система також передбачатиме можливості для масштабування та інтеграції з іншими інструментами розробки.
|
||||
|
||||
== Концептуальне моделювання предметної області
|
||||
Інформаційна система передбачає взаємодію як для читачів (неавтентифікованих користувачів), так і для автентифікованих користувачів. Система автоматизує процеси пов'язні з відстеженням залежностей пакунків, прав користувачів, пошуком пакунків і генеруванням статистик.
|
||||
|
||||
Кожний неавтентифікований користувач буде мати можливість ефективно:
|
||||
- здійснювати пошук пакунків за різними параметрами;
|
||||
- переглядати інформацію про пакунки, їх бази;
|
||||
- переглядати інформацію про користувачів;
|
||||
- переглядати статистику репозиторію;
|
||||
- увійти у існуючий, або створити новий акаунт.
|
||||
|
||||
Разом з можливостями неавтентифікованих користувачів, автентифіковані користувачі повинні мати можливість ефективно:
|
||||
- створювати пакунки;
|
||||
- створювати бази пакунків;
|
||||
- видаляти власні пакунки та бази пакунків;
|
||||
- додавати, видаляти та оновлювати залежності та відносини для власних пакунків;
|
||||
- додавати, видаляти та оновлювати ролі інших користувачів для власних пакунків;
|
||||
- оновлювати чужі пакунки та бази пакунків до яких був наданий доступ редагування;
|
||||
- переглядати статистику свого акаунту;
|
||||
- змінювати інформацію своєго акаунту;
|
||||
- вийти з акаунту;
|
||||
- видалити свій акаунт.
|
||||
|
||||
Всі дані зберігатимуться в базі даних, яка містить пов'язані таблиці спроектовані таким чином, що б забезпечити цілістність і коректність даних в них. Розумне проектування бази даних забезпечить оптимізацію обробку, пошук та оновлення інформації. Кожному об'єкту предметної області, як от користувач, пакунок, база пакунку, залежності пакунків, відносини пакунків та роль користувача, буде відповідати певна таблиця. Для розуміння структури інформаційної системи спроектовано загаліну діаграму класів @class_diagram, яка є основою для проектування бази даних.
|
||||
|
||||
#img("img/class_diagram.png", "Загальна діаграма класів (рисунок виконаний самостійно)")
|
||||
|
||||
Система буде зберігати наступні дані:
|
||||
- об'єкт користувача буде зберігати інформацію про користувачів системи. Він буде містити ім'я користувача, електронну пошту, пароль, час останнього використання обілкового запису, та його час створення з оновленням. Ця інформація необхідна для автентифікації та авторизації користувачів, а також для аудиту дій користувачів в системі;
|
||||
- об'єкт бази пакунку буде зберігати базову інформацію про групи пакунків. Він дозволить об'єднувати пакунки зі спільними компонентами та користувачами. Містить ім'я та опис групи пакунків, а також час створення та останнього оновлення. Ця інформація дозволяє групувати пакунки за їх базовою функціональністю;
|
||||
- об'єкт типу ролі користувача буде описувати ролі користувачів у контексті груп пакунків. Містить ідентифікатор ролі, її ім'я та опис. Приклади ролей: submitter (відправник), packager (пакувальник), maintainer (супроводжуючий), flagger (позначник). Цей об'єкт визначає дозволи користувачів на певні дії з групами пакунків;
|
||||
- об'єкт ролі користувача буде прив'язувати користувачів до груп пакунків та визначати їх ролі в цих групах. Містить ідентифікатор групи пакунків, ідентифікатор користувача, ідентифікатор ролі та коментар від користувача. Ця інформація дозволяє визначити, хто, чому, і які права має в кожній групі пакунків;
|
||||
- об'єкт пакунку буде зерігати інформацію про окремі пакунки. Містить ідентифікатор групи пакунків, ім'я пакунку, версію, опис, веб-покликання, опціональний час позначення, час створення та останнього оновлення. Ця інфрмація є основною для ідентифікації та опису кожного пакунку;
|
||||
- об'єкт виду залежності буде визначати типи залежностей пакунків (наприклад, проста залежність, залежність для збірки пакунку, опціональна залежність). Містить ідентифікатор типу залежності та її назву. Цей об'єкт дозволить класифікувати залежності пакунків;
|
||||
- об'єкт залежностей пакунку буде зберігати інформацію про залежності пакунків. Він буде містити архітектуру, умову, опис, ідентифікатор пакунку, ідентифікатор типу залежності та псевдонім назви залежності. Ця інформація дозволяє визначити, від яких інших пакунків залежить даний пакунок.
|
||||
- об'єкт виду відносин буде визначати типи відносин між пакунками (наприклад: конфліктує, надає, замінює). Містить ідентифікатор типу відношення та його назву. Цей об'єкт дозволяє класифікувати відносини між пакунками;
|
||||
- об'єкт відносин пакунків буде зберігати інформацію про відносини пакунків (конфлікти, надання, заміна). Містить архітектуру, вимоги, ідентифікатор пакунку, ідентифікатор типу відношення та ім'я пакунку-відношення. Ця інформація дозволяє визначити, які пакунки конфліктують з даним пакунком, які функції він надає, і які пакунки він замінює.
|
||||
|
||||
Користувач системи має можливість здійснювати пошук пакунків та перегляди їх інформацію, переходити до профілей користувачів та переглядати їх пакунки. Для наочного представлення процесів та потоків даних в системі під час виконання користувачем поставленої задачі створимо DFD-діаграму @data_diagram, що відображатиме послідовність кроків під час виконання користувачем цільової бізнес-задачі перегляду інформації про пакунок та отримання звіту з цієї інформації.
|
||||
|
||||
#img("img/data_diagram.png", "Діаграма потоків даних (рисунок виконано самостійно)")
|
||||
|
||||
Для ефективного відображення інформаційних потреб користувачів необхідно побудувати діаграму варіантів використання (Use Case). Ця діаграма /* @usecase_diagram */ демонструє взаємодію між різними акторами системи, такими як користувачі, адміністратори та інші учасники, та функціональними можливостями системи, такими як управління пакунками, їх створення, перегляд, отримання інформації та інші операції. Діаграма варіантів використання дозволяє визначити основні сценарії взаємодії користувачів з системою, ідентифікувати ключові функції та процеси, що відбуваються під час цієї взаємодії, та забезпечити розробку системи, яка відповідає реальним потребам користувачів. Крім того, діаграма варіантів використання може бути використана для визначення пріоритетів функціональних можливостей системи, виявлення потенційних проблем та слабких місць у процесах взаємодії з користувачами, а також для оптимізації архітектури системи для забезпечення максимальної ефективності та зручності використання.
|
||||
|
||||
//#img("img/usecase_diagram.png", "Use-Case діаграма (рисунок виконаний самостійно)")
|
||||
|
||||
= Постановка задачі
|
||||
|
||||
Метою курсової роботи є розробка інформаційної системи "Репозиторій пакунків. Колаборація над пакунками", яка забезпечить ефективне зберігання, пошук, управління та спільну розробку програмних пакунків. Після аналізу предметної області було виділено наступні вимоги щодо функціоналу інформаційної системи:
|
||||
|
||||
+ Підтримка основних процесів управління пакунками та їх метаданими:
|
||||
+ створення пакунків, їх оновлення та видалення;
|
||||
+ керування метаданими пакунків, включаючи назву, версію, веб-покликання на ресурс, ліцензію, опис та групу;
|
||||
+ додання, оновлення та видалення залежностей між пакунками, а саме: обов'язкова залежність, опціональна залежність, та залежність під час збірки пакунку;
|
||||
+ додання, оновлення та видалення відносин пакунків таких як: надання залежності, конфлікт з залежністю та заміна залежності.
|
||||
|
||||
+ Забезпечення системи користувацьких акаунтів:
|
||||
+ надійний механізм реєстрації та автентифікації користувачів;
|
||||
+ можливість видалення свого акаунту та передачі пакунків іншому користувачеві;
|
||||
+ механізм блокування недобросовісних користувачів.
|
||||
|
||||
+ Система прав користувачів над пакунками:
|
||||
+ мітчик пакунку -- будь-який користувач котрий знаходить проблему в пакунку та помічає його з коментарем який описує цю проблему;
|
||||
+ автор пакунку -- користувач який створив пакунок, він володіє пакунком та може здійснювати всі процеси управління пакунком, в тому числі надавати права іншим користувачам;
|
||||
+ пакувальник пакунку -- користувач котрий має дозвіл на завантаження нових збірок пакунку до репозиторію;
|
||||
+ супроводжуючий пакунку -- користувач котрий був назначений автором як його заступник який може здійснювати всі процеси управління пакунком окрім назначення нових авторів і супроводжуючих та видалення пакунку.
|
||||
|
||||
+ Функції пошуку та категоризації:
|
||||
+ пошук та фільтрація пакунків за веб-покликанням, назвою, групою, описом пакунку, описом групи, навзвою та описом пакунку, користувачем, помітчиком, пакувальником, подавачем та супроводжуючим пакунку;
|
||||
+ можливість точного та довільного пошуку;
|
||||
+ можливість вибору ліміту кількості результатів пошуку;
|
||||
+ сортування результатів за назвою пакунку, його версією, назвою групи, часом створення та часом останнього оновлення.
|
||||
|
||||
+ Надання аналітичної інформації:
|
||||
+ статистика користувачів: загальна кількість користувачів, кількість активних та неактивних користувачів;
|
||||
+ статистика репозиторію: загальна кількість пакунків, кількість осиротілих пакунків, кількість пакунків доданих та оновлених за останній тиждень та кількість пакунків котрі ніколи не оновлювалися;
|
||||
+ інформація про залежності та відносини кожного пакунку з іншими пакунками;
|
||||
+ інформація про пакунки кожного користувача та рівень прав який цей користувач має для цих пакунків.
|
||||
|
||||
= Проектування бази даних
|
||||
#v(-spacing)
|
||||
== Побудова ER-діаграми
|
||||
Проведений аналіз предметної області дозволив визначити наступні сутності та їх атрибути:
|
||||
|
||||
- сутність "Користувач": ім'я, електронна пошта, пароль, дата останнього використання, дата створення, дата оновлення;
|
||||
- сутність "Пакунок": назва, версія, опис, веб-покликання, дата позначення, дата створення, дата оновлення;
|
||||
- сутність "База пакунку": назва, опис, дата створення, дата оновлення;
|
||||
- сутність "Тип ролі": назва ролі, опис;
|
||||
- сутність "Роль": коментар;
|
||||
- сутність "Тип залежності": назва виду залежності;
|
||||
- сутність "Залежність": архітектура, умова, опис, назва залежного пакунку;
|
||||
- сутність "Тип відношення": назва виду відношення;
|
||||
- сутність "Відношення": архітектура, умова, назва пакунку з яким є відношення.
|
||||
|
||||
Між цими сутностями існують наступні зв’язки:
|
||||
|
||||
- "Користувач" - "Роль": один до жодного або багатьох;
|
||||
- "База пакунку" - "Роль": один до жодного або багатьох;
|
||||
- "Тип ролі" - "Роль": один до жодного або багатьох;
|
||||
- "База пакунку" - "Пакунок": один до жодного або багатьох;
|
||||
- "Пакунок" - "Залежність": один до жодного або багатьох;
|
||||
- "Тип залежності" - "Залежність": один до жодного або багатьох;
|
||||
- "Пакунок" - "Відношення": один до жодного або багатьох;
|
||||
- "Тип відношення" - "Відношення": один до жодного або багатьох.
|
||||
|
||||
Зобразимо визначені сутності та відповідні зв’язки у вигляді ER-діаграми @er_diagram.
|
||||
|
||||
#img("img/er_diagram.png", "ER-діаграма концептуальної моделі (рисунок виконаний самостійно)")
|
||||
|
||||
Отримана ER-діаграма буде використана для обрання та побудови логічної моделі бази даних.
|
||||
|
||||
== Вибір та побудова логічної моделі бази даних на базі ER-діаграми
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
== Побудова логічної моделі бази даних шляхом нормалізаці
|
||||
...
|
||||
|
||||
= Опис програми
|
||||
#v(-spacing)
|
||||
== Загальні відомості
|
||||
...
|
||||
== Виклик і завантаження
|
||||
...
|
||||
== Призначення і логічна структура
|
||||
...
|
||||
== Опис фізичної моделі бази даних
|
||||
...
|
||||
== Опис програмної реалізації
|
||||
|
||||
#nheading("Висновки")
|
||||
...
|
627
3/coursework/template.typ
Normal file
@ -0,0 +1,627 @@
|
||||
|
||||
/// numberless heading
|
||||
#let nheading(title) = heading(depth: 1, numbering: none, title)
|
||||
|
||||
/// fill horizontal space with a box and not an empty space
|
||||
#let hfill(width) = box(width: width, repeat(" ")) // NOTE: This is a HAIR SPACE (U+200A), not a regular space
|
||||
|
||||
/// make underlined cell with filled value
|
||||
#let uline(align: center, content) = underline[
|
||||
#if align != left { hfill(1fr) }
|
||||
#content
|
||||
#if align != right { hfill(1fr) }
|
||||
]
|
||||
|
||||
/// bold text
|
||||
#let bold(content) = text(weight: "bold")[#content]
|
||||
|
||||
/// captioned image with label derived from path
|
||||
#let img(path, caption) = [
|
||||
#figure(
|
||||
image(path),
|
||||
caption: caption,
|
||||
)
|
||||
#label(path.split("/").last().split(".").first())
|
||||
]
|
||||
|
||||
/// subjects list
|
||||
#let subjects = (
|
||||
"БД": "Бази даних",
|
||||
"ОПНJ": "Основи програмування на Java",
|
||||
"ОС": "Операційні системи",
|
||||
"ПП": "Проектний практикум",
|
||||
"СПМ": "Скриптові мови програмування",
|
||||
"Ф": "Філософія",
|
||||
)
|
||||
|
||||
/// education programs list
|
||||
#let edu_programs = (
|
||||
"ПЗПІ": (
|
||||
name: "Інженерія програмного забезпечення",
|
||||
number: 121,
|
||||
),
|
||||
)
|
||||
|
||||
#let month_gen(month) = (
|
||||
"січня",
|
||||
"лютого",
|
||||
"березня",
|
||||
"квітня",
|
||||
"травня",
|
||||
"червня",
|
||||
"липня",
|
||||
"серпня",
|
||||
"вересня",
|
||||
"жовтня",
|
||||
"листопада",
|
||||
"грудня",
|
||||
).at(month - 1)
|
||||
|
||||
/// spacing between lines
|
||||
#let spacing = 0.95em
|
||||
|
||||
#let style(it) = {
|
||||
set page(
|
||||
paper: "a4",
|
||||
margin: (top: 20mm, right: 10mm, bottom: 20mm, left: 25mm),
|
||||
number-align: top + right,
|
||||
numbering: (..numbers) => {
|
||||
if numbers.pos().at(0) != 1 {
|
||||
numbering("1", numbers.pos().at(0))
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
set text(font: "Liberation Serif", size: 14pt, hyphenate: false, lang: "ua")
|
||||
set par(justify: true, first-line-indent: 1.25cm)
|
||||
set underline(evade: false)
|
||||
|
||||
// set 1.5 line spacing
|
||||
set block(spacing: spacing)
|
||||
set par(spacing: spacing)
|
||||
set par(leading: spacing)
|
||||
|
||||
// enums and lists
|
||||
let ua_alph_numbering() = {
|
||||
// INFO: This alphabet is not full, maybe it should be extended or maybe not.
|
||||
// I cant remember nor find proper formatting rules.
|
||||
// "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя" (full alphabet)
|
||||
|
||||
let alphabet = "абвгдежиклмнпрстуфхцшщюя".split("")
|
||||
i => { alphabet.at(i) + ")" }
|
||||
}
|
||||
|
||||
set enum(numbering: ua_alph_numbering(), indent: 1.25cm, body-indent: 0.5cm)
|
||||
show enum: it => {
|
||||
set enum(indent: 0em, numbering: "1)")
|
||||
it
|
||||
}
|
||||
|
||||
set list(indent: 1.35cm, body-indent: 0.5cm, marker: [--])
|
||||
|
||||
// figures
|
||||
set figure.caption(separator: [ -- ])
|
||||
|
||||
let img = counter("image")
|
||||
let tab = counter("table")
|
||||
|
||||
show figure.where(kind: image): set figure(
|
||||
numbering: (..) => {
|
||||
img.step()
|
||||
context str(counter(heading).get().at(0)) + "." + context img.display()
|
||||
},
|
||||
)
|
||||
show figure.where(kind: table): set figure(
|
||||
numbering: (..) => {
|
||||
tab.step()
|
||||
context str(counter(heading).get().at(0)) + "." + context tab.display()
|
||||
},
|
||||
)
|
||||
|
||||
// appearance of references to images
|
||||
show ref: it => {
|
||||
let el = it.element
|
||||
if el != none and el.kind == image {
|
||||
link(
|
||||
el.location(),
|
||||
[(див. рис. #numbering(el.numbering))],
|
||||
)
|
||||
} else {
|
||||
it
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Maybe this will be better. Must be investigated.
|
||||
//
|
||||
// set math.equation(numbering: (..num) =>
|
||||
// numbering("(1.1)", counter(heading).get().first(), num.pos().first())
|
||||
// )
|
||||
// set figure(numbering: (..num) =>
|
||||
// numbering("1.1", counter(heading).get().first(), num.pos().first())
|
||||
// )
|
||||
|
||||
show figure: it => {
|
||||
v(spacing * 2, weak: true)
|
||||
it
|
||||
v(spacing * 2, weak: true)
|
||||
}
|
||||
|
||||
// headings
|
||||
set heading(numbering: "1.1")
|
||||
|
||||
show heading.where(level: 1): it => {
|
||||
set align(center)
|
||||
set text(size: 14pt, weight: "semibold")
|
||||
|
||||
pagebreak(weak: true)
|
||||
upper(it)
|
||||
v(spacing * 2, weak: true)
|
||||
}
|
||||
show heading.where(level: 2): it => {
|
||||
set text(size: 14pt, weight: "regular")
|
||||
|
||||
v(spacing * 2, weak: true)
|
||||
block(width: 100%, spacing: 0em)[
|
||||
#h(1.25cm)
|
||||
#counter(heading).display(it.numbering)
|
||||
#it.body
|
||||
]
|
||||
v(spacing * 2, weak: true)
|
||||
}
|
||||
|
||||
it
|
||||
}
|
||||
|
||||
/// DSTU 3008:2015 Template for NURE
|
||||
/// -> content
|
||||
/// - doc (content): Content to apply the template to.
|
||||
/// - title (str): Title of the document.
|
||||
/// - subject_shorthand (str): Subject short name.
|
||||
/// - department_gen (str): Department name in genitive form.
|
||||
/// - authors ((name: str, full_name_gen: str, variant: int, group: str, gender: str),): List of Authors dicts.
|
||||
/// - mentors ((name: str, gender: str, degree: str),): List of mentors dicts.
|
||||
/// - edu_program_shorthand (str): Education program shorthand.
|
||||
/// - task_list (done_date: datetime, initial_data: datetime, source: (content | str), content: (content | str), graphics: (content | str)): Task list object.
|
||||
/// - calendar_plan ( plan_table: (content | str), approval_date: datetime): Calendar plan object.
|
||||
/// - abstract (keywords: (str, ), text: (content | str)): Abstract object.
|
||||
/// - bib_path path: Path to the bibliography yaml file.
|
||||
/// - appendices ((title: str, content: content, ): List of appendices objects.
|
||||
#let cw-template(
|
||||
doc,
|
||||
title: "NONE",
|
||||
subject_shorthand: "NONE",
|
||||
department_gen: "Програмної інженерії",
|
||||
author: (),
|
||||
mentors: (),
|
||||
edu_program_shorthand: "ПЗПІ",
|
||||
task_list: (),
|
||||
calendar_plan: (),
|
||||
abstract: (),
|
||||
bib_path: "bibl.yml",
|
||||
appendices: (),
|
||||
) = {
|
||||
set document(title: title, author: author.name)
|
||||
|
||||
show: style
|
||||
|
||||
let bib-count = state("citation-counter", ())
|
||||
show cite: it => {
|
||||
it
|
||||
bib-count.update(((..c)) => (..c, it.key))
|
||||
}
|
||||
show bibliography: it => {
|
||||
set text(size: 0pt)
|
||||
it
|
||||
}
|
||||
|
||||
|
||||
let head_mentor = mentors.at(0)
|
||||
let edu_program = edu_programs.at(edu_program_shorthand)
|
||||
|
||||
// page 1
|
||||
[
|
||||
#set align(center)
|
||||
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
|
||||
|
||||
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
|
||||
|
||||
\
|
||||
|
||||
Кафедра Програмної інженерії
|
||||
|
||||
\
|
||||
|
||||
ПОЯСНЮВАЛЬНА ЗАПИСКА
|
||||
|
||||
ДО КУРСОВОЇ РОБОТИ
|
||||
|
||||
з дисципліни: "#subjects.at(subject_shorthand, default: "NONE")"
|
||||
|
||||
Тема роботи: "#title"
|
||||
|
||||
\ \ \
|
||||
|
||||
#columns(2, gutter: 4cm)[
|
||||
#set align(left)
|
||||
|
||||
#if author.gender == "m" { [Виконав\ ] } else { [Виконала\ ] } ст. гр. #author.group
|
||||
|
||||
\
|
||||
Керівник:\
|
||||
#head_mentor.degree
|
||||
|
||||
\
|
||||
Робота захищена на оцінку
|
||||
|
||||
\
|
||||
Комісія:\
|
||||
#for mentor in mentors {
|
||||
[#mentor.degree\
|
||||
]
|
||||
}
|
||||
|
||||
#colbreak()
|
||||
#set align(left)
|
||||
|
||||
\
|
||||
#author.name
|
||||
|
||||
\ \
|
||||
#head_mentor.name
|
||||
|
||||
\
|
||||
#underline(" " * 35)
|
||||
|
||||
\ \
|
||||
#for mentor in mentors {
|
||||
[#mentor.name\
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
#v(1fr)
|
||||
|
||||
Харків -- #datetime.today().display("[year]")
|
||||
|
||||
#pagebreak()
|
||||
]
|
||||
//
|
||||
|
||||
// page 2
|
||||
{
|
||||
uline([Харківський національний університет радіоелектроніки])
|
||||
|
||||
linebreak()
|
||||
linebreak()
|
||||
|
||||
grid(
|
||||
columns: (100pt, 1fr),
|
||||
bold([
|
||||
Кафедра
|
||||
Дисципліна
|
||||
Спеціальність
|
||||
]),
|
||||
{
|
||||
uline(align: left, department_gen)
|
||||
linebreak()
|
||||
uline(align: left, subjects.at(subject_shorthand))
|
||||
linebreak()
|
||||
uline(align: left, [#edu_program.number #edu_program.name])
|
||||
},
|
||||
)
|
||||
grid(
|
||||
columns: (1fr, 1fr, 1fr),
|
||||
gutter: 0.3fr,
|
||||
[#bold("Курс") #uline(2)], [#bold("Група") #uline(author.group)], [#bold("Семестр") #uline(3)],
|
||||
)
|
||||
|
||||
linebreak()
|
||||
linebreak()
|
||||
linebreak()
|
||||
|
||||
align(center, bold[ЗАВДАННЯ \ на курсову роботу студента])
|
||||
|
||||
linebreak()
|
||||
|
||||
uline(align: left)[_#author.full_name_gen _]
|
||||
|
||||
linebreak()
|
||||
linebreak()
|
||||
|
||||
bold[\1. Тема роботи:]
|
||||
uline[#title.]
|
||||
|
||||
linebreak()
|
||||
|
||||
{
|
||||
bold[\2. Строк здачі закінченої роботи:]
|
||||
uline(task_list.done_date.display("[day].[month].[year]"))
|
||||
hfill(10fr)
|
||||
}
|
||||
|
||||
linebreak()
|
||||
|
||||
bold[\3. Вихідні дані для роботи:]
|
||||
uline(task_list.source)
|
||||
|
||||
linebreak()
|
||||
|
||||
bold[\4. Зміст розрахунково-пояснювальної записки:]
|
||||
uline(task_list.content)
|
||||
|
||||
linebreak()
|
||||
|
||||
bold[\5. Перелік графічного матеріалу:]
|
||||
uline(task_list.graphics)
|
||||
|
||||
linebreak()
|
||||
|
||||
{
|
||||
bold[\6. Строк здачі закінченої роботи:]
|
||||
uline(task_list.done_date.display("[day].[month].[year]"))
|
||||
hfill(10fr)
|
||||
}
|
||||
|
||||
pagebreak()
|
||||
}
|
||||
|
||||
// page 3
|
||||
{
|
||||
align(center, bold[КАЛЕНДАРНИЙ ПЛАН])
|
||||
|
||||
linebreak()
|
||||
|
||||
calendar_plan.plan_table
|
||||
|
||||
linebreak()
|
||||
|
||||
grid(
|
||||
columns: (6fr, 5fr),
|
||||
grid(
|
||||
columns: (1fr, 3fr, 1fr),
|
||||
gutter: 0.2fr,
|
||||
[
|
||||
Студент \
|
||||
Керівник \
|
||||
#align(center)["#calendar_plan.approval_date.day()"]
|
||||
],
|
||||
[
|
||||
#uline(align: center, []) \
|
||||
#uline(align: center, []) \
|
||||
#uline(align: center, month_gen(calendar_plan.approval_date.month()))
|
||||
],
|
||||
[
|
||||
\ \
|
||||
#calendar_plan.approval_date.year() р.
|
||||
],
|
||||
),
|
||||
[
|
||||
#author.name, \
|
||||
#head_mentor.degree
|
||||
#head_mentor.name.
|
||||
],
|
||||
)
|
||||
|
||||
pagebreak()
|
||||
}
|
||||
|
||||
// page 4 {{{
|
||||
[
|
||||
#align(center, bold([РЕФЕРАТ])) \
|
||||
|
||||
#context [
|
||||
#let pages = counter(page).final().at(0)
|
||||
#let tables = counter("table").final().at(0)
|
||||
#let images = counter("image").final().at(0)
|
||||
#let bibs = bib-count.final().dedup().len()
|
||||
|
||||
#let counters = ()
|
||||
|
||||
#if pages != 0 { counters.push([#pages с.]) }
|
||||
#if tables != 0 { counters.push([#tables табл.]) }
|
||||
#if images != 0 { counters.push([#images рис.]) }
|
||||
#if bibs != 0 { counters.push([#bibs джерел]) }
|
||||
|
||||
Пояснювальна записка до курсової роботи: #counters.join(", ").
|
||||
]
|
||||
|
||||
\
|
||||
|
||||
#{
|
||||
let keywords = abstract.keywords
|
||||
let is_cyrillic = word => word.split("").any(char => ("А" <= char and char <= "я"))
|
||||
|
||||
let n = keywords.len()
|
||||
for i in range(n) {
|
||||
for j in range(0, n - i - 1) {
|
||||
if (
|
||||
(not is_cyrillic(keywords.at(j)) and is_cyrillic(keywords.at(j + 1)))
|
||||
or (
|
||||
is_cyrillic(keywords.at(j)) == is_cyrillic(keywords.at(j + 1)) and keywords.at(j) > keywords.at(j + 1)
|
||||
)
|
||||
) {
|
||||
(keywords.at(j), keywords.at(j + 1)) = (keywords.at(j + 1), keywords.at(j))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
keywords.join(", ")
|
||||
}
|
||||
|
||||
\
|
||||
|
||||
#abstract.text
|
||||
]
|
||||
// }}}
|
||||
|
||||
// page 5
|
||||
outline(
|
||||
title: [
|
||||
ЗМІСТ
|
||||
#v(spacing * 2, weak: true)
|
||||
],
|
||||
depth: 2,
|
||||
indent: auto,
|
||||
)
|
||||
|
||||
doc
|
||||
|
||||
// bibliography
|
||||
{
|
||||
heading(depth: 1, numbering: none)[Перелік джерел посилання]
|
||||
|
||||
bibliography(
|
||||
bib_path,
|
||||
style: "ieee",
|
||||
full: true,
|
||||
title: none,
|
||||
)
|
||||
|
||||
let bib_data = yaml(bib_path)
|
||||
|
||||
let format-entry(citation) = {
|
||||
if (citation.type == "Web") {
|
||||
let date_array = citation.url.date.split("-")
|
||||
let date = datetime(
|
||||
year: int(date_array.at(0)),
|
||||
month: int(date_array.at(1)),
|
||||
day: int(date_array.at(2)),
|
||||
)
|
||||
[
|
||||
#citation.title.
|
||||
_#{citation.author}_.
|
||||
URL: #citation.url.value (дата звернення: #date.display("[day].[month].[year]")).
|
||||
]
|
||||
} else if citation.type == "Book" [
|
||||
#citation.author
|
||||
#citation.title.
|
||||
#citation.publisher,
|
||||
#citation.date.
|
||||
#citation.page-total c.
|
||||
] else [
|
||||
UNSUPPORTED BIBLIOGRAPHY ENTRY TYPE, PLEASE OPEN THE ISSUE
|
||||
]
|
||||
}
|
||||
|
||||
show enum.item: it => {
|
||||
box(width: 1.25cm)
|
||||
box(width: 1em + 0.5cm)[#it.number.]
|
||||
it.body
|
||||
linebreak()
|
||||
}
|
||||
|
||||
context {
|
||||
for (i, citation) in query(ref.where(element: none)).map(r => str(r.target)).dedup().enumerate() {
|
||||
enum.item(
|
||||
i + 1,
|
||||
format-entry(bib_data.at(citation)),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// appendices
|
||||
{
|
||||
counter(heading).update(0)
|
||||
|
||||
for (i, appendix) in appendices.enumerate() [
|
||||
#set heading(
|
||||
numbering: i => [
|
||||
Додаток #"АБВГДЕЖИКЛМНПРСТУФХЦШЩЮЯ".split("").at(i)
|
||||
],
|
||||
)
|
||||
|
||||
#show heading: it => {
|
||||
set align(center)
|
||||
set text(size: 14pt, weight: "regular")
|
||||
|
||||
pagebreak(weak: true)
|
||||
bold(upper(counter(heading).display(it.numbering)))
|
||||
linebreak()
|
||||
it.body
|
||||
v(spacing * 2, weak: true)
|
||||
}
|
||||
#heading(appendix.title)
|
||||
#appendix.content
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
/// DSTU 3008:2015 Template for NURE
|
||||
/// -> content
|
||||
/// - doc (content): Content to apply the template to.
|
||||
/// - doctype ("ЛБ" | "ПЗ"): Document type.
|
||||
/// - title (str): Title of the document.
|
||||
/// - subject_shorthand (str): Subject short name.
|
||||
/// - department_gen (str): Department name in genitive form.
|
||||
/// - worknumber (int): Number of the work, can be omitted.
|
||||
/// - authors ((name: str, full_name_gen: str, variant: int, group: str, gender: str),): List of Authors dicts.
|
||||
/// - mentor (name: str, gender: str, degree: str): Mentors objects.
|
||||
#let lab-pz-template(
|
||||
doc,
|
||||
doctype: "NONE",
|
||||
title: "NONE",
|
||||
subject_shorthand: "NONE",
|
||||
department_gen: "Програмної інженерії",
|
||||
worknumber: 1,
|
||||
authors: (),
|
||||
mentor: (),
|
||||
) = {
|
||||
set document(title: title, author: authors.at(0).name)
|
||||
|
||||
show: style
|
||||
|
||||
context counter(heading).update(worknumber - 1)
|
||||
|
||||
align(center)[
|
||||
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ \
|
||||
ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ РАДІОЕЛЕКТРОНІКИ
|
||||
|
||||
\ \
|
||||
Кафедра #department_gen
|
||||
|
||||
\ \ \
|
||||
Звіт \
|
||||
з
|
||||
#if doctype == "ЛБ" [лабораторної роботи] else [практичної роботи]
|
||||
#if worknumber != none [№ #worknumber]
|
||||
|
||||
з дисципліни: "#subjects.at(subject_shorthand, default: "UNLNOWN SUBJECT, PLEASE OPEN THE ISSUE")"
|
||||
|
||||
з теми: "#title"
|
||||
|
||||
\ \ \ \
|
||||
|
||||
#columns(2)[
|
||||
#set align(left)
|
||||
|
||||
#if authors.len() == 1 [
|
||||
#let author = authors.at(0)
|
||||
#if author.gender == "m" { [Виконав:\ ] } else { [Виконала:\ ] }
|
||||
ст. гр. #author.group\
|
||||
#author.name\
|
||||
#if author.variant != none { [Варіант: №#author.variant] }
|
||||
] else [
|
||||
Виконали:\
|
||||
ст. гр. #authors.at(0).group\
|
||||
#authors.map(a => [ #a.name\ ])
|
||||
]
|
||||
|
||||
#colbreak()
|
||||
#set align(right)
|
||||
|
||||
#if mentor.gender == "m" { [Перевірив:\ ] } else { [Перевірила:\ ] }
|
||||
#mentor.degree #if mentor.degree.len() >= 15 [\ ]
|
||||
#mentor.name\
|
||||
]
|
||||
|
||||
#v(1fr)
|
||||
|
||||
Харків -- #datetime.today().display("[year]")
|
||||
]
|
||||
|
||||
pagebreak(weak: true)
|
||||
|
||||
heading(title)
|
||||
doc
|
||||
}
|