pjson_rs/application/commands/
mod.rs

1//! Commands - Write operations that change system state
2
3use crate::application::dto::{PriorityDto, SessionIdDto, StreamIdDto};
4use crate::domain::{aggregates::stream_session::SessionConfig, entities::stream::StreamConfig};
5use serde::{Deserialize, Serialize};
6use serde_json::Value as JsonValue;
7
8/// Create new streaming session
9#[derive(Debug, Clone, Serialize, Deserialize)]
10pub struct CreateSessionCommand {
11    pub config: SessionConfig,
12    pub client_info: Option<String>,
13    pub user_agent: Option<String>,
14    pub ip_address: Option<String>,
15}
16
17/// Activate an existing session
18#[derive(Debug, Clone, Serialize, Deserialize)]
19pub struct ActivateSessionCommand {
20    pub session_id: SessionIdDto,
21}
22
23/// Create new stream within a session
24#[derive(Debug, Clone, Serialize, Deserialize)]
25pub struct CreateStreamCommand {
26    pub session_id: SessionIdDto,
27    pub source_data: JsonValue,
28    pub config: Option<StreamConfig>,
29}
30
31/// Start streaming data for a specific stream
32#[derive(Debug, Clone, Serialize, Deserialize)]
33pub struct StartStreamCommand {
34    pub session_id: SessionIdDto,
35    pub stream_id: StreamIdDto,
36}
37
38/// Generate frames for a stream with priority filtering
39#[derive(Debug, Clone, Serialize, Deserialize)]
40pub struct GenerateFramesCommand {
41    pub session_id: SessionIdDto,
42    pub stream_id: StreamIdDto,
43    pub priority_threshold: PriorityDto,
44    pub max_frames: usize,
45}
46
47/// Complete a stream successfully
48#[derive(Debug, Clone, Serialize, Deserialize)]
49pub struct CompleteStreamCommand {
50    pub session_id: SessionIdDto,
51    pub stream_id: StreamIdDto,
52    pub checksum: Option<String>,
53}
54
55/// Fail a stream with error
56#[derive(Debug, Clone, Serialize, Deserialize)]
57pub struct FailStreamCommand {
58    pub session_id: SessionIdDto,
59    pub stream_id: StreamIdDto,
60    pub error: String,
61}
62
63/// Cancel a stream
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct CancelStreamCommand {
66    pub session_id: SessionIdDto,
67    pub stream_id: StreamIdDto,
68}
69
70/// Update stream configuration
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct UpdateStreamConfigCommand {
73    pub session_id: SessionIdDto,
74    pub stream_id: StreamIdDto,
75    pub config: StreamConfig,
76}
77
78/// Close session gracefully
79#[derive(Debug, Clone, Serialize, Deserialize)]
80pub struct CloseSessionCommand {
81    pub session_id: SessionIdDto,
82}
83
84/// Batch generate frames across multiple streams with priority
85#[derive(Debug, Clone, Serialize, Deserialize)]
86pub struct BatchGenerateFramesCommand {
87    pub session_id: SessionIdDto,
88    pub priority_threshold: PriorityDto,
89    pub max_frames: usize,
90}
91
92/// Adjust priority thresholds based on performance metrics
93#[derive(Debug, Clone, Serialize, Deserialize)]
94pub struct AdjustPriorityThresholdCommand {
95    pub session_id: SessionIdDto,
96    pub new_threshold: PriorityDto,
97    pub reason: String,
98}