146 lines
3.5 KiB
Plaintext
146 lines
3.5 KiB
Plaintext
@startuml LTI Provider
|
||
|
||
' Настройка для A4 портретной ориентации с ГОСТ отступами (3см слева)
|
||
skinparam dpi 150
|
||
skinparam defaultFontSize 10
|
||
|
||
skinparam class {
|
||
BackgroundColor<<Controller>> LightBlue
|
||
BackgroundColor<<Service>> LightGreen
|
||
BackgroundColor<<Entity>> Wheat
|
||
BackgroundColor<<Infrastructure>> LightSalmon
|
||
FontSize 10
|
||
}
|
||
|
||
skinparam packageStyle rectangle
|
||
skinparam linetype polyline
|
||
|
||
' Слой Controllers - верх по центру
|
||
package "Controller Layer" {
|
||
class LaunchController <<Controller>> {
|
||
+ login()
|
||
+ redirect()
|
||
}
|
||
|
||
class TaskController <<Controller>> {
|
||
+ getTask()
|
||
+ updateTask()
|
||
+ submitTask()
|
||
}
|
||
}
|
||
|
||
' Левая колонка - Service/Repository/Infrastructure
|
||
package "Service Layer" {
|
||
class TaskServiceImpl <<Service>> {
|
||
+ getTask(UUID): TaskData
|
||
+ saveTask(RequestUpdateTask)
|
||
+ checkTask(ResultRequest)
|
||
}
|
||
|
||
class JwtService <<Service>> {
|
||
+ getPayload(jwt): Payload
|
||
+ getTokenPayload(jwt): IdTokenPayload
|
||
}
|
||
|
||
class HistoryService <<Service>> {
|
||
+ logEvent()
|
||
+ logAction()
|
||
}
|
||
}
|
||
|
||
package "Repository Layer" {
|
||
interface LMSContentRepository {
|
||
+ getLMSContentByContentUuid()
|
||
}
|
||
|
||
interface HistoryRepository {
|
||
+ findByContentUuid()
|
||
+ findByDeploymentId()
|
||
}
|
||
}
|
||
|
||
package "Infrastructure Layer" {
|
||
class LMSService <<Infrastructure>> {
|
||
+ ltiAuth()
|
||
+ exchangeForAccessToken()
|
||
}
|
||
|
||
class Runner <<Infrastructure>> {
|
||
+ run(userId, script)
|
||
+ check(userId, script)
|
||
}
|
||
}
|
||
|
||
' Правая колонка - Entity/Domain
|
||
package "Entity Layer" {
|
||
class LMSContent <<Entity>> {
|
||
- id: long
|
||
- contentUuid: UUID
|
||
- deploymentId: UUID
|
||
- task: Task
|
||
}
|
||
|
||
class Task <<Entity>> {
|
||
- id: long
|
||
- name: String
|
||
- description: String
|
||
- initScript: String
|
||
- verificationScript: String
|
||
- deleteScript: String
|
||
}
|
||
|
||
class History <<Entity>> {
|
||
- id: long
|
||
- contentUuid: UUID
|
||
- message: String
|
||
}
|
||
}
|
||
|
||
package "Domain Models" {
|
||
class TaskData {
|
||
- name: String
|
||
- description: String
|
||
- initScript: String
|
||
- verificationScript: String
|
||
- deleteScript: String
|
||
}
|
||
}
|
||
|
||
' Вертикальное выравнивание левой колонки
|
||
"Controller Layer" -[hidden]down- "Service Layer"
|
||
"Service Layer" -[hidden]down- "Repository Layer"
|
||
"Repository Layer" -[hidden]down- "Infrastructure Layer"
|
||
|
||
' Вертикальное выравнивание правой колонки
|
||
"Entity Layer" -[hidden]down- "Domain Models"
|
||
|
||
' Горизонтальное расположение колонок
|
||
"Service Layer" -[hidden]right- "Entity Layer"
|
||
"Repository Layer" -[hidden]right- "Entity Layer"
|
||
"Infrastructure Layer" -[hidden]right- "Domain Models"
|
||
|
||
' Связи Controllers -> Services
|
||
LaunchController --> JwtService
|
||
LaunchController --> LMSService
|
||
LaunchController --> HistoryService
|
||
TaskController --> TaskServiceImpl
|
||
TaskController --> HistoryService
|
||
|
||
' Связи Services -> Infrastructure/Repository
|
||
TaskServiceImpl --> LMSContentRepository
|
||
TaskServiceImpl --> Runner
|
||
TaskServiceImpl --> LMSService
|
||
TaskServiceImpl --> HistoryService
|
||
TaskServiceImpl ..> TaskData
|
||
|
||
Runner --> HistoryService
|
||
|
||
' Связи Repository -> Entity
|
||
LMSContentRepository ..> LMSContent
|
||
HistoryRepository ..> History
|
||
|
||
' Связи Entity
|
||
LMSContent "*" --> "1" Task
|
||
|
||
@enduml
|