Zum Hauptinhalt springen

List company documents

GET 

/company/documents

Ruft eine paginierte Liste aller Dokumente ab, die mit dem Unternehmen des authentifizierten Benutzers verknüpft sind.

Ablauf:

  1. Authentifizierung über gültiges JWT mit der Rolle Manager oder höher
  2. Validierung der Paginierungsparameter
  3. Optionale Filterung nach Dokumenttyp
  4. Paginierte Datenbankabfrage (nur die letzte Version jedes Dokuments)
  5. Rückgabe der Dokumente mit Metadaten und Dateipfaden

Zugriffsvoraussetzungen:

  • Authentifizierung: Gültiges JWT (Bearer-Token)
  • Mindestrolle: Unternehmensmanager (isGestor)
  • Berechtigungen: Zugriff nur auf Dokumente des eigenen Unternehmens

Typische Anwendungsfälle:

  • Abrufen von Rechnungen und Verträgen des Unternehmens
  • Filtern von Dokumenten nach Kategorie (documentType)
  • Prüfen des Genehmigungsstatus ausstehender Dokumente
  • Zugriff auf den Verlauf der letzten Versionen

Dokumentenstatus:

  • pending: Ausstehende Prüfung durch die Verwaltung
  • approved: Genehmigt und verfügbar zur Nutzung
  • rejected: Abgelehnt mit spezifiziertem Grund

Wichtige Hinweise:

  • Gibt nur die letzte Version jedes Dokuments zurück (schließt veraltete Versionen mit newVersion: null aus)
  • Alle Zeitstempel sind im UTC-Format
  • Maximal 100 Dokumente pro Seite
  • Sortierung nach Erstellungsdatum absteigend (neueste zuerst)
  • Dateien werden in S3/MinIO mit relativen Pfaden in filePaths gespeichert

Beispielanfrage:

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

Beispiel für eine erfolgreiche Antwort:

\{
docs: [
\{
_id: 5f8d3b7a9c2d1e0f4a6b5c4d,
name: Rechnung

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

<ParamsDetails
parameters={[{"name":"page","in":"query","description":"Seitennummer für die Navigation in paginierten Ergebnissen.\nNützlich zur Aufteilung der Anzeige bei vielen Dokumenten.","required":false,"example":1,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","description":"Maximale Anzahl der Dokumente, die pro Seite zurückgegeben werden sollen.\nErmöglicht einen Ausgleich zwischen Leistung (niedrige Werte) und Komfort (hohe Werte).","required":false,"example":25,"schema":{"type":"integer","minimum":1,"maximum":100,"default":10}},{"name":"documentType","in":"query","description":"Filtere Dokumente nach einem bestimmten Typ mithilfe der MongoDB-ID.\nDie verfügbaren Typen werden vom Endpunkt /documents/types abgerufen.\nNützlich, um nur Rechnungen, Verträge oder andere Kategorien anzuzeigen.","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 der Dokumente erfolgreich abgerufen","content":{"application/json":{"schema":{"type":"object","description":"Seitenweise Antwort mit einer Liste der Unternehmensdokumente","properties":{"docs":{"type":"array","description":"Liste der Dokumente der aktuellen Seite","items":{"type":"object","description":"Stellt ein Unternehmensdokument mit seinen Metadaten dar.","properties":{"_id":{"type":"string","description":"Eindeutige Dokumentenkennung (MongoDB ObjectId)","format":"ObjectId","pattern":"^[a-f0-9]{24}$","example":"5f8d3b7a9c2d1e0f4a6b5c4d"},"name":{"type":"string","description":"Beschreibender Dokumentname","minLength":3,"maxLength":100,"example":"Factura Q1 2023"},"status":{"type":"string","description":"Genehmigungsstatus des Dokuments","enum":["pending","approved","rejected"],"example":"approved"},"documentType":{"type":"string","description":"Dokumenttyp-ID (Referenz auf /documents/types)","format":"ObjectId","pattern":"^[a-f0-9]{24}$","example":"5f8d3b7a9c2d1e0f4a6b5c4e"},"version":{"type":"integer","description":"Dokumentversionsnummer","minimum":1,"example":1},"filePaths":{"type":"array","description":"Dateipfade in S3/MinIO (relativ zum Bucket)","items":{"type":"string"},"example":["documents/company1/factura_q1.pdf","documents/company1/anexo.pdf"]},"previousVersion":{"type":"string","description":"ID der vorherigen Version (null, wenn es die erste Version ist)","format":"ObjectId","pattern":"^[a-f0-9]{24}$","nullable":true,"example":null},"createdAt":{"type":"string","description":"Erstellungsdatum des Dokuments (UTC)","format":"date-time","example":"2023-04-15T09:30:00.000Z"},"updatedAt":{"type":"string","description":"Datum der letzten Aktualisierung (UTC)","format":"date-time","example":"2023-04-20T14:15:00.000Z"}},"title":"Document"}},"totalDocs":{"type":"integer","description":"Gesamtzahl der gefundenen Dokumente (alle Seiten)","example":15},"limit":{"type":"integer","description":"Grenze der Dokumente pro Seite","example":10},"page":{"type":"integer","description":"Aktuelle Seite","example":1},"totalPages":{"type":"integer","description":"Gesamtzahl der verfügbaren Seiten","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":"Nicht autorisiert - Ungültiges oder fehlendes JWT-Token","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["NO_TOKEN","TOKEN_NOT_VALID"]}}},"example":{"error":"NO_TOKEN"}}}},"403":{"description":"Verboten - Unzureichende Berechtigungen","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"}}},"example":{"error":"NOT_ALLOWED"}}}}}}
>

</StatusCodes>