# SFT Collect – Technische Dokumentation

## Architektur

SFT Collect ist analog zu **SFT Sign** in die bestehende Symfony-6.4-App integriert:

- Entities: `CollectCollection`, `CollectFile`, `CollectShareLink`, `CollectEvent`
- Service: `CollectService` (Speicher, Rechte, Soft-Delete, Audit, Ablauf)
- Owner-UI: `CollectController` unter `/app/{locale}/sammeln|collect|recopilar`
- Gast-UI: `CollectGuestController` unter `/collect/{locale}/{token}` (PUBLIC_ACCESS)
- Assets: Webpack-Entries `collect`, `collect_guest`
- Expiry: Console-Command `app:collect:expire`

## Wiederverwendete Bausteine

- Mandantentrennung über `globalId`
- Lizenz-Gate Pro/Business (wie Sign)
- Speicherpfad `%upload_directory%/{globalId}/collect/{publicId}/`
- E-Mail-Codes über `MessageService::sendSignAuthCodeEmail`
- Upload-Benachrichtigung über `MessageService::sendMessageAboutGuestUpload`
- Design/Nav analog Sign/Upload

## Annahmen / Einschränkungen (MVP)

- Kein ClamAV im Projekt → Status „available“ nach MIME-/Endungsprüfung; Quarantäne-Status vorbereitet
- Kein Symfony Messenger → Ablauf via Cron/`app:collect:expire`
- Soft-Delete-Frist: 30 Tage (Service-Parameter)
- QR-Codes clientseitig über QR-Server-API
- ZIP-Download für Gäste noch nicht asynchron implementiert (Flag vorhanden)
- SMS-Auth noch nicht angebunden (E-Mail-Code vorhanden)

## Schema

Tabellen:

- `collect_collection`
- `collect_file`
- `collect_share_link`
- `collect_event`

Anlegen (Dev):

```bash
docker exec ftc_io_app bash -c 'cd /var/www/html/ftc_io/ftc && php bin/console doctrine:schema:update --force'
```

Oder Migration erzeugen:

```bash
php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate
```

## Betrieb

```bash
php bin/console app:collect:expire
```

Cron empfohlen: stündlich.

## Bedienung (kurz)

1. Navigation **SFT Collect** → Neue Sammlung
2. Assistent: Grunddaten → Dateien → Rechte → Sicherheit → Benachrichtigungen → Aktivieren
3. Freigabelinks kopieren / QR nutzen
4. Gast öffnet Link, optional Passwort/E-Mail-Code
5. Upload/Download gemäß Linkrechten
6. Eigentümer: Papierkorb, Link widerrufen, verlängern, löschen
