Add Spoiler Flag with veil, AP content-warning encoding, and full-stack plumbing

Authors can flag a review's comment as containing spoilers; the comment is
blurred behind a reveal control for every viewer except the author, omitted
from RSS, and federates as containsSpoilers plus an AP summary content
warning (ADR-0011) so Mastodon-class clients also collapse it. Flag follows
the general-edit path (ADR-0001) across domain, both DB backends, REST,
HTML templates, SPA (shadcn), TUI fixtures, and exports.
This commit is contained in:
2026-10-17 21:12:56 +02:00
parent 9dd9df1f73
commit bb2001b9cc
66 changed files with 513 additions and 167 deletions

View File

@@ -20,6 +20,8 @@ pub struct LogReviewRequest {
#[serde(skip_serializing_if = "Option::is_none")]
#[schema(value_type = Option<String>)]
pub watch_medium: Option<domain::value_objects::WatchMedium>,
#[serde(default)]
pub spoilers: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
@@ -75,6 +77,8 @@ pub struct EditReviewRequest {
#[serde(default, skip_serializing_if = "Option::is_none")]
#[schema(value_type = Option<Option<String>>)]
pub watch_medium: Option<Option<domain::value_objects::WatchMedium>>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub spoilers: Option<bool>,
}
fn default_export_format() -> String {

View File

@@ -92,6 +92,8 @@ pub struct ReviewDto {
#[serde(skip_serializing_if = "Option::is_none")]
#[schema(value_type = Option<String>)]
pub watch_medium: Option<domain::value_objects::WatchMedium>,
#[serde(default)]
pub spoilers: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
@@ -112,6 +114,7 @@ pub struct MovieStatsDto {
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]
pub struct SocialReviewDto {
pub user_display: String,
pub user_id: Uuid,
pub rating: u8,
pub comment: Option<String>,
pub watched_at: String,
@@ -119,6 +122,8 @@ pub struct SocialReviewDto {
#[serde(skip_serializing_if = "Option::is_none")]
#[schema(value_type = Option<String>)]
pub watch_medium: Option<domain::value_objects::WatchMedium>,
#[serde(default)]
pub spoilers: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, utoipa::ToSchema)]