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