Backend архитектура
- Структура проекта - Модели - Репозитории - Утилиты
This commit is contained in:
commit
aa5c8fb69f
|
@ -0,0 +1,2 @@
|
||||||
|
.obsidian
|
||||||
|
.trash
|
|
@ -0,0 +1,82 @@
|
||||||
|
# Модели
|
||||||
|
***
|
||||||
|
> Описание структур данных для BackEnd
|
||||||
|
## Виджет (Абстрактный)
|
||||||
|
---
|
||||||
|
>[!Виджет]
|
||||||
|
>Абстрактный класс, описывающий стандартной поведение модели виджета
|
||||||
|
### Поля
|
||||||
|
---
|
||||||
|
- **Тип** - тип реализации абстракции | ENUM
|
||||||
|
- **Id** - Идентификатор в базе данных | Целое число
|
||||||
|
- **Имя** - имя виджета | Строка
|
||||||
|
- **Описание** - описание виджета | Строка
|
||||||
|
### Методы
|
||||||
|
---
|
||||||
|
- **Публичный | В формат БД | Строка** - Преобразовывает модель в формат, необходимый для записи в базу данных
|
||||||
|
- **Публичный | В Json | Строка** - Преобразовывает модель в *.json*
|
||||||
|
## Сайт
|
||||||
|
---
|
||||||
|
>[!Сайт]
|
||||||
|
>Реализация абстрактного класса виджета для описания сайтов ORUDO
|
||||||
|
### Поля
|
||||||
|
---
|
||||||
|
- **Ссылка** - Ссылка на сайт | Строка
|
||||||
|
- **Редирект** - Должна ли быть кнопка для перехода на сайт | Булево
|
||||||
|
- **Изображение** - Ссылка на изображение с логотипом сайта | Строка
|
||||||
|
### Yaml представление
|
||||||
|
---
|
||||||
|
```yaml
|
||||||
|
Sites:
|
||||||
|
id:
|
||||||
|
name: ""
|
||||||
|
desk: ""
|
||||||
|
link: ""
|
||||||
|
image: ""
|
||||||
|
redirect: True | False
|
||||||
|
```
|
||||||
|
### Json представление
|
||||||
|
---
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
id: "",
|
||||||
|
name: "",
|
||||||
|
desk: "",
|
||||||
|
link: "",
|
||||||
|
image: "",
|
||||||
|
redirect: True | False
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Соц. сеть
|
||||||
|
---
|
||||||
|
>[!Соц. сеть]
|
||||||
|
>Реализация абстрактного класса виджета для описания внешних ресурсов ORUDO
|
||||||
|
### Поля
|
||||||
|
---
|
||||||
|
- **Ссылка** - Ссылка на сайт | Строка
|
||||||
|
- **Изображение** - Ссылка на изображение с аватаром ресурса | Строка
|
||||||
|
- **Иконка кнопки** - Ссылка на изображение с иконкой ресурса | Строка
|
||||||
|
### Yaml представление
|
||||||
|
---
|
||||||
|
```yaml
|
||||||
|
Social:
|
||||||
|
id:
|
||||||
|
name: ""
|
||||||
|
desk: ""
|
||||||
|
link: ""
|
||||||
|
image: ""
|
||||||
|
icon: ""
|
||||||
|
```
|
||||||
|
### Json представление
|
||||||
|
---
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
id: "",
|
||||||
|
name: "",
|
||||||
|
desk: "",
|
||||||
|
link: "",
|
||||||
|
image: "",
|
||||||
|
icon: ""
|
||||||
|
}
|
||||||
|
```
|
|
@ -0,0 +1,24 @@
|
||||||
|
# Репозитории
|
||||||
|
***
|
||||||
|
> Модули для доступа к различным элементам базы данных
|
||||||
|
## Репозиторий (Абстрактный)
|
||||||
|
---
|
||||||
|
>[!Репозиторий]
|
||||||
|
>Абстрактный класс, описывающий основные методы для репозитория
|
||||||
|
### Строки
|
||||||
|
---
|
||||||
|
- **Префикс** - Префикс базы данных *(Приватный | инициализируется перегрузкой в дочернем классе)*
|
||||||
|
### Методы
|
||||||
|
---
|
||||||
|
- **Приватный | Добавить виджет | Целое число | Абстрактный** - Добавляет виджет в базу данных, возвращает id
|
||||||
|
- **Приватный | Получить виджет | Виджет | Абстрактный** - Возвращает данные из базы данных по id
|
||||||
|
- **Публичный | Получить размер репозитория | Целое число | Абстрактный** - Возвращает размер репозитория
|
||||||
|
## Репозиторий сайтов
|
||||||
|
---
|
||||||
|
>[!Репозиторий сайтов]
|
||||||
|
>Реализации абстрактного класса репозитория для управления сайтами
|
||||||
|
|
||||||
|
## Репозиторий соц. сетей
|
||||||
|
---
|
||||||
|
>[!Репозиторий сайтов]
|
||||||
|
>Реализации абстрактного класса репозитория для управления соц. сетями
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Структура
|
||||||
|
***
|
||||||
|
>Описание модулей различных частей проекта, их взаимосвязи и назначения
|
||||||
|
## Общие компоненты
|
||||||
|
---
|
||||||
|
- **Nginx** - Веб-сервер для FrontEnd части сайта / доступ к хранилищу с изображениями / обратное прокси, связывающее все части сайта
|
||||||
|
- **FastAPI** - BackEnd часть сайта, программный интерфейс для получения информации для виджетов на сайте
|
||||||
|
- **Хранилище** - Хранилище с динамическими ассетами для сайта (иконки виджетов, бэкграунд, логотипы и т.п.)
|
||||||
|
- **React сайт** - FrontEnd часть, с пользовательским интерфейсом
|
||||||
|
### Связь компонентов
|
||||||
|
---
|
||||||
|
**Диаграмма связей компонентов**
|
||||||
|
![[connections.png]]
|
||||||
|
## Структура BackEnd
|
||||||
|
---
|
||||||
|
- **[[Утилиты]]** *(Модули для дополнительных ф-ий)*
|
||||||
|
- [[Утилиты#Парсер YAML|Парсер YAML]]
|
||||||
|
- [[Утилиты#Redis|Управление ДБ Redis]]
|
||||||
|
- [[Утилиты#Статические ф-ии|Статические ф-ии]]
|
||||||
|
- **[[Репозитории]]** *(Модули для получения доступа к данным БД)*
|
||||||
|
- [[Репозитории#Репозиторий сайтов|Сайты]]
|
||||||
|
- [[Репозитории#Репозиторий соц. сетей|Соц. сети]]
|
||||||
|
- **Контроллеры** *(Модули управления программным интерфейсом)*
|
||||||
|
- Сайты
|
||||||
|
- Соц. сети
|
||||||
|
- **[[Модели]]** *(Структуры данных)*
|
||||||
|
- [[Модели#Виджет (Абстрактный)|Виджет (Абстракция)]]
|
||||||
|
- [[Модели#Сайт|Сайт]]
|
||||||
|
- [[Модели#Соц. сеть|Соц. сеть]]
|
||||||
|
## Структура FrontEnd
|
||||||
|
---
|
||||||
|
`*требуется составить*`
|
|
@ -0,0 +1,40 @@
|
||||||
|
# Утилиты BackEnd
|
||||||
|
***
|
||||||
|
>Прикладные модули необходимые для различных дополнительных функций
|
||||||
|
## Парсер YAML
|
||||||
|
---
|
||||||
|
>[!YAML Парсер]
|
||||||
|
>Модуль, который сериализует изначальный файл с описанием виджетов в разметке YAML в нативные объекты Python
|
||||||
|
### Поля
|
||||||
|
---
|
||||||
|
- **Путь к файлу** - Путь к .yaml файлу *( Приватный | Аргумент конструктора)*
|
||||||
|
- **Список агрументов** - Список аргументов виджетов *(Приватный | инициализируется методом преобразования)*
|
||||||
|
### Методы
|
||||||
|
---
|
||||||
|
- **Приватный | Загрузить файл | Строка** - Загружает файл с описанием виджетов в формате YAML и возвращает его в виде строки
|
||||||
|
- **Приватный | Преобразовать в список | None** - Преобразовывает загруженный файл в нативный Python список
|
||||||
|
- **Публичный | Создать объект | Widget** - Принимает в качестве аргументов набор параметров виджета и создаёт на их основе объект этого виджета в зависимости от типа *(сайт / соц. сеть)*
|
||||||
|
- **Публичный, магический, перезапись | len | int** - Возвращает кол-во виджетов полученных из файла при преобразовании
|
||||||
|
|
||||||
|
## Redis
|
||||||
|
---
|
||||||
|
>[!Redis]
|
||||||
|
>Утилита управления базой данных по протоколу Redis
|
||||||
|
### Поля
|
||||||
|
---
|
||||||
|
- **Хост Redis** - Адрес нахождения базы данных Redis *(Приватный | Аргумент конструктора)*
|
||||||
|
### Методы
|
||||||
|
---
|
||||||
|
- **Публичный | Получить поле | Строка** - Получает поле из БД[^1] по id
|
||||||
|
- **Публичный | Записать поле | Целое число** - Записывает значение поля в БД[^1], возвращает id созданного поля
|
||||||
|
- **Публичный | Удалить поле| None** - Удаляет значение поля из БД[^1]
|
||||||
|
- **Публичный | Очистка | None** - Обнуляет БД[^1]
|
||||||
|
|
||||||
|
[^1]: База данных
|
||||||
|
## Статические ф-ии
|
||||||
|
---
|
||||||
|
>[!Статические функции]
|
||||||
|
>Функции, которые не относятся к определенному модулю
|
||||||
|
>
|
||||||
|
|
||||||
|
- **Инциализация БД** - Отчищает базу данных, и после заполняет её модулями, полученными из парсера YAML
|
|
@ -0,0 +1,110 @@
|
||||||
|
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.7.8 Chrome/126.0.6478.234 Electron/31.4.0 Safari/537.36" version="24.7.8">
|
||||||
|
<diagram name="Страница — 1" id="TghjJbqFGwZU-yRDKE4a">
|
||||||
|
<mxGraphModel dx="1478" dy="1018" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
|
||||||
|
<root>
|
||||||
|
<mxCell id="0" />
|
||||||
|
<mxCell id="1" parent="0" />
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-2" value="ЩК" style="sketch=0;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=#2D7600;fillColor=#60a917;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;outlineConnect=0;align=center;shape=mxgraph.office.concepts.application_generic;fontColor=#ffffff;fontFamily=Montserrat;fontSize=14;fontStyle=0" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="300" y="390" width="100" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#66B2FF;" edge="1" parent="1" source="55yLeNXAztfiM6QIOv7U-3" target="55yLeNXAztfiM6QIOv7U-2">
|
||||||
|
<mxGeometry relative="1" as="geometry">
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="250" y="547" />
|
||||||
|
<mxPoint x="250" y="420" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-6" value="orudo.ru/storage" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontSize=7;fontFamily=Montserrat;spacing=7;spacingLeft=0;" vertex="1" connectable="0" parent="55yLeNXAztfiM6QIOv7U-4">
|
||||||
|
<mxGeometry x="-0.0876" y="-1" relative="1" as="geometry">
|
||||||
|
<mxPoint as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-3" value="Storage" style="shadow=0;dashed=0;html=1;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;outlineConnect=0;shape=mxgraph.veeam.3d.datastore_volume;fillColor=#60a917;fontColor=#ffffff;strokeColor=#2D7600;fontFamily=Montserrat;fontSize=14;fontStyle=0" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="510" y="530" width="60" height="34" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.005;exitY=0.63;exitDx=0;exitDy=0;exitPerimeter=0;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="55yLeNXAztfiM6QIOv7U-7" target="55yLeNXAztfiM6QIOv7U-2">
|
||||||
|
<mxGeometry relative="1" as="geometry">
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="157" y="266" />
|
||||||
|
<mxPoint x="157" y="260" />
|
||||||
|
<mxPoint x="120" y="260" />
|
||||||
|
<mxPoint x="120" y="339" />
|
||||||
|
<mxPoint x="350" y="339" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-16" value="orudo.ru/api" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="55yLeNXAztfiM6QIOv7U-14">
|
||||||
|
<mxGeometry x="0.3655" y="-1" relative="1" as="geometry">
|
||||||
|
<mxPoint as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-7" value="FastApi" style="aspect=fixed;sketch=0;html=1;dashed=0;whitespace=wrap;verticalLabelPosition=bottom;verticalAlign=top;fillColor=#60a917;strokeColor=#2D7600;points=[[0.005,0.63,0],[0.1,0.2,0],[0.9,0.2,0],[0.5,0,0],[0.995,0.63,0],[0.72,0.99,0],[0.5,1,0],[0.28,0.99,0]];shape=mxgraph.kubernetes.icon2;kubernetesLabel=1;prIcon=api;fontFamily=Montserrat;fontSize=14;fontColor=#ffffff;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="140" y="230" width="60" height="57.6" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-8" value="widgets.yaml" style="verticalLabelPosition=bottom;html=1;verticalAlign=top;align=center;strokeColor=#314354;fillColor=#647687;shape=mxgraph.azure.file_2;pointerEvents=1;fontColor=#ffffff;fontFamily=Montserrat;fontSize=14;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="270" y="40" width="40" height="50" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;fillColor=#fa6800;strokeColor=#C73500;" edge="1" parent="1" source="55yLeNXAztfiM6QIOv7U-12" target="55yLeNXAztfiM6QIOv7U-7">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-12" value="RedisDB" style="image;sketch=0;aspect=fixed;html=1;points=[];align=center;fontSize=14;image=img/lib/mscae/Cache_Redis_Product.svg;fontFamily=Montserrat;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="260" y="233.60000000000002" width="60" height="50.4" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.524;entryDx=0;entryDy=0;entryPerimeter=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="55yLeNXAztfiM6QIOv7U-8" target="55yLeNXAztfiM6QIOv7U-12">
|
||||||
|
<mxGeometry relative="1" as="geometry">
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="370" y="65" />
|
||||||
|
<mxPoint x="370" y="260" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-18" value="информация<div style="font-size: 9px;">о</div><div style="font-size: 9px;">виджетах</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];fontFamily=Montserrat;fontSize=9;" vertex="1" connectable="0" parent="55yLeNXAztfiM6QIOv7U-17">
|
||||||
|
<mxGeometry x="-0.1361" y="1" relative="1" as="geometry">
|
||||||
|
<mxPoint y="20" as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;strokeColor=#33FF99;" edge="1" parent="1" source="55yLeNXAztfiM6QIOv7U-19" target="55yLeNXAztfiM6QIOv7U-2">
|
||||||
|
<mxGeometry relative="1" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-21" value="orudo.ru/" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="55yLeNXAztfiM6QIOv7U-20">
|
||||||
|
<mxGeometry x="-0.161" y="2" relative="1" as="geometry">
|
||||||
|
<mxPoint as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;exitPerimeter=0;endArrow=none;endFill=0;startArrow=classic;startFill=1;" edge="1" parent="1" source="55yLeNXAztfiM6QIOv7U-19">
|
||||||
|
<mxGeometry relative="1" as="geometry">
|
||||||
|
<mxPoint x="350" y="340" as="targetPoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="540" y="340" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-23" value="информация о виджетах" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="55yLeNXAztfiM6QIOv7U-22">
|
||||||
|
<mxGeometry x="0.1145" relative="1" as="geometry">
|
||||||
|
<mxPoint as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;exitPerimeter=0;endArrow=none;endFill=0;startArrow=classic;startFill=1;" edge="1" parent="1">
|
||||||
|
<mxGeometry relative="1" as="geometry">
|
||||||
|
<mxPoint x="480" y="547" as="targetPoint" />
|
||||||
|
<mxPoint x="570.0000000000001" y="417" as="sourcePoint" />
|
||||||
|
<Array as="points">
|
||||||
|
<mxPoint x="650" y="417" />
|
||||||
|
<mxPoint x="650" y="507" />
|
||||||
|
<mxPoint x="480" y="507" />
|
||||||
|
</Array>
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-25" value="динамические ассеты" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="55yLeNXAztfiM6QIOv7U-24">
|
||||||
|
<mxGeometry x="0.4467" y="2" relative="1" as="geometry">
|
||||||
|
<mxPoint x="20" y="-3" as="offset" />
|
||||||
|
</mxGeometry>
|
||||||
|
</mxCell>
|
||||||
|
<mxCell id="55yLeNXAztfiM6QIOv7U-19" value="FrontEnd" style="sketch=0;points=[[0,0,0],[0.25,0,0],[0.5,0,0],[0.75,0,0],[1,0,0],[0,1,0],[0.25,1,0],[0.5,1,0],[0.75,1,0],[1,1,0],[0,0.25,0],[0,0.5,0],[0,0.75,0],[1,0.25,0],[1,0.5,0],[1,0.75,0]];outlineConnect=0;fontColor=#ffffff;fillColor=#60a917;strokeColor=#2D7600;dashed=0;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=14;fontStyle=0;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.ecs_anywhere;fontFamily=Montserrat;" vertex="1" parent="1">
|
||||||
|
<mxGeometry x="510" y="390" width="60" height="60" as="geometry" />
|
||||||
|
</mxCell>
|
||||||
|
</root>
|
||||||
|
</mxGraphModel>
|
||||||
|
</diagram>
|
||||||
|
</mxfile>
|
Binary file not shown.
After Width: | Height: | Size: 110 KiB |
|
@ -0,0 +1,3 @@
|
||||||
|
# Дизайн-система [ORUDO.RU](https://orudo.ru)
|
||||||
|
***
|
||||||
|
`тут будет описание дизайн-системы сайта`
|
Loading…
Reference in New Issue