Refactor code structure for improved readability and maintainability
This commit is contained in:
77
diagrams/backend/backend1.puml
Normal file
77
diagrams/backend/backend1.puml
Normal file
@@ -0,0 +1,77 @@
|
||||
@startuml Modèles de données
|
||||
|
||||
class Project {
|
||||
+id: integer
|
||||
+name: string
|
||||
+description: string
|
||||
+start_date: date
|
||||
+status: integer
|
||||
+getAllProjects()
|
||||
+getProjectById(id)
|
||||
+createProject(name, description, startDate, status)
|
||||
+updateProject(id, updates)
|
||||
+updateProjectStatus(id, status)
|
||||
+deleteProject(id)
|
||||
+findCurrentRenderingProject()
|
||||
+findStoppingProject()
|
||||
}
|
||||
|
||||
class Measurement {
|
||||
+id: integer
|
||||
+project_id: integer
|
||||
+timestamp: datetime
|
||||
+path: string
|
||||
+temperature: float
|
||||
+humidity: float
|
||||
+order_id: integer
|
||||
+getAllMeasurements()
|
||||
+getMeasurementById(id)
|
||||
+getMeasurementByProjectAndOrderId(projectId, orderId)
|
||||
+getMeasurementsByProjectId(projectId)
|
||||
+createMeasurement(projectId, timestamp, path, temperature, humidity, orderId)
|
||||
+updateMeasurement(id, updates)
|
||||
+deleteMeasurement(id)
|
||||
+getNextOrderId(projectId)
|
||||
}
|
||||
|
||||
class Video {
|
||||
+id: integer
|
||||
+project_id: integer
|
||||
+measurement_ids: string
|
||||
+name: string
|
||||
+resolution: string
|
||||
+duration: integer
|
||||
+status: integer
|
||||
+progress: float
|
||||
+video_file: string
|
||||
+started_at: datetime
|
||||
+updated_at: datetime
|
||||
+eta: float
|
||||
+getAllVideos()
|
||||
+getVideoById(id)
|
||||
+getVideosByProjectId(projectId)
|
||||
+createVideo(projectId, measurementIds, name, resolution, duration, status)
|
||||
+updateVideo(id, updates)
|
||||
+updateVideoFilePath(id, videoFile)
|
||||
+updateVideoStatus(id, status)
|
||||
+deleteVideo(id)
|
||||
+getUnfinishedVideos()
|
||||
+updateVideoProgress(id, progress, eta)
|
||||
}
|
||||
|
||||
class Camera {
|
||||
+id: integer
|
||||
+interval: integer
|
||||
+maintenance: integer
|
||||
+active: integer
|
||||
+getCamera()
|
||||
+updateCamera(id, updates)
|
||||
+deleteCamera(id)
|
||||
+initializeCamera()
|
||||
}
|
||||
|
||||
Project "1" -- "0..*" Measurement : possède >
|
||||
Project "1" -- "0..*" Video : possède >
|
||||
Measurement "1..*" -- "0..*" Video : utilisée dans >
|
||||
|
||||
@enduml
|
||||
62
diagrams/backend/backend2.puml
Normal file
62
diagrams/backend/backend2.puml
Normal file
@@ -0,0 +1,62 @@
|
||||
@startuml Architecture MVC
|
||||
|
||||
package "Controllers" {
|
||||
[ProjectController]
|
||||
[MeasurementController]
|
||||
[VideoController]
|
||||
[ImageController]
|
||||
[CameraController]
|
||||
}
|
||||
|
||||
package "Models" {
|
||||
[Project]
|
||||
[Measurement]
|
||||
[Video]
|
||||
[Camera]
|
||||
[DatabaseManager]
|
||||
}
|
||||
|
||||
package "Routes" {
|
||||
[projectRoutes]
|
||||
[measurementRoutes]
|
||||
[videoRoutes]
|
||||
[imageRoutes]
|
||||
[cameraRoutes]
|
||||
[index]
|
||||
}
|
||||
|
||||
package "Services" {
|
||||
[StorageService]
|
||||
[VideoService]
|
||||
}
|
||||
|
||||
package "Utils" {
|
||||
[errorHandler]
|
||||
}
|
||||
|
||||
package "Database" {
|
||||
[connection]
|
||||
}
|
||||
|
||||
package "Config" {
|
||||
[config]
|
||||
}
|
||||
|
||||
cloud "Client" {
|
||||
[Frontend]
|
||||
}
|
||||
|
||||
[Frontend] --> [Routes]
|
||||
[Routes] --> [Controllers]
|
||||
[Controllers] --> [Models]
|
||||
[Controllers] --> [Services]
|
||||
[Models] --> [Database]
|
||||
[Services] --> [Models]
|
||||
[Controllers] --> [Utils]
|
||||
[Models] --> [Utils]
|
||||
[Services] --> [Utils]
|
||||
[Models] --> [Config]
|
||||
[Services] --> [Config]
|
||||
[Controllers] --> [Config]
|
||||
|
||||
@enduml
|
||||
39
diagrams/backend/backend3.puml
Normal file
39
diagrams/backend/backend3.puml
Normal file
@@ -0,0 +1,39 @@
|
||||
@startuml Création de vidéo
|
||||
|
||||
actor Client
|
||||
participant "videoRoutes" as Routes
|
||||
participant "VideoController" as Controller
|
||||
participant "Video" as Model
|
||||
participant "Measurement" as MeasurementModel
|
||||
participant "VideoService" as Service
|
||||
participant "FFmpeg" as FFmpeg
|
||||
database Database
|
||||
|
||||
Client -> Routes: POST /videos
|
||||
Routes -> Controller: createVideo(req, res)
|
||||
Controller -> Model: createVideo(project_id, measurement_ids, name, resolution, duration)
|
||||
Model -> Database: INSERT INTO videos
|
||||
Database --> Model: video data
|
||||
Model --> Controller: video object
|
||||
|
||||
Controller -> Controller: getMeasurementPathList(measurement_ids, project_id)
|
||||
Controller -> MeasurementModel: getMeasurementByProjectAndOrderId(projectId, orderId)
|
||||
MeasurementModel -> Database: SELECT * FROM measurements
|
||||
Database --> MeasurementModel: measurement data
|
||||
MeasurementModel --> Controller: measurement object with path
|
||||
|
||||
Controller -> Service: createVideoFromImages(project_id, pathList, duration, video_id, resWidth, resHeight)
|
||||
Service -> FFmpeg: spawn('ffmpeg', ffmpegArgs)
|
||||
Service -> Model: updateVideo(videoId, {status: rendering, progress: 0})
|
||||
Model -> Database: UPDATE videos SET status = rendering, progress = 0
|
||||
FFmpeg --> Service: stderr progress events
|
||||
Service -> Model: updateVideoProgress(videoId, progress, eta)
|
||||
Model -> Database: UPDATE videos SET progress = X, eta = Y
|
||||
FFmpeg --> Service: process complete
|
||||
Service -> Model: updateVideo(videoId, {status: completed, progress: 100})
|
||||
Model -> Database: UPDATE videos SET status = completed, progress = 100
|
||||
Service --> Controller: videoFile path
|
||||
Controller --> Routes: { message: success, id: video.id }
|
||||
Routes --> Client: 200 OK - JSON Response
|
||||
|
||||
@enduml
|
||||
34
diagrams/backend/backend4.puml
Normal file
34
diagrams/backend/backend4.puml
Normal file
@@ -0,0 +1,34 @@
|
||||
@startuml Cas d'utilisation
|
||||
|
||||
left to right direction
|
||||
actor "Utilisateur" as User
|
||||
actor "Caméra" as Camera
|
||||
|
||||
rectangle "Timelapse Backend" {
|
||||
usecase "Gérer les projets" as UC1
|
||||
usecase "Configurer la caméra" as UC2
|
||||
usecase "Capturer des images" as UC3
|
||||
usecase "Créer des vidéos" as UC4
|
||||
usecase "Visualiser les images" as UC5
|
||||
usecase "Visualiser les vidéos" as UC6
|
||||
usecase "Démarrer une capture" as UC7
|
||||
usecase "Arrêter une capture" as UC8
|
||||
usecase "Uploader une image et des mesures" as UC9
|
||||
|
||||
UC1 ..> UC7 : <<include>>
|
||||
UC1 ..> UC8 : <<include>>
|
||||
UC2 ..> UC7 : <<extend>>
|
||||
UC2 ..> UC8 : <<extend>>
|
||||
UC3 ..> UC9 : <<include>>
|
||||
UC4 ..> UC5 : <<include>>
|
||||
}
|
||||
|
||||
User --> UC1
|
||||
User --> UC2
|
||||
User --> UC4
|
||||
User --> UC5
|
||||
User --> UC6
|
||||
Camera --> UC3
|
||||
Camera --> UC9
|
||||
|
||||
@enduml
|
||||
41
diagrams/backend/backend5.puml
Normal file
41
diagrams/backend/backend5.puml
Normal file
@@ -0,0 +1,41 @@
|
||||
@startuml Déploiement
|
||||
|
||||
node "Client Device" {
|
||||
[Web Browser] as Browser
|
||||
}
|
||||
|
||||
node "Docker Environment" {
|
||||
node "timelapse-api" {
|
||||
[Express Server] as Server
|
||||
[Node.js Runtime] as Node
|
||||
[FFmpeg] as FFmpeg
|
||||
}
|
||||
|
||||
database "timelapse-db" {
|
||||
[PostgreSQL] as DB
|
||||
}
|
||||
|
||||
folder "Volumes" {
|
||||
folder "storage/" {
|
||||
[Project Images]
|
||||
[Generated Videos]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
node "Camera Device" {
|
||||
[Camera Software] as CamSoftware
|
||||
[Sensors] as Sensors
|
||||
}
|
||||
|
||||
Browser --> Server: HTTP/REST
|
||||
CamSoftware --> Server: HTTP/REST
|
||||
Server --> DB: SQL Queries
|
||||
Server --> FFmpeg: Process Spawn
|
||||
FFmpeg --> [Project Images]: Read
|
||||
FFmpeg --> [Generated Videos]: Write
|
||||
Server --> [Project Images]: Read/Write
|
||||
Server --> [Generated Videos]: Read
|
||||
Sensors --> CamSoftware: Temperature/\nHumidity Data
|
||||
|
||||
@enduml
|
||||
Reference in New Issue
Block a user