Aller au contenu principal

List company documents

GET 

/company/documents

Obtient une liste paginée de tous les documents associés à la société de l'utilisateur authentifié.

Flux opérationnel :

  1. Authentification via un JWT valide avec un rôle de gestionnaire ou supérieur
  2. Validation des paramètres de pagination
  3. Filtrage optionnel par type de document
  4. Requête paginée à la base de données (seulement la dernière version de chaque document)
  5. Retour des documents avec métadonnées et chemins des fichiers

Exigences d'accès :

  • Authentification : Jeton JWT valide (Bearer token)
  • Rôle minimum : Gestionnaire de société (isGestor)
  • Permissions : Accès uniquement aux documents de sa propre société

Cas d'utilisation typiques :

  • Consulter les factures et contrats de l'entreprise
  • Filtrer les documents par catégorie (documentType)
  • Examiner l'état d'approbation des documents en attente
  • Accéder à l'historique des versions récentes

États du document :

  • pending : En attente de revue par l'administration
  • approved : Approuvé et disponible pour utilisation
  • rejected : Rejeté avec un motif spécifié

Considérations importantes :

  • Retourne uniquement la dernière version de chaque document (exclut les versions obsolètes avec newVersion: null)
  • Tous les horodatages sont au format UTC
  • Maximum 100 documents par page
  • Tri par date de création décroissante (les plus récents en premier)
  • Les fichiers sont stockés dans S3/MinIO avec des chemins relatifs dans filePaths

Exemple de requête :

GET /company/documents?page=1&limit=25&documentType=648ac82b769e704acd2c73f5
Authorization: Bearer {token}

Exemple de réponse réussie :

\{
docs: [
\{
_id: 5f8d3b7a9c2d1e0f4a6b5c4d,
name: Facture Q1 2023,


<Heading
id={"request"}
as={"h2"}
className={"openapi-tabs__heading"}
children={"Request"}
>
</Heading>

<ParamsDetails
parameters={[{"name":"page","in":"query","description":"Numéro de page pour la navigation dans les résultats paginés.\nUtile pour diviser l'affichage lorsqu'il y a de nombreux documents.","required":false,"example":1,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Nombre maximum de documents à retourner par page.\nPermet d'équilibrer les performances (valeurs basses) et la commodité (valeurs élevées).","required":false,"example":25,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"documentType","in":"query","description":"Filtrez les documents par type spécifique en utilisant leur ID MongoDB.\nLes types disponibles sont obtenus à partir du point de terminaison /documents/types.\nUtile pour afficher uniquement les factures, contrats ou autres catégories.","required":false,"example":"648ac82b769e704acd2c73f5","schema":{"type":"string","format":"ObjectId","pattern":"^[a-f0-9]{24}$"}}]}
>

</ParamsDetails>

<RequestSchema
title={"Body"}
body={undefined}
>

</RequestSchema>

<StatusCodes
id={undefined}
label={undefined}
responses={{"200":{"description":"Liste de documents obtenue avec succès","content":{"application/json":{"schema":{"type":"object","description":"Réponse paginée avec liste des documents de l'entreprise","properties":{"docs":{"type":"array","description":"Liste des documents de la page actuelle","items":{"type":"object","description":"Représente un document corporatif avec ses métadonnées.","properties":{"_id":{"type":"string","description":"Identifiant unique du document (MongoDB ObjectId)","format":"ObjectId","pattern":"^[a-f0-9]{24}$","example":"5f8d3b7a9c2d1e0f4a6b5c4d"},"name":{"type":"string","description":"Nom descriptif du document","minLength":3,"maxLength":100,"example":"Factura Q1 2023"},"status":{"type":"string","description":"État d'approbation du document","enum":["pending","approved","rejected"],"example":"approved"},"documentType":{"type":"string","description":"ID du type de document (référence à /documents/types)","format":"ObjectId","pattern":"^[a-f0-9]{24}$","example":"5f8d3b7a9c2d1e0f4a6b5c4e"},"version":{"type":"integer","description":"Numéro de version du document","minimum":1,"example":1},"filePaths":{"type":"array","description":"Chemins des fichiers dans S3/MinIO (relatifs au bucket)","items":{"type":"string"},"example":["documents/company1/factura_q1.pdf","documents/company1/anexo.pdf"]},"previousVersion":{"type":"string","description":"ID de la version précédente (null si c'est la première version)","format":"ObjectId","pattern":"^[a-f0-9]{24}$","nullable":true,"example":null},"createdAt":{"type":"string","description":"Date de création du document (UTC)","format":"date-time","example":"2023-04-15T09:30:00.000Z"},"updatedAt":{"type":"string","description":"Date de dernière mise à jour (UTC)","format":"date-time","example":"2023-04-20T14:15:00.000Z"}},"title":"Document"}},"totalDocs":{"type":"integer","description":"Nombre total de documents trouvés (toutes les pages)","example":15},"limit":{"type":"integer","description":"Limite de documents par page","example":10},"page":{"type":"integer","description":"Page actuelle","example":1},"totalPages":{"type":"integer","description":"Nombre total de pages disponibles","example":2}},"title":"DocumentsPaginatedResponse"},"example":{"docs":[{"_id":"5f8d3b7a9c2d1e0f4a6b5c4d","name":"Factura Q1 2023","status":"approved","documentType":"5f8d3b7a9c2d1e0f4a6b5c4e","version":1,"filePaths":["documents/company1/factura_q1.pdf"],"createdAt":"2023-04-15T09:30:00.000Z","updatedAt":"2023-04-20T14:15:00.000Z"},{"_id":"5f8d3b7a9c2d1e0f4a6b5c4f","name":"Contrato de Servicios","status":"pending","documentType":"5f8d3b7a9c2d1e0f4a6b5c50","version":2,"filePaths":["documents/company1/contrato_v2.pdf","documents/company1/anexo.pdf"],"createdAt":"2023-05-10T11:20:00.000Z","updatedAt":"2023-05-12T16:45:00.000Z"}],"totalDocs":15,"limit":10,"page":1,"totalPages":2}}}},"401":{"description":"Non autorisé - Jeton JWT invalide ou manquant","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["NO_TOKEN","TOKEN_NOT_VALID"]}}},"example":{"error":"NO_TOKEN"}}}},"403":{"description":"Interdit - Permissions insuffisantes","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"NOT_ALLOWED"}}}}}}
>

</StatusCodes>