Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

diagrams #10

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions diagrams/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Анализ и планирование

## Изучите функциональность монолитного приложения:

функция "Управление отоплением":
Пользователи могут удалённо включать/выключать отопление в своих домах.
Пользователи могут устанавливать желаемую температуру.
Система автоматически поддерживает заданную температуру, регулируя подачу тепла.

функция "Мониторинг температуры":
Система получает данные о температуре с датчиков, установленных в домах.
Пользователи могут просматривать текущую температуру в своих домах через веб-интерфейс.Изучил два функционала управление отоплением и мониторинг температуры

## Проанализируйте архитектуру монолитного приложения:
Язык программирования: Java</br>
База данных: PostgreSQL</br>
Архитектура: Монолитная, все компоненты системы (обработка запросов, бизнес-логика, работа с данными) находятся в рамках одного приложения.</br>
Взаимодействие: Синхронное, запросы обрабатываются последовательно.</br>
Масштабируемость: Ограничена, так как монолит сложно масштабировать по частям.</br>
Развертывание: Требует остановки всего приложения.</br>
## Диаграммы определены в папке diagrams
---
1. Диаграмма компонентов
2. Диаграмма контейнеров
3. Диаграмма контекстов
4. Диграмма Er сущностей
5. Диграмма DDD
---
## Описание OpenAPI
В папке OpenApi

123 changes: 123 additions & 0 deletions diagrams/components/SmartHomeSystem.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Component.puml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

AddElementTag("microService", $shape=EightSidedShape(), $bgColor="CornflowerBlue", $fontColor="white", $legendText="micro service\neight sided")
AddBoundaryTag("bgBlue",$bgColor="#3091ff")

Person_Ext(user, "Пользователь")
Component(apiGateway,"APIGateway")
Component(webApplication,"WebApplication")

' Внешние устройства для управления

Container_Boundary(extDevices, "Датчики и испольнительные механизмы"){
Component(sesorTemp, "Датчик температу")
Component(relayLightSwitch, "Реле Освещения")
Component(driverGate, "Привод ворот")
Component(controllerHeating, "Контроллер отопления")
}


'KAFKA Брокер сообщений
Container_Boundary(brokerKafkaBoudary, "Брокер сообщений"){
Component(brokerKafka,"Kafka","Брокер для обработки сообщений")
}

BiRel_U(sesorTemp,brokerKafka,"Обмен данными")
BiRel_U(relayLightSwitch,brokerKafka,"Обмен данными")
BiRel_U(driverGate,brokerKafka,"Обмен данными")
BiRel_U(controllerHeating,brokerKafka,"Обмен данными")


'сервис Датчики
Container_Boundary(msSensorsBoundary, "МС Датчики",$tags="bgBlue"){
Component(sensorsApi,"SensorsControllerApi","RESTApi/JSON")
ComponentDb(sensorDb, "DataBase", "Postgres")
Component(sensorService, "Сервис управления устройствами", ".net")
Component(sensorKafkaHandler, "Обработчик Ассинх сообщений", ".net")
}

BiRel(sensorsApi,sensorService,"API")
BiRel(sensorService,sensorDb,"Sql Команды")
BiRel(sensorKafkaHandler,sensorDb,"Sql команды")
BiRel(sensorKafkaHandler,sensorService,"API")
BiRel(brokerKafka,sensorKafkaHandler,"Обмен данными")



' сервиc Испольнительные механизмы
Container_Boundary(msDriverDevicesBoundary, "МС Испольнительные механизмы",$tags="bgBlue"){
Component(driverDeviceApi,"DriversDevicesContolControllerApi","RESTApi/JSON")
ComponentDb(driverDeviceDB,"DataBase","Postgres")
Component(driverDeviceService,"Сервис упрвления Испол-ми механизмами",".net")
Component(driverDeviceKafkaHandler,"Обрботчик Ассинх. сообщений",".net")
}

BiRel(driverDeviceApi,driverDeviceService,"API")
BiRel(driverDeviceService, driverDeviceDB, "SQL")
BiRel(driverDeviceKafkaHandler,driverDeviceDB,"SQL")
BiRel(driverDeviceKafkaHandler,driverDeviceService,"API")
BiRel(driverDeviceKafkaHandler,brokerKafka,"Обмен Данными")



' сервис управления пользователями
Container_Boundary(msUserDataBoundary, "МС Данные пользователя",$tags="bgBlue"){
Component(userDataApi,"UserDataControllerApi","RESTApi/JSON")
ComponentDb(userDataDd,"DataBase","Postgres")
Component(userDataService,"Сервис управления пользователями",".net")
Component(userDataKafkaHandler,"Обработчик Ассинх. сообщений",".net")
}

BiRel(brokerKafka,userDataKafkaHandler,"Обмен данными")
BiRel(userDataApi,userDataService,"API")
BiRel(userDataService,userDataDd,"SQL")
BiRel(userDataKafkaHandler, userDataDd,"SQL")
BiRel(userDataKafkaHandler, userDataService,"API")



'сервис уведомлений
Container_Boundary(msNotificationsBoundary, "МС Уведомлений",$tags="bgBlue"){
Component(notificationsApi,"NotificationControllerApi","RESTApi/JSON")
Component(notificationsDB,"DataBase","Postgres")
Component(notificationsService,"Сервис управления уведомлениями",".net")
Component(notificationsKafkaHandler,"Обработчи Ассинх. событий",".net")
}

BiRel(brokerKafka,notificationsKafkaHandler,"Обмен данными")
BiRel(notificationsApi,notificationsService,"API")
BiRel(notificationsService, notificationsDB,"SQL")
BiRel(notificationsKafkaHandler, notificationsDB,"SQL")
BiRel(notificationsKafkaHandler, notificationsService,"API")



' сервис телеметрии
Container_Boundary(msTelemetryBoundary, "МС Телеметрии",$tags="bgBlue"){
Component(telemetryApi,"TelemetryControllerApi","RESTApi/JSON")
ComponentDb(telemetryDB,"DataBase","Postgres")
Component(telemetryService,"Сервис управления телеметрией",".net")
Component(telemetryKafkaHandler,"Обработчик Ассинх. сообщений",".net")
}

BiRel(brokerKafka,telemetryKafkaHandler,"Обмен данными")
BiRel(telemetryApi,telemetryService,"API")
BiRel(telemetryService,telemetryDB,"SQL")
BiRel(telemetryKafkaHandler,telemetryDB,"SQL")
BiRel(telemetryKafkaHandler,telemetryService,"API")




Rel_L(user, apiGateway, "HttpRequest")
Rel(apiGateway, webApplication, "HttpRequest")


Rel_D(webApplication, sensorsApi, "HttpRequest")
Rel(webApplication, driverDeviceApi, "HttpRequest")
Rel(webApplication, userDataApi, "HttpRequest")
Rel(webApplication, telemetryApi, "HttpRequest")

@enduml
40 changes: 40 additions & 0 deletions diagrams/containers/SmartHomeSystem.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
@startuml
title Диаграмма контейнеров SmartHomeSystem

!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Person(customer, "Пользователь", "управление 'умным домом'")

' System(smathome, "Smart-Home-System", "Поддержка температуры пользователя, запрос информации с внешних устройства")

System_Ext(sensor, "Датчик температуры", "Установленный в доме пользователя")
System_Ext(relayLightSwitch, "Реле света", "Установленно в доме пользователя")
System_Ext(driverGate, "Привод ворот", "Установленно на участкепользователя")
System_Ext(panelControl, "Панель управления отопительной системы", "Установлена в доме пользователя")

' Rel(customer, smathome, "Установка, считывание, мониторинг поддерживаемой температуры")
' Rel(smathome, sensor, "Запрос температуры")
' Rel(smathome, panelControl, "Запись/Чтение параметров")


Container_Boundary(smatrHome, "Smart Home System"){
Container(shAPIAppl, "API Application (Микросевисы системы)", "C# ASP.NET","REST API(HTTP/JSON)")
Container(shAPIGateway, "APIGateway",)
Container(shWebAppl, "WEB Application", "VUE.js")
ContainerDb(shDbPostgres, "DataBase", "postgres")
Container_Boundary(queueContainer, "Брокер сообщений"){
ContainerQueue(brokerkafka, "Kafka", "Брокер для обработки сообщений")
}
}

Rel(customer, shWebAppl, "Установка, считывание, мониторинг поддерживаемой температуры")
Rel(shWebAppl, shAPIGateway, "HTTP Request")
Rel(shAPIGateway, shAPIAppl, "HTTP Request")
Rel(shAPIAppl, brokerkafka, "MessagePayload")
Rel(brokerkafka, shAPIAppl, "MessagePayload")
Rel(shAPIAppl, shDbPostgres, "SQL")
BiRel(sensor, brokerkafka , "Обмен данными")
BiRel(panelControl, brokerkafka , "Обмен данными")
BiRel(driverGate, brokerkafka , "Обмен данными")
BiRel(relayLightSwitch, brokerkafka , "Обмен данными")

@enduml
15 changes: 15 additions & 0 deletions diagrams/context/SmartHomeSystem.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
@startuml
title Диаграма контекста Smart Home System

!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Context.puml
Person(customer, "Пользователь", "управление отоплением в доме")

System(smathome, "Smart Home System", "Поддержка температуры пользователя, запрос информации с внешних устройства")

System_Ext(sensor, "Датчик емпературы", "Установленный в доме пользователя")
System_Ext(panelControl, "Панель управления отопительной системы", "Установлен в доме пользователя")

Rel(customer, smathome, "Установка, считывание, мониторинг поддерживаемой температуры")
Rel(smathome, sensor, "Запрос температуры")
Rel(smathome, panelControl, "Запись/Чтение параметров")
@enduml
72 changes: 72 additions & 0 deletions diagrams/ddd/DDD ShS.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
@startuml
title Компания "Smart Home System(ShS)⛪"

!includeurl https://raw.githubusercontent.com/RicardoNiepel/C4-PlantUML/master/C4_Component.puml

' Person(user, "User", "A user of the fitness club system")
System_Boundary(dSupportUser, "Domain: Обслуживание клиентов"){
System(sdSupportUser, "Управление заявками на обслуживание", "Бизнес логика отдела обслуживания клиентов")
}

System_Boundary(dSale, "Domain: Продажа оборудования SHS"){
System(sdPayment, "Subdomain: Оплата заказов", "Бизнес логика отдела продаж")
System(sdOrder, "Subdomain: Управление заказами")
}

System_Boundary(dDevicesSmartHome, "Domain: Управление умным домом",){
System(sdDeviceSensor, "Subdomain: Управление датчиками")
System(sdDeviceControl, "Subdomain: Управление испольнительными механизмами")
System(sdTelemetry, "Subdomain: Управление Телеметрией")
System(sdUserData, "Subdomain: Управление данными пользователя")
}

System_Boundary(sdcDeviceSensor, "Контекст: Управление датчиками",){
System(ctOnSensor, "Отключение датчика:")
System(ctOfSensor, "Включение датчика:")
System(ctCurrentStateSensor, "Отслеживание состояния данных датчика")
System(ctAddSensor, "Добавление датчика")
System(ctDeleteSensor, "Удаление датчика")
}

System_Boundary(sdcDeviceControl, "Контекст: Управление исполнительными механизмами",){
System(ctOnDeviceControl, "Отключение испол механизма")
System(ctOfDeviceControl,, "Включение испол механизма")
System(ctCurrentStateDeviceControl, "Отслеживание состояния механизма управления")
System(ctAddDeviceControl, "Добавление испол механизма")
System(ctDeleteDeviceControl, "Удаление испол механизма")
}

System_Boundary(sdсTelemetry, "Контекст: Управление Телеметрией",){
System(ctOnScriptControl, "Отключение имеющегося сценария")
System(ctOfScriptControl,, "Включение имеющегося сценария")
System(ctCurrentStateScriptControl, "Отслеживание состояния текущего сценария")
System(ctAddScriptControl, "Добавление сценария усправления исполнительными механизмами")
System(ctDeleteScriptControl, "Удаление сценария усправления исполнительными механизмами")
}

System_Boundary(sdcUserData, "Контекст: Управление данными пользователя",){
System(ctEditData, "Редактирование личных данных пользователя")
}



' Container_Boundary(FitLifeSystem, "FitLife System") {
' Container(WebApp, "Web Application", "Java, Spring", "Handles user interactions")
' Container(MobileApp, "Mobile Application", "Kotlin, Swift", "Allows users to manage their membership")
' Container(PaymentService, "Payment Service", "Node.js", "Processes payments")
' Container(Database, "Database", "PostgreSQL", "Stores user data and schedules")
' ContainerDb(Postgres,"Postgres","Техническое описние","Хранятся записи состояния датчиков", "спрайт", "tags", "links")
' }

' System_Ext(api, "Third-Party API", "External API for fitness data integration")
' System_Ext(bank, "Bank System", "External bank for processing payments")


' Rel(dDevicesSmartHome, sdcSensors, "Описание контекста")
' Rel(admin, WebApp,"Manages the system")
' Rel(WebApp,PaymentService,"Processes payment requests")
' Rel(PaymentService,bank,"Processes payments")
' Rel(WebApp,Database,"Reads/Writes user data")
' Rel(MobileApp,Database,"Reads/Writes user data")
' Rel(WebApp,api,"Fetches fitness data")
@enduml
57 changes: 57 additions & 0 deletions diagrams/entity relations/smart home system.puml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@

@startuml
entity "Пользователь" as user{
Id
email
name
}

entity "Дом" as home{
idДома
Адрес
Комнаты[]
}

entity "Комната" as room {
idДома
Датчики:<Датчик>[]
Исп. механизмы:<Испл. механизмы>[]
Сценарии Телеметрии:<Телеметрия>[]
}

entity "Датчик" as sensor{
id
idКомнаты
серийный номер
тип
модель
состояние
}

entity "Исполнительный механизм" as driver_device {
id
idКомнаты
серийный номер
тип
модель
состояние
}

entity "Сценарий(Телеметрия)" as script_telemetry{
idДома
id
idУстройств[]
idИсполМеханизм[]
имя
script выполнение
}

user ||..o{ home
home ||..o{ script_telemetry
home ||..o{ room
room ||..o{ sensor
room ||..o{ driver_device
sensor }|..|{ script_telemetry
driver_device }|..|{ script_telemetry

@enduml
Loading