Introduce ban logic and adjust sp cloud diagramm

This commit is contained in:
Hepatica
2024-08-16 15:59:05 +02:00
parent d2fb7b611b
commit 9215ad7a8f
6 changed files with 395 additions and 96 deletions

181
.$SpCloud.drawio.dtmp Normal file
View File

@@ -0,0 +1,181 @@
<mxfile host="Electron" modified="2024-08-16T13:54:29.826Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.0.2 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="ZUBuPSrFh_YRAVZYSngJ" version="23.0.2" type="device">
<diagram name="Page-1" id="Amrm0kvx0odSU5wdFRfC">
<mxGraphModel dx="527" dy="345" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="masuSCkF3HdqrZElRDKO-8" value="SpСloud&lt;br&gt;функциональность" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="310" y="90" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="masuSCkF3HdqrZElRDKO-9" value="Паблишь приложения функциональность&amp;nbsp;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="565" y="150" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="masuSCkF3HdqrZElRDKO-11" value="q1" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="390" y="320" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="masuSCkF3HdqrZElRDKO-12" value="&amp;nbsp;Юзер посылает rar архив с своим приложением и его таргетом&amp;nbsp;&lt;br&gt;и прикрепляет auth токен в header" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="375" y="390" width="150" height="100" as="geometry" />
</mxCell>
<mxCell id="masuSCkF3HdqrZElRDKO-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="masuSCkF3HdqrZElRDKO-15" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="360" as="sourcePoint" />
<mxPoint x="650" y="360" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="masuSCkF3HdqrZElRDKO-15" value="q2" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="770" y="320" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-3" value="Юзер&amp;nbsp;" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
<mxGeometry x="80" y="180" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-4" value="Лимит" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="140" y="150" width="190" height="150" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-5" value="Лимит 6 приложений" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="30" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-6" value="Обязательно роль Team" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="60" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-7" value="Регистрация через дискорд" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="90" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-16" value="Пользователь может быть забанен" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="120" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-8" value="Лимиты" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="550" y="190" width="190" height="120" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-9" value="Dotnet 6 7 8&amp;nbsp; (Console + ASP)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-8" vertex="1">
<mxGeometry y="30" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-10" value="Запустить свою монго дб на 100 мб (возможно добавлю)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-8" vertex="1">
<mxGeometry y="60" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-11" value="Nuxt js (возможно добавлю)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-8" vertex="1">
<mxGeometry y="90" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-12" value="&lt;div style=&quot;color: rgb(248, 248, 242); background-color: rgb(33, 33, 33); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 18px;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;target&quot;&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;dotnet-6-console&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&quot;appName&quot;&lt;span style=&quot;color: rgb(220, 220, 220);&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(206, 145, 120);&quot;&gt;&quot;TestApp&quot;&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry x="328" y="510" width="222" height="140" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-14" value="&amp;nbsp;Юзер получает статус загрузки своего приложения и айпи (если приложение должно работать с интернетом)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="755" y="400" width="150" height="100" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-15" value="&lt;div style=&quot;background-color: rgb(33, 33, 33); line-height: 18px;&quot;&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;&quot;status&quot;&lt;span style=&quot;color: rgb(220, 220, 220);&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(206, 145, 120);&quot;&gt;&quot;success&quot;,&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;&quot;&gt;&lt;font face=&quot;IBMPlexMono, Courier New, monospace, Consolas, Courier New, monospace&quot; color=&quot;#f8f8f2&quot;&gt;&amp;nbsp; &lt;/font&gt;&lt;span style=&quot;color: rgb(156, 220, 254); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(220, 220, 220); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;:&lt;/span&gt; &lt;font face=&quot;IBMPlexMono, Courier New, monospace, Consolas, Courier New, monospace&quot; color=&quot;#ce9178&quot;&gt;&quot;https://test.almavid.ru&quot;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;}&lt;/div&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry x="725" y="490" width="255" height="150" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-17" value="SpСloud UI" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="355" y="700" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-18" value="" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.page;" parent="1" vertex="1">
<mxGeometry x="120" y="750" width="630" height="950" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-21" value="Зарегистрироваться" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="610" y="760" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-22" value="Ник пользователя" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="645" y="800" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-23" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Нагрузка сервера в данный момент CPU/RAM/Memory&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="368.75" y="1190" width="145" height="50" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-24" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="161.25" y="1250" width="560" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-26" value="" style="line;strokeWidth=1;rotatable=0;dashed=0;labelPosition=right;align=left;verticalAlign=middle;spacingTop=0;spacingLeft=6;points=[];portConstraint=eastwest;" parent="1" vertex="1">
<mxGeometry x="163.75" y="1290" width="555" height="10" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-28" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="220" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-29" value="Hepatica" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="163.75" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-30" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="300" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-31" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="375" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-32" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="445" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-33" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="510" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-34" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="580" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-35" value="AppUrl" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="230" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-37" value="CpuUsage" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="308.75" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-38" value="MemoryUsage" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="385" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-39" value="Status" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="453.75" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-40" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Окно для загрузки архива приложения&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="341.25" y="980" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-41" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Ссылка на видео гайд&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="335" y="1470" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-42" value="Как пользоваться SpCloud:https://www.youtube.com/watch?v=rUxyKA_-grg" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="161.25" y="1510" width="416.25" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-43" value="" style="verticalLabelPosition=bottom;aspect=fixed;html=1;shape=mxgraph.salesforce.data;" parent="1" vertex="1">
<mxGeometry x="1100" y="730" width="48.6" height="60" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-44" value="&lt;span style=&quot;color: rgb(240, 240, 240); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(27, 29, 30); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;SpСloud db&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1090" y="695" width="90" height="40" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-45" value="User" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="970" y="800" width="140" height="190" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-46" value="Id&lt;br&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-49" value="Name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="60" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-47" value="AuthToken" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="90" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-50" value="IsBanned&lt;br&gt;AppLimitCount&lt;br&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="120" width="140" height="70" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-51" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="359" y="1020" width="160" height="160" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-52" value="&lt;font style=&quot;font-size: 41px;&quot;&gt;SpСloud&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="409" y="830" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-53" value="App" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1170" y="830" width="220" height="180" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-55" value="Name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-53" vertex="1">
<mxGeometry y="30" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="siBud0lxFuAxErJTvobO-3" value="UserId" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="60" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-56" value="Url" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-53" vertex="1">
<mxGeometry y="90" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="siBud0lxFuAxErJTvobO-1" value="UrlLocalMachine" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="120" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="siBud0lxFuAxErJTvobO-2" value="Target" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="150" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-58" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="vamjHUPJP5RwR4Vbvad3-49" target="vamjHUPJP5RwR4Vbvad3-55" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -1,6 +1,6 @@
<mxfile host="Electron" modified="2024-08-13T23:01:57.362Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.0.2 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="8ZbbypOb4FPFAPOCzFoO" version="23.0.2" type="device">
<mxfile host="Electron" modified="2024-08-16T13:54:12.850Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.0.2 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="ycVdF7wh_OfIlrg_FKof" version="23.0.2" type="device">
<diagram name="Page-1" id="Amrm0kvx0odSU5wdFRfC">
<mxGraphModel dx="1247" dy="727" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<mxGraphModel dx="527" dy="345" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
@@ -16,7 +16,7 @@
<mxCell id="masuSCkF3HdqrZElRDKO-12" value="&amp;nbsp;Юзер посылает rar архив с своим приложением и его таргетом&amp;nbsp;&lt;br&gt;и прикрепляет auth токен в header" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="375" y="390" width="150" height="100" as="geometry" />
</mxCell>
<mxCell id="masuSCkF3HdqrZElRDKO-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1" target="masuSCkF3HdqrZElRDKO-15">
<mxCell id="masuSCkF3HdqrZElRDKO-14" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="masuSCkF3HdqrZElRDKO-15" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="500" y="360" as="sourcePoint" />
<mxPoint x="650" y="360" as="targetPoint" />
@@ -25,145 +25,154 @@
<mxCell id="masuSCkF3HdqrZElRDKO-15" value="q2" style="ellipse;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="770" y="320" width="120" height="80" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-3" value="Юзер&amp;nbsp;" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-3" value="Юзер&amp;nbsp;" style="shape=umlActor;verticalLabelPosition=bottom;verticalAlign=top;html=1;outlineConnect=0;" parent="1" vertex="1">
<mxGeometry x="80" y="180" width="30" height="60" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-4" value="Лимит" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-4" value="Лимит" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="140" y="150" width="190" height="150" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-5" value="Лимит 6 приложений" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-4">
<mxCell id="vamjHUPJP5RwR4Vbvad3-5" value="Лимит 6 приложений" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="30" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-6" value="Обязательно роль Team" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-4">
<mxCell id="vamjHUPJP5RwR4Vbvad3-6" value="Обязательно роль Team" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="60" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-7" value="Регистрация через дискорд" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-4">
<mxCell id="vamjHUPJP5RwR4Vbvad3-7" value="Регистрация через дискорд" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="90" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-16" value="Пользователь может быть забанен" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-4">
<mxCell id="vamjHUPJP5RwR4Vbvad3-16" value="Пользователь может быть забанен" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-4" vertex="1">
<mxGeometry y="120" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-8" value="Лимиты" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-8" value="Лимиты" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="550" y="190" width="190" height="120" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-9" value="Dotnet 6 7 8&amp;nbsp; (Console + ASP)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-8">
<mxCell id="vamjHUPJP5RwR4Vbvad3-9" value="Dotnet 6 7 8&amp;nbsp; (Console + ASP)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-8" vertex="1">
<mxGeometry y="30" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-10" value="Запустить свою монго дб на 100 мб (возможно добавлю)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-8">
<mxCell id="vamjHUPJP5RwR4Vbvad3-10" value="Запустить свою монго дб на 100 мб (возможно добавлю)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-8" vertex="1">
<mxGeometry y="60" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-11" value="Nuxt js (возможно добавлю)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-8">
<mxCell id="vamjHUPJP5RwR4Vbvad3-11" value="Nuxt js (возможно добавлю)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-8" vertex="1">
<mxGeometry y="90" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-12" value="&lt;div style=&quot;color: rgb(248, 248, 242); background-color: rgb(33, 33, 33); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 18px;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;target&quot;&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;dotnet-6-console&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&quot;appName&quot;&lt;span style=&quot;color: rgb(220, 220, 220);&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(206, 145, 120);&quot;&gt;&quot;TestApp&quot;&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-12" value="&lt;div style=&quot;color: rgb(248, 248, 242); background-color: rgb(33, 33, 33); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace; line-height: 18px;&quot;&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&amp;nbsp; &lt;span style=&quot;color: #9cdcfe;&quot;&gt;&quot;target&quot;&lt;/span&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;:&lt;/span&gt; &lt;span style=&quot;color: #ce9178;&quot;&gt;&quot;dotnet-6-console&quot;,&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&quot;appName&quot;&lt;span style=&quot;color: rgb(220, 220, 220);&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(206, 145, 120);&quot;&gt;&quot;TestApp&quot;&lt;/span&gt;&lt;span style=&quot;color: #ce9178;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #dcdcdc;&quot;&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry x="328" y="510" width="222" height="140" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-14" value="&amp;nbsp;Юзер получает статус загрузки своего приложения и айпи (если приложение должно работать с интернетом)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-14" value="&amp;nbsp;Юзер получает статус загрузки своего приложения и айпи (если приложение должно работать с интернетом)" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="755" y="400" width="150" height="100" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-15" value="&lt;div style=&quot;background-color: rgb(33, 33, 33); line-height: 18px;&quot;&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;&quot;status&quot;&lt;span style=&quot;color: rgb(220, 220, 220);&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(206, 145, 120);&quot;&gt;&quot;success&quot;,&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;&quot;&gt;&lt;font face=&quot;IBMPlexMono, Courier New, monospace, Consolas, Courier New, monospace&quot; color=&quot;#f8f8f2&quot;&gt;&amp;nbsp; &lt;/font&gt;&lt;span style=&quot;color: rgb(156, 220, 254); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(220, 220, 220); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;:&lt;/span&gt; &lt;font face=&quot;IBMPlexMono, Courier New, monospace, Consolas, Courier New, monospace&quot; color=&quot;#ce9178&quot;&gt;&quot;https://test.almavid.ru&quot;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;}&lt;/div&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-15" value="&lt;div style=&quot;background-color: rgb(33, 33, 33); line-height: 18px;&quot;&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;{&lt;/div&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;&quot;status&quot;&lt;span style=&quot;color: rgb(220, 220, 220);&quot;&gt;:&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: rgb(206, 145, 120);&quot;&gt;&quot;success&quot;,&lt;/span&gt;&lt;br&gt;&lt;/div&gt;&lt;div style=&quot;&quot;&gt;&lt;font face=&quot;IBMPlexMono, Courier New, monospace, Consolas, Courier New, monospace&quot; color=&quot;#f8f8f2&quot;&gt;&amp;nbsp; &lt;/font&gt;&lt;span style=&quot;color: rgb(156, 220, 254); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color: rgb(220, 220, 220); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;:&lt;/span&gt; &lt;font face=&quot;IBMPlexMono, Courier New, monospace, Consolas, Courier New, monospace&quot; color=&quot;#ce9178&quot;&gt;&quot;https://test.almavid.ru&quot;&lt;/font&gt;&lt;/div&gt;&lt;div style=&quot;color: rgb(248, 248, 242); font-family: IBMPlexMono, &amp;quot;Courier New&amp;quot;, monospace, Consolas, &amp;quot;Courier New&amp;quot;, monospace;&quot;&gt;}&lt;/div&gt;&lt;/div&gt;" style="shape=note;whiteSpace=wrap;html=1;backgroundOutline=1;darkOpacity=0.05;" parent="1" vertex="1">
<mxGeometry x="725" y="490" width="255" height="150" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-17" value="SpСloud UI" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-17" value="SpСloud UI" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="355" y="700" width="160" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-18" value="" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.page;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-18" value="" style="html=1;whiteSpace=wrap;strokeColor=none;fillColor=#0079D6;labelPosition=center;verticalLabelPosition=middle;verticalAlign=top;align=center;fontSize=12;outlineConnect=0;spacingTop=-6;fontColor=#FFFFFF;sketch=0;shape=mxgraph.sitemap.page;" parent="1" vertex="1">
<mxGeometry x="120" y="750" width="630" height="950" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-21" value="Зарегистрироваться" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-21" value="Зарегистрироваться" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="610" y="760" width="130" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-22" value="Ник пользователя" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-22" value="Ник пользователя" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="645" y="800" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-23" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Нагрузка сервера в данный момент CPU/RAM/Memory&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-23" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Нагрузка сервера в данный момент CPU/RAM/Memory&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="368.75" y="1190" width="145" height="50" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-24" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-24" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="161.25" y="1250" width="560" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-26" value="" style="line;strokeWidth=1;rotatable=0;dashed=0;labelPosition=right;align=left;verticalAlign=middle;spacingTop=0;spacingLeft=6;points=[];portConstraint=eastwest;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-26" value="" style="line;strokeWidth=1;rotatable=0;dashed=0;labelPosition=right;align=left;verticalAlign=middle;spacingTop=0;spacingLeft=6;points=[];portConstraint=eastwest;" parent="1" vertex="1">
<mxGeometry x="163.75" y="1290" width="555" height="10" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-28" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-28" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="220" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-29" value="Hepatica" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-29" value="Hepatica" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="163.75" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-30" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-30" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="300" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-31" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-31" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="375" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-32" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-32" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="445" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-33" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-33" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="510" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-34" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-34" value="" style="html=1;points=[[0,0,0,0,5],[0,1,0,0,-5],[1,0,0,0,5],[1,1,0,0,-5]];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;curved&quot;:0,&quot;rounded&quot;:0};" parent="1" vertex="1">
<mxGeometry x="580" y="1250" width="10" height="200" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-35" value="AppUrl" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-35" value="AppUrl" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="230" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-37" value="CpuUsage" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-37" value="CpuUsage" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="308.75" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-38" value="MemoryUsage" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-38" value="MemoryUsage" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="385" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-39" value="Status" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-39" value="Status" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="453.75" y="1260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-40" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Окно для загрузки архива приложения&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-40" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Окно для загрузки архива приложения&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="341.25" y="980" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-41" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Ссылка на видео гайд&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-41" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;Ссылка на видео гайд&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="335" y="1470" width="200" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-42" value="Как пользоваться SpCloud:https://www.youtube.com/watch?v=rUxyKA_-grg" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-42" value="Как пользоваться SpCloud:https://www.youtube.com/watch?v=rUxyKA_-grg" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="161.25" y="1510" width="416.25" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-43" value="" style="verticalLabelPosition=bottom;aspect=fixed;html=1;shape=mxgraph.salesforce.data;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-43" value="" style="verticalLabelPosition=bottom;aspect=fixed;html=1;shape=mxgraph.salesforce.data;" parent="1" vertex="1">
<mxGeometry x="1100" y="730" width="48.6" height="60" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-44" value="&lt;span style=&quot;color: rgb(240, 240, 240); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(27, 29, 30); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;SpСloud db&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-44" value="&lt;span style=&quot;color: rgb(240, 240, 240); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: center; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(27, 29, 30); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; float: none; display: inline !important;&quot;&gt;SpСloud db&lt;/span&gt;" style="text;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1090" y="695" width="90" height="40" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-45" value="User" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-45" value="User" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="970" y="800" width="140" height="150" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-46" value="Id&lt;br&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-45">
<mxCell id="vamjHUPJP5RwR4Vbvad3-46" value="Id&lt;br&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="30" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-49" value="Name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-45">
<mxCell id="vamjHUPJP5RwR4Vbvad3-49" value="Name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="60" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-47" value="AuthToken" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-45">
<mxCell id="vamjHUPJP5RwR4Vbvad3-47" value="AuthToken" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="90" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-50" value="IsBanned" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-45">
<mxCell id="vamjHUPJP5RwR4Vbvad3-50" value="IsBanned&lt;br&gt;AppLimitCount&lt;br&gt;" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-45" vertex="1">
<mxGeometry y="120" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-51" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-51" value="" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
<mxGeometry x="359" y="1020" width="160" height="160" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-52" value="&lt;font style=&quot;font-size: 41px;&quot;&gt;SpСloud&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxCell id="vamjHUPJP5RwR4Vbvad3-52" value="&lt;font style=&quot;font-size: 41px;&quot;&gt;SpСloud&lt;/font&gt;" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="409" y="830" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-53" value="App" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1170" y="830" width="140" height="90" as="geometry" />
<mxCell id="vamjHUPJP5RwR4Vbvad3-53" value="App" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="1170" y="830" width="220" height="180" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-55" value="Name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="30" width="140" height="30" as="geometry" />
<mxCell id="vamjHUPJP5RwR4Vbvad3-55" value="Name" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-53" vertex="1">
<mxGeometry y="30" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-56" value="Url" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="60" width="140" height="30" as="geometry" />
<mxCell id="siBud0lxFuAxErJTvobO-3" value="UserId" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="60" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-58" value="" 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="vamjHUPJP5RwR4Vbvad3-49" target="vamjHUPJP5RwR4Vbvad3-55">
<mxCell id="vamjHUPJP5RwR4Vbvad3-56" value="Url" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" parent="vamjHUPJP5RwR4Vbvad3-53" vertex="1">
<mxGeometry y="90" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="siBud0lxFuAxErJTvobO-1" value="UrlLocalMachine" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="120" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="siBud0lxFuAxErJTvobO-2" value="Target" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="vamjHUPJP5RwR4Vbvad3-53">
<mxGeometry y="150" width="220" height="30" as="geometry" />
</mxCell>
<mxCell id="vamjHUPJP5RwR4Vbvad3-58" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="vamjHUPJP5RwR4Vbvad3-49" target="vamjHUPJP5RwR4Vbvad3-55" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
</root>

View File

@@ -13,7 +13,7 @@ add_executable(SpCloudMain
"Service/DiscordService.cpp"
"Service/MongoDbService.cpp"
"Service/Logger.cpp"
"Models/User.cpp")
"Models/User.cpp" "Models/App.cpp")
if (CMAKE_VERSION VERSION_GREATER 3.12)
set_property(TARGET SpCloudMain PROPERTY CXX_STANDARD 20)

View File

@@ -0,0 +1,50 @@
#include <string>
class App {
private:
int id;
std::string name;
std::string authToken;
bool isBanned;
public:
// Конструктор
App(int id, const std::string& name, const std::string& authToken, bool isBanned)
: id(id), name(name), authToken(authToken), isBanned(isBanned) {}
// Геттеры и сеттеры для Id
int getId() const {
return id;
}
void setId(int id) {
this->id = id;
}
// Геттеры и сеттеры для Name
std::string getName() const {
return name;
}
void setName(const std::string& name) {
this->name = name;
}
// Геттеры и сеттеры для AuthToken
std::string getAuthToken() const {
return authToken;
}
void setAuthToken(const std::string& authToken) {
this->authToken = authToken;
}
// Геттеры и сеттеры для IsBanned
bool getIsBanned() const {
return isBanned;
}
void setIsBanned(bool isBanned) {
this->isBanned = isBanned;
}
};

View File

@@ -12,48 +12,18 @@ class MongoDbService
public:
MongoDbService()
{
//mongocxx::instance inst{};
//const auto uri = mongocxx::uri{ "mongodb+srv://loker:<password>@spcloudcluster.xwpnw.mongodb.net/?retryWrites=true&w=majority&appName=SpCloudCluster" };
//// Set the version of the Stable API on the client
//mongocxx::options::client client_options;
//const auto api = mongocxx::options::server_api{ mongocxx::options::server_api::version::k_version_1 };
//client_options.server_api_opts(api);
//// Setup the connection and get a handle on the "admin" database.
//mongocxx::client conn{ uri, client_options };
//mongocxx::database db = conn["admin"];
//// Ping the database.
//const auto ping_cmd = bsoncxx::builder::basic::make_document(bsoncxx::builder::basic::kvp("ping", 1));
//db.run_command(ping_cmd.view());
//std::cout << "Pinged your deployment. You successfully connected to MongoDB!" << std::endl;
}
std::string get_user_info(std::string user_id)
{
/*std::string json_data = R"({
"dataSource": "SpCloudCluster",
"database": "SpCloud",
"collection": "User",
"document": {
"name": "Item Name",
"value": "Item Value"
}
})";
std::string command = "curl --location 'https://eu-central-1.aws.data.mongodb-api.com/app/data-zvcqvrr/endpoint/data/v1/action/insertOne' "
"--header 'Content-Type: application/json' "
"--header 'api-key: Q1NfSCrruUAzsxdrjhZd3sjSwiqbdSFmCLeaCatZiuohUXsvEq9RtEAeG0JL2Jd7' "
"--data-raw '" + json_data + "'";
auto request = std::async(std::launch::async, &MongoDbService::execute_command, this, command);
*/
std::string json_data = R"({
"dataSource": "SpCloudCluster",
"database": "SpCloud",
"collection": "AllowedUsers",
"filter": {
"discord_id": ")" + user_id + R"("
}
})";
"dataSource": "SpCloudCluster",
"database": "SpCloud",
"collection": "AllowedUsers",
"filter": {
"discord_id": ")" + user_id + R"("
}
})";
std::string command = "curl --location 'https://eu-central-1.aws.data.mongodb-api.com/app/data-zvcqvrr/endpoint/data/v1/action/findOne' "
"--header 'Content-Type: application/json' "
@@ -65,7 +35,82 @@ public:
std::string response = request.get();
return response;
//return response.find("\"document\": null") == std::string::npos;
}
std::string is_user_can_publish(std::string auth_token)
{
std::string json_data = R"({
"dataSource": "SpCloudCluster",
"database": "SpCloud",
"collection": "AllowedUsers",
"filter": {
"auth_token": ")" + auth_token + R"("
}
})";
std::string command = "curl --location 'https://eu-central-1.aws.data.mongodb-api.com/app/data-zvcqvrr/endpoint/data/v1/action/findOne' "
"--header 'Content-Type: application/json' "
"--header 'api-key: Q1NfSCrruUAzsxdrjhZd3sjSwiqbdSFmCLeaCatZiuohUXsvEq9RtEAeG0JL2Jd7' "
"--data-raw '" + json_data + "'";
auto request = std::async(std::launch::async, &MongoDbService::execute_command, this, command);
std::string response = request.get();
size_t pos_is_user_banned = response.find("\"is_banned\":");
std::string is_banned_value = response.substr(pos_is_user_banned + 12, response.find_first_of(",}", pos_is_user_banned) - pos_is_user_banned - 12);
if (is_banned_value == "true")
{
return "Fail publish: user is banned";
}
size_t pos_apps_limit_count = response.find("\"apps_limit_count\":");
std::string apps_limit_count = response.substr(pos_apps_limit_count + 19, response.find_first_of(",}", pos_apps_limit_count) - pos_apps_limit_count - 19);
int apps_limit_count_int = std::stoi(apps_limit_count);
size_t pos_app_count = response.find("\"app_count\":");
std::string app_count = response.substr(pos_app_count + 12, response.find_first_of(",}", pos_app_count) - pos_app_count - 12);
int app_count_int = std::stoi(app_count);
if (app_count_int >= apps_limit_count_int)
{
return "Fail publish: user reached publish limit user have " + app_count + " apps with user limit " + apps_limit_count;
}
return "Success";
}
std::string add_app(std::string name, std::string user_id, std::string url, std::string url_on_local_mahcine, std::string target)
{
std::string json_data = R"({
"dataSource": "SpCloudCluster",
"database": "SpCloud",
"collection": "Apps",
"document": {
"name": ")" + name + R"(",
"user_id": ")" + user_id + R"(",
"url": ")" + url + R"(",
"url_on_local_machine": ")" + url_on_local_mahcine + R"(",
"target": ")" + target + R"("
}
})";
std::string command = "curl --location 'https://eu-central-1.aws.data.mongodb-api.com/app/data-zvcqvrr/endpoint/data/v1/action/insertOne' "
"--header 'Content-Type: application/json' "
"--header 'api-key: Q1NfSCrruUAzsxdrjhZd3sjSwiqbdSFmCLeaCatZiuohUXsvEq9RtEAeG0JL2Jd7' "
"--data-raw '" + json_data + "'";
auto request = std::async(std::launch::async, &MongoDbService::execute_command, this, command);
std::string response = request.get();
return response;
}
std::string execute_command(const std::string& command) {

View File

@@ -36,25 +36,39 @@ int main()
httplib::Headers test = req.headers;
});
std::cout << "Server is running at http://localhost:8081" << '\n';
AuthorizationService authorization_service;
auto file_processing = std::make_shared<FileProcessingService>(logger);
PublishController publish_controller(svr, authorization_service, file_processing, logger);
std::cout << "Server is running at http://localhost:8081" << '\n';
DiscordService discord_service;
MongoDbService mongo_service;
svr.Post("/publish", [&](const httplib::Request& req, httplib::Response& res)
{
logger.log(INFO, "Start publish from main");
publish_controller.process_publish(req, res);
string is_user_can_publish_response = mongo_service.is_user_can_publish("khBuvDWPHOhPSiQNVQZm9PM0VF29dqAaDBjWX4BnxJKzRvg0Gm");//TODO UNCOMMENT AND FIX
if (is_user_can_publish_response != "Success")
{
res.set_content(is_user_can_publish_response, "text/plain");//Todo add app address showing
return;
}
//publish_controller.process_publish(req, res);//TODO UNCOMMENT AND FIX
//mongo_service.add_app("test", "test", "test", "test", "test");//TODO UNCOMMENT AND FIX
res.set_content("App is running on address ????", "text/plain");//Todo add app address showing
});
DiscordService discord_service;
MongoDbService mongo_service;
svr.Post("/login", [&](const httplib::Request& req, httplib::Response& res)
{