backend/src/domain/entities/document.rs
Description et Responsabilit?s
Le fichier document.rs d?finit l’entit? de domaine Document dans le syst?me KoproGo. Cette entit? repr?sente les documents de copropri?t? (proc
?s-verbaux, factures, contrats, r?glements, devis, etc.) et leur gestion.
Responsabilit?s principales:
Repr?senter un document avec ses m?tadonn?es (type, titre, taille, format)
G?rer le stockage de fichiers et leur localisation (file_path)
Lier les documents aux entit?s m?tier (meetings, expenses)
Valider les donn?es lors de la cr?ation
Tracer l’origine des documents (uploaded_by)
Maintenir les m?tadonn?es temporelles (cr?ation, mise ? jour)
Contexte m?tier:
Dans une copropri?t?, de nombreux documents doivent ?tre conserv?s et partag?s avec les copropri?taires : proc?s-verbaux d’assembl?es g?n?rales, bilans financiers, factures de travaux, contrats de prestation, r?glements de copropri?t?, devis, etc. Ces documents doivent ?tre organis?s, accessibles, et li?s aux ?v?nements et charges correspondants.
?num?rations
DocumentType
Signature:
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub enum DocumentType {
MeetingMinutes,
FinancialStatement,
Invoice,
Contract,
Regulation,
WorksQuote,
Other,
}
Description:
?num?ration repr?sentant les diff?rents types de documents de copropri?t?.
Variants:
Variant |
Description |
|---|---|
|
Proc?s-verbal d’assembl?e g?n?rale (AGO, AGE) |
|
Bilan financier, comptabilit?, ?tats des comptes |
|
Facture de fournisseurs, prestataires |
|
Contrat de prestation (gardiennage, entretien, assurance) |
|
R?glement de copropri?t?, r?glement int?rieur |
|
Devis pour travaux |
|
Autre type de document non cat?goris? |
Traits d?riv?s:
Debug: Affichage pour le d?bogageClone: Copie de la valeurSerialize/Deserialize: S?rialisation JSONPartialEq: Comparaison d’?galit?
Structures et Types
Document
Signature:
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct Document {
pub id: Uuid,
pub building_id: Uuid,
pub document_type: DocumentType,
pub title: String,
pub description: Option<String>,
pub file_path: String,
pub file_size: i64,
pub mime_type: String,
pub uploaded_by: Uuid,
pub related_meeting_id: Option<Uuid>,
pub related_expense_id: Option<Uuid>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
Description:
Structure repr?sentant un document de copropri?t? avec toutes ses m?tadonn?es et ses liens vers les entit?s associ?es.
Champs:
Champ |
Type |
Description |
|---|---|---|
|
|
Identifiant unique du document (UUID v4) |
|
|
R?f?rence vers l’immeuble concern? |
|
|
Type de document (PV, facture, contrat, etc.) |
|
|
Titre du document (obligatoire, non vide) |
|
|
Description optionnelle du document |
|
|
Chemin d’acc?s au fichier (obligatoire, non vide) |
|
|
Taille du fichier en bytes (doit ?tre > 0) |
|
|
Type MIME du fichier (ex: |
|
|
ID de l’utilisateur qui a t?l?vers? le document |
|
|
Lien optionnel vers une assembl?e g?n?rale |
|
|
Lien optionnel vers une charge/d?pense |
|
|
Date et heure de cr?ation de l’enregistrement |
|
|
Date et heure de derni?re mise ? jour |
M?thodes
Document::new
Signature:
pub fn new(
building_id: Uuid,
document_type: DocumentType,
title: String,
description: Option<String>,
file_path: String,
file_size: i64,
mime_type: String,
uploaded_by: Uuid,
) -> Result<Self, String>
Description:
Constructeur pour cr?er une nouvelle instance de Document avec validation des donn?es.
Comportement:
Valide que
titlen’est pas videValide que
file_pathn’est pas videValide que
file_sizeest strictement positif (> 0)G?n?re un nouvel UUID v4 pour
idInitialise
related_meeting_idetrelated_expense_id?NoneCapture le timestamp actuel UTC pour
created_atetupdated_atRetourne une instance Document si toutes les validations passent
Retourne une erreur descriptive si une validation ?choue
Retour:
Ok(Document): Instance Document valide avec ID g?n?r? et timestampsErr(String): Message d’erreur descriptif si validation ?choue
Erreurs possibles:
"Title cannot be empty": Le titre est vide"File path cannot be empty": Le chemin de fichier est vide"File size must be greater than 0": La taille est d 0
Document::link_to_meeting
Signature:
pub fn link_to_meeting(&mut self, meeting_id: Uuid)
Description:
Lie le document ? une assembl?e g?n?rale et met ? jour le timestamp.
Document::link_to_expense
Signature:
pub fn link_to_expense(&mut self, expense_id: Uuid)
Description:
Lie le document ? une charge/d?pense et met ? jour le timestamp.
Document::file_size_mb
Signature:
pub fn file_size_mb(&self) -> f64
Description:
Convertit et retourne la taille du fichier en m?gaoctets (MB). Divise file_size (en bytes) par 1 048 576 (1024 ? 1024).
Tests
Le fichier contient 3 tests unitaires:
test_create_document_success: Cr?ation r?ussie avec donn?es validestest_create_document_empty_title_fails: Validation titre videtest_link_document_to_meeting: Lien vers assembl?e
Fichiers Associ?s
backend/src/domain/entities/document.rs ? CE FICHIER
backend/src/application/dto/document_dto.rs
backend/src/application/ports/document_repository.rs
backend/src/infrastructure/repositories/postgres_document_repository.rs
backend/src/web/handlers/documents.rs