forked from 0x1D8/nure
Usecase?
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
*.pdf
|
||||
*.drawio.bkp
|
||||
other
|
||||
template.typ
|
||||
|
@ -10,7 +10,7 @@
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="TsSuOcFh9R8wNlV-BA49-3" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="TsSuOcFh9R8wNlV-BA49-3" value="Пошук пакету" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<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">
|
||||
@ -19,7 +19,7 @@
|
||||
<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">
|
||||
<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">
|
||||
@ -86,7 +86,7 @@
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-64" target="xkRWYsoNMHkY_TOU-Azu-11" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-64" value="<div>Вибір пакету</div>" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<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">
|
||||
@ -118,7 +118,7 @@
|
||||
<mxPoint x="60" y="90" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-78" value="<span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>Бази&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">
|
||||
<mxCell id="g8Hk9kY67_a-sykVnxVS-78" value="<span style="white-space: pre;">	</span><span style="white-space: pre;">	</span>Бази<div>&nbsp; &nbsp;&nbsp;<span style="white-space: pre;">	</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="white-space: pre;">	</span>пакунків</div>" style="rounded=0;whiteSpace=wrap;html=1;align=left;" parent="g8Hk9kY67_a-sykVnxVS-77" vertex="1">
|
||||
<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">
|
||||
@ -142,7 +142,7 @@
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="xkRWYsoNMHkY_TOU-Azu-11" target="g8Hk9kY67_a-sykVnxVS-87" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-11" value="Перегляд інформацї про пакет" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-11" value="Перегляд інформацї про пакунок" style="shape=process;whiteSpace=wrap;html=1;backgroundOutline=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="360" y="820" width="156" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="TsSuOcFh9R8wNlV-BA49-2" target="TsSuOcFh9R8wNlV-BA49-3" edge="1">
|
||||
@ -152,13 +152,28 @@
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="g8Hk9kY67_a-sykVnxVS-39" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="650" />
|
||||
<mxPoint x="500" y="670" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-79" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="790" />
|
||||
<mxPoint x="500" y="670" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-49" target="g8Hk9kY67_a-sykVnxVS-28" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="500" y="720" />
|
||||
<mxPoint x="500" y="670" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="xkRWYsoNMHkY_TOU-Azu-29" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="g8Hk9kY67_a-sykVnxVS-69" target="TsSuOcFh9R8wNlV-BA49-2" edge="1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
|
169
assets/usecase_diagram.drawio
Normal file
169
assets/usecase_diagram.drawio
Normal file
@ -0,0 +1,169 @@
|
||||
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.0.9 Chrome/128.0.6613.186 Electron/32.3.0 Safari/537.36" version="26.0.9">
|
||||
<diagram name="Page-1" id="b5b7bab2-c9e2-2cf4-8b2a-24fd1a2a6d21">
|
||||
<mxGraphModel dx="819" dy="518" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" background="none" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-1" value="Неавтентифікований&nbsp;<div>К<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">ористувач</span></div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="210" y="125" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-2" value="<span style="font-size: 10px;">Автентифікація</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="200" y="260" width="80" height="45" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-6" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.269;exitY=0.967;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-2" target="fWsHJvBSsPRKD1qfUvCc-7" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="745" y="-82" as="sourcePoint" />
|
||||
<mxPoint x="715" y="-82" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-7" value="<span style="font-size: 10px;">Логін</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="160" y="320" width="60" height="45" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-8" value="<span style="font-size: 10px;">Реєстрація</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="230" y="320" width="70" height="45" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-9" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-2" target="fWsHJvBSsPRKD1qfUvCc-8" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="693" y="-42" as="sourcePoint" />
|
||||
<mxPoint x="714" y="-66" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-10" value="<span style="font-size: 10px;">Статистика</span><div><span style="font-size: 10px;">репозиторію</span></div>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="300" y="260" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-11" value="<span style="font-size: 10px;">Статистика<br>акаунту</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="280" y="370" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-12" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.222;entryY=0.058;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-10" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="220" as="sourcePoint" />
|
||||
<mxPoint x="460" y="-50" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-13" value="<span style="font-size: 10px;">Пошук пакунків</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="310" y="30" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-13" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="150" as="sourcePoint" />
|
||||
<mxPoint x="480" y="-40" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-17" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-2" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="240" y="230" as="sourcePoint" />
|
||||
<mxPoint x="610" y="-80" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-18" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.444;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.784;exitY=0.115;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="fWsHJvBSsPRKD1qfUvCc-21" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="423" y="130" as="sourcePoint" />
|
||||
<mxPoint x="600" y="-70" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-19" value="<span style="font-size: 10px;">Інформація пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="220" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-20" value="<span style="font-size: 10px;">Інформація<br>бази пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="125" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-21" value="<span style="font-size: 10px;">Інформація<br>користувача</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="450" y="40" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-22" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-10" target="fWsHJvBSsPRKD1qfUvCc-19" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="433" y="-40" as="sourcePoint" />
|
||||
<mxPoint x="480" y="-40" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-23" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="fWsHJvBSsPRKD1qfUvCc-20" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="550" y="-20" as="sourcePoint" />
|
||||
<mxPoint x="600" y="-70" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-28" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.736;exitY=0.981;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-7" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="475" y="18" as="sourcePoint" />
|
||||
<mxPoint x="220" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-29" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.324;exitY=0.959;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-8" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="583" y="98" as="sourcePoint" />
|
||||
<mxPoint x="240" y="390" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-34" value="<span style="font-size: 10px;">Редагування<br>користувача</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="280" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-35" value="<span style="font-size: 10px;">Редагування<br>пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="390" y="432" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-36" value="<span style="font-size: 10px;">Редагування<br>бази пакунку</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="400" y="360" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-40" value="Автентифікований&nbsp;<div>К<span style="background-color: transparent; color: light-dark(rgb(0, 0, 0), rgb(255, 255, 255));">ористувач</span></div>" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
|
||||
<mxGeometry x="210" y="400" width="30" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-42" value="<span style="font-size: 10px;">Відкриття<br>веб-покликання</span>" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="270" y="133" width="90" height="52" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-45" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.389;exitY=1.011;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.531;entryY=0.006;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" edge="1" target="fWsHJvBSsPRKD1qfUvCc-42">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="320" y="90" as="sourcePoint" />
|
||||
<mxPoint x="320" y="130" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-46" value="" style="endArrow=classic;html=1;rounded=0;exitX=0.459;exitY=-0.029;exitDx=0;exitDy=0;exitPerimeter=0;startArrow=classic;startFill=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-19" target="fWsHJvBSsPRKD1qfUvCc-20" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="420" y="220" as="sourcePoint" />
|
||||
<mxPoint x="490" y="164" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-47" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.078;entryY=0.224;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-13" target="fWsHJvBSsPRKD1qfUvCc-19" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="433" y="140" as="sourcePoint" />
|
||||
<mxPoint x="508" y="133" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-48" value="" style="endArrow=classic;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;entryX=0.778;entryY=0.962;entryDx=0;entryDy=0;startArrow=classic;startFill=1;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-19" target="fWsHJvBSsPRKD1qfUvCc-21" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="551" y="207" as="sourcePoint" />
|
||||
<mxPoint x="487" y="233" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-49" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.268;entryY=0.962;entryDx=0;entryDy=0;startArrow=classic;startFill=1;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-20" target="fWsHJvBSsPRKD1qfUvCc-21" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="578" y="223" as="sourcePoint" />
|
||||
<mxPoint x="557" y="174" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-50" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.024;entryY=0.764;entryDx=0;entryDy=0;entryPerimeter=0;exitX=0.667;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-11" target="fWsHJvBSsPRKD1qfUvCc-34" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="430" as="sourcePoint" />
|
||||
<mxPoint x="470" y="280" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-51" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.99;exitY=0.344;exitDx=0;exitDy=0;exitPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-11" target="fWsHJvBSsPRKD1qfUvCc-36" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="270" y="446" as="sourcePoint" />
|
||||
<mxPoint x="470" y="280" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-52" value="" style="endArrow=classic;html=1;rounded=0;entryX=0.191;entryY=0.05;entryDx=0;entryDy=0;exitX=1;exitY=1;exitDx=0;exitDy=0;entryPerimeter=0;" parent="1" source="fWsHJvBSsPRKD1qfUvCc-11" target="fWsHJvBSsPRKD1qfUvCc-35" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="280" y="460" as="sourcePoint" />
|
||||
<mxPoint x="470" y="380" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="fWsHJvBSsPRKD1qfUvCc-53" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="fWsHJvBSsPRKD1qfUvCc-11" edge="1">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="250" y="430" as="sourcePoint" />
|
||||
<mxPoint x="540" y="270" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Binary file not shown.
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 55 KiB |
Binary file not shown.
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 38 KiB |
BIN
img/usecase_diagram.png
Normal file
BIN
img/usecase_diagram.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
39
main.typ
39
main.typ
@ -206,10 +206,9 @@
|
||||
|
||||
#img("img/data_diagram.png", "Діаграма потоків даних (рисунок виконано самостійно)")
|
||||
|
||||
Для ефективного відображення інформаційних потреб користувачів необхідно побудувати діаграму варіантів використання (Use Case). Ця діаграма /* @usecase_diagram */ демонструє взаємодію між різними акторами системи, такими як користувачі, адміністратори та інші учасники, та функціональними можливостями системи, такими як управління пакунками, їх створення, перегляд, отримання інформації та інші операції. Діаграма варіантів використання дозволяє визначити основні сценарії взаємодії користувачів з системою, ідентифікувати ключові функції та процеси, що відбуваються під час цієї взаємодії, та забезпечити розробку системи, яка відповідає реальним потребам користувачів. Крім того, діаграма варіантів використання може бути використана для визначення пріоритетів функціональних можливостей системи, виявлення потенційних проблем та слабких місць у процесах взаємодії з користувачами, а також для оптимізації архітектури системи для забезпечення максимальної ефективності та зручності використання.
|
||||
Для ефективного відображення інформаційних потреб користувачів необхідно побудувати діаграму варіантів використання (Use Case). Ця діаграма @usecase_diagram демонструє взаємодію між різними акторами системи, такими як користувачі, адміністратори та інші учасники, та функціональними можливостями системи, такими як управління пакунками, їх створення, перегляд, отримання інформації та інші операції. Діаграма варіантів використання дозволяє визначити основні сценарії взаємодії користувачів з системою, ідентифікувати ключові функції та процеси, що відбуваються під час цієї взаємодії, та забезпечити розробку системи, яка відповідає реальним потребам користувачів. Крім того, діаграма варіантів використання може бути використана для визначення пріоритетів функціональних можливостей системи, виявлення потенційних проблем та слабких місць у процесах взаємодії з користувачами, а також для оптимізації архітектури системи для забезпечення максимальної ефективності та зручності використання.
|
||||
|
||||
// TODO
|
||||
//#img("img/usecase_diagram.png", "Use-Case діаграма (рисунок виконаний самостійно)")
|
||||
#img("img/usecase_diagram.png", "Use-Case діаграма (рисунок виконаний самостійно)")
|
||||
|
||||
= Постановка задачі
|
||||
|
||||
@ -465,9 +464,9 @@
|
||||
+ запуск сервісів передаючи їм створені репозиторії;
|
||||
+ відображення та менеджмент графічних частин застосунку яким передаються сервіси.
|
||||
|
||||
#img("img/repo/project_structure.png", "Побудована схема даних (рисунок виконаний самостійно)")
|
||||
#img("img/repo/project_structure.png", "Структура проєкту")
|
||||
|
||||
Проєкт має всі використані під час розробки ресурси, такі як SQL скрипти та Compose@compose файли, за допомогою яких можна створити тестову базу даних та наповнити її даними.
|
||||
Проєкт має всі використані під час розробки ресурси, такі як SQL скрипти та Docker Compose@compose файли, за допомогою яких можна створити тестову базу даних та наповнити її даними.
|
||||
|
||||
== Опис фізичної моделі бази даних
|
||||
Для інформаційної системи створено базу даних яка має дев’ять таблиць. Код для її створення яких описаний нижче.
|
||||
@ -481,7 +480,7 @@
|
||||
- час створення - зберігає дату створення облікового запису не може бути порожнім;
|
||||
- час оновлення - час оновлення даних в таблиці, автоматично оновлюється при зміні запису, не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- Required info for an account
|
||||
CREATE TABLE Users (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -503,7 +502,7 @@ CREATE TABLE Users (
|
||||
- час створення - зберігає дату створення бази пакунку, не може бути порожнім;
|
||||
- час оновлення - час оновлення даних в таблиці, автоматично оновлюється при зміні запису, не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- Enables multiple packages to have the same base yet different components
|
||||
CREATE TABLE PackageBases (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -520,7 +519,7 @@ CREATE TABLE PackageBases (
|
||||
- назва - унікальне текстове поле, зберігає назву ролі (наприклад: submitter, packager; довжина до 31 символу), не може бути порожнім;
|
||||
- опис - текстове поле яке описує роль (до 255 символів), може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- User roles for working on packages: flagger, packager, submitter, maintainer, etc.
|
||||
CREATE TABLE PackageBaseRoles (
|
||||
id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -542,7 +541,7 @@ INSERT INTO PackageBaseRoles (id, name) VALUES
|
||||
- коментар - текстове поле для збереження приміток (до 255 символів), може бути порожнім;
|
||||
- (base, user, role) - складний (композитний) первинний ключ, необхідний для ідентифікації таблиці та забезпечення надійної роботи бази даних;
|
||||
|
||||
```sql
|
||||
```
|
||||
-- Roles that a user has for a package
|
||||
CREATE TABLE PackageBaseUserRoles (
|
||||
base INT UNSIGNED,
|
||||
@ -569,7 +568,7 @@ CREATE TABLE PackageBaseUserRoles (
|
||||
- час створення - зберігає дату створення пакунку, не може бути порожнім;
|
||||
- час оновлення - час оновлення даних в таблиці, автоматично оновлюється при зміні запису, не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- Information about the actual packages
|
||||
CREATE TABLE Packages (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -591,7 +590,7 @@ CREATE TABLE Packages (
|
||||
- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних;
|
||||
- назва - унікальне текстове поле, зберігає назву типу залежності (наприклад: depends, makedepends; довжина до 31 символу), не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- depends, makedepends, optdepends, etc.
|
||||
CREATE TABLE DependencyTypes (
|
||||
id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -614,7 +613,7 @@ INSERT INTO DependencyTypes (id, name) VALUES
|
||||
- тип залежності - зовнішній ключ на таблицю DependencyTypes;
|
||||
- назва залежного пакунку - текстове поле яке зберігає назва залежного пакунку (до 127 символів), не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- Track which dependencies a package has
|
||||
CREATE TABLE PackageDependencies (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -635,7 +634,7 @@ CREATE TABLE PackageDependencies (
|
||||
- id - службове додатнє число, необхідне для ідентифікації таблиці та забезпечення надійної роботи бази даних;
|
||||
- назва - унікальне текстове поле яке зберігає назву зв'яку (наприклад: conflicts, provides; довжина до 31 символу), не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- conflicts, provides, replaces, etc.
|
||||
CREATE TABLE RelationTypes (
|
||||
id TINYINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -656,7 +655,7 @@ INSERT INTO RelationTypes (id, name) VALUES
|
||||
- тип зв'язку - зовнішній ключ на таблицю RelationTypes;
|
||||
- тип зв'язку з пакунком - текстове поле, зберігає назву пакунку, з яким є зв'язок (до 127 символів), не може бути порожнім.
|
||||
|
||||
```sql
|
||||
```
|
||||
-- Track which conflicts, provides and replaces a package has
|
||||
CREATE TABLE PackageRelations (
|
||||
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||
@ -697,7 +696,7 @@ CREATE TABLE PackageRelations (
|
||||
Якщо на будь-якому рівні абстракції виникне помилка, то вона буде передана до графічного інтерфейсу сторінки пошуку і користувач буде сповіщений про виникнення помилки.
|
||||
|
||||
Код обробника повідомлення "Search" з валідацією даних:
|
||||
```rs
|
||||
```
|
||||
let search_data = Data {
|
||||
mode: self.mode.into(),
|
||||
order: self.order.into(),
|
||||
@ -728,7 +727,7 @@ return Some(
|
||||
```
|
||||
|
||||
Код функції пошуку сервісу пошуку:
|
||||
```rs
|
||||
```
|
||||
async fn search(&self, data: Data) -> Result<Vec<search::Entry>> {
|
||||
self.repository.search(data.into()).await
|
||||
}
|
||||
@ -736,7 +735,7 @@ async fn search(&self, data: Data) -> Result<Vec<search::Entry>> {
|
||||
|
||||
Код функції пошуку адаптеру репозиторію пошуку:
|
||||
|
||||
```rs
|
||||
```
|
||||
async fn search(&self, data: Data) -> Result<Vec<Entry>> {
|
||||
let c = self.driver.open_connection().await?;
|
||||
let result = SR::search(&c, data).await?;
|
||||
@ -747,7 +746,7 @@ async fn search(&self, data: Data) -> Result<Vec<Entry>> {
|
||||
```
|
||||
|
||||
Код функції пошуку адаптеру репозиторію пошуку бази даних:
|
||||
```rs
|
||||
```
|
||||
async fn search(connection: &E, data: Data) -> Result<Vec<Entry>> {
|
||||
let mut builder = QueryBuilder::new(
|
||||
"SELECT \
|
||||
@ -859,7 +858,7 @@ async fn search(connection: &E, data: Data) -> Result<Vec<Entry>> {
|
||||
```
|
||||
|
||||
Код обробки для повідомлення "RequestResult":
|
||||
```rs
|
||||
```
|
||||
Message::RequestResult(r) => match &*r {
|
||||
Ok(v) => self.state = State::Table(Table(v.clone())),
|
||||
Err(e) => self.state = State::Error(e.to_string()),
|
||||
@ -867,7 +866,7 @@ Message::RequestResult(r) => match &*r {
|
||||
```
|
||||
|
||||
Код відображення таблиці результату пошуку:
|
||||
```rs
|
||||
```
|
||||
pub fn view(&self) -> Element<'static, Message> {
|
||||
let mut table: Vec<_> = [
|
||||
"Package", // 0
|
||||
|
15
template.typ
15
template.typ
@ -180,6 +180,21 @@
|
||||
v(spacing * 2, weak: true)
|
||||
}
|
||||
|
||||
// listings
|
||||
show raw: it => {
|
||||
let new_spacing = 0.5em
|
||||
set block(spacing: new_spacing)
|
||||
set par(
|
||||
spacing: new_spacing,
|
||||
leading: new_spacing,
|
||||
)
|
||||
set text(size: 11pt, font: "Courier New", weight: "semibold")
|
||||
|
||||
v(spacing * 2.5, weak: true)
|
||||
pad(it, left: 1.25cm)
|
||||
v(spacing * 2.5, weak: true)
|
||||
}
|
||||
|
||||
it
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user