headless_lms_models/
proposed_block_edits.rs1use crate::prelude::*;
2
3#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)]
4#[cfg_attr(feature = "ts_rs", derive(TS))]
5pub struct NewProposedBlockEdit {
6 pub block_id: Uuid,
7 pub block_attribute: String,
8 pub original_text: String,
9 pub changed_text: String,
10}
11
12#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq, sqlx::Type)]
13#[cfg_attr(feature = "ts_rs", derive(TS))]
14#[sqlx(type_name = "proposal_status", rename_all = "lowercase")]
15pub enum ProposalStatus {
16 Pending,
17 Accepted,
18 Rejected,
19}
20
21#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)]
22#[cfg_attr(feature = "ts_rs", derive(TS))]
23pub struct EditedBlockStillExistsData {
24 pub id: Uuid,
25 pub block_id: Uuid,
26 pub current_text: String,
27 pub changed_text: String,
28 pub original_text: String,
29 pub status: ProposalStatus,
30 pub accept_preview: Option<String>,
31}
32
33#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)]
34#[cfg_attr(feature = "ts_rs", derive(TS))]
35pub struct EditedBlockNoLongerExistsData {
36 pub id: Uuid,
37 pub block_id: Uuid,
38 pub changed_text: String,
39 pub original_text: String,
40 pub status: ProposalStatus,
41}
42
43#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)]
44#[serde(tag = "type", rename_all = "kebab-case")]
45#[cfg_attr(feature = "ts_rs", derive(TS))]
46pub enum BlockProposal {
47 EditedBlockStillExists(EditedBlockStillExistsData),
48 EditedBlockNoLongerExists(EditedBlockNoLongerExistsData),
49}
50
51#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)]
52#[cfg_attr(feature = "ts_rs", derive(TS))]
53pub struct BlockProposalInfo {
54 pub id: Uuid,
55 pub action: BlockProposalAction,
56}
57
58#[derive(Debug, Serialize, Deserialize, PartialEq, Clone, Eq)]
59#[cfg_attr(feature = "ts_rs", derive(TS))]
60#[serde(tag = "tag", content = "data")]
61pub enum BlockProposalAction {
62 Accept(String),
63 Reject,
64}