use chrono::{DateTime, Utc};
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use systemprompt_identifiers::{DocumentCommentId, DocumentId, UserId};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DocumentCommentUpdatedEvent {
pub document_id: DocumentId,
pub comment_id: DocumentCommentId,
pub edited_by: UserId,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub mentions: Vec<UserId>,
}
impl DocumentCommentUpdatedEvent {
pub const NAME: &'static str = "document.comment.updated";
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DocumentCommentDeletedEvent {
pub document_id: DocumentId,
pub comment_id: DocumentCommentId,
pub deleted_by: UserId,
}
impl DocumentCommentDeletedEvent {
pub const NAME: &'static str = "document.comment.deleted";
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct DocumentCommentMentionedEvent {
pub document_id: DocumentId,
pub comment_id: DocumentCommentId,
pub mentioned_user_id: UserId,
pub author_id: UserId,
#[serde(default)]
pub v: u32,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub via_agent: Option<String>,
#[serde(default)]
pub mentions: Vec<UserId>,
#[serde(default)]
pub granted: Vec<UserId>,
#[serde(default)]
pub excerpt: String,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub anchor_quote: Option<String>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub created_at: Option<DateTime<Utc>>,
}
pub const MENTION_EVENT_VERSION: u32 = 1;
pub const MENTION_EXCERPT_CHARS: usize = 280;
impl DocumentCommentMentionedEvent {
pub const NAME: &'static str = "document.comment.mentioned";
}