"""Modèles de données pour le blog du collège (RSS) et les informations externes.""" from __future__ import annotations from datetime import datetime from pydantic import BaseModel, ConfigDict, Field from pronote_sync.models.message import Message class BlogArticle(BaseModel): """Représente un article du blog du collège.""" model_config = ConfigDict(frozen=True) id: str = Field(..., description="GUID de l'article (clé de déduplication)") title: str = Field(..., description="Titre de l'article") url: str = Field(..., description="URL canonique de l'article") published_at: datetime = Field(..., description="Date de publication (UTC)") updated_at: datetime | None = Field(None, description="Date de dernière mise à jour") category: str | None = Field(None, description="Catégorie de l'article") author: str | None = Field(None, description="Auteur (si disponible)") content_html: str = Field(..., description="Contenu HTML complet") content_text: str = Field(..., description="Contenu en texte brut (pour XMPP)") class ExternalInfo(BaseModel): """Agrège les informations externes (blog, messages Pronote) pour le message XMPP.""" blog_articles: list[BlogArticle] = Field( default_factory=list, description="Liste des nouveaux articles du blog", ) pronote_messages: list[Message] = Field( default_factory=list, description="Liste des messages Pronote", ) other_info: list[str] = Field( default_factory=list, description="Autres informations (extensible)", )