Backend Features:
- Timesheets database table (id, userId, fileName, filePath, fileType, fileSize, year, month, timestamps)
- File upload with multer (memory storage, 10MB limit, PDF/Excel validation)
- Structured file storage: uploads/timesheets/{userId}/{year}/{month}/
- RESTful API endpoints:
* POST /api/timesheets/upload - Upload timesheet
* GET /api/timesheets/my - Get user's timesheets (with filters)
* GET /api/timesheets/all - Get all timesheets (admin only)
* GET /api/timesheets/:id/download - Download file
* DELETE /api/timesheets/:id - Delete timesheet
- Role-based permissions: users access own files, admins access all
- Proper error handling and file cleanup on errors
- Database migration for timesheets table
Technical:
- Uses req.user.role for permission checks
- Automatic directory creation for user/year/month structure
- Blob URL cleanup and proper file handling
- Integration with existing auth middleware
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
126 lines
3.0 KiB
Markdown
126 lines
3.0 KiB
Markdown
# CLEAN START - Kompletný Reset CRM Systému
|
||
|
||
## Problém
|
||
- Staré/archivované emaily sa syncujú aj keď nie sú v Thunderbirde
|
||
- Emaily majú zlý contactId
|
||
- Kontakty sa nedajú vymazať cez UI
|
||
|
||
## Riešenie: KOMPLETNÝ RESET
|
||
|
||
### Krok 1: Vyčisti databázu
|
||
|
||
```bash
|
||
node src/scripts/CLEAN_EVERYTHING.js
|
||
```
|
||
|
||
Toto vymaže:
|
||
- ✅ Všetky emaily
|
||
- ✅ Všetky kontakty
|
||
|
||
### Krok 2: Teraz môžeš pridať kontakty NANOVO
|
||
|
||
Nový sync bude:
|
||
- ✅ IBA z Inboxu a Sent foldra (nie Archive, Trash, Drafts)
|
||
- ✅ IBA emaily z posledných 30 dní
|
||
- ✅ IBA emaily FROM alebo TO daný kontakt
|
||
|
||
### Krok 3: Ako to funguje teraz
|
||
|
||
Keď pridáš kontakt (napr. `martin@slovensko.ai`):
|
||
|
||
**SYNCNE:**
|
||
- ✅ Emaily FROM martin@slovensko.ai → riso@slovensko.ai (prijaté)
|
||
- ✅ Emaily FROM riso@slovensko.ai → martin@slovensko.ai (odoslané)
|
||
- ✅ Iba z Inbox a Sent
|
||
- ✅ Iba z posledných 30 dní
|
||
|
||
**NÉSYNCNE:**
|
||
- ❌ Emaily od iných ľudí
|
||
- ❌ Staré archivované emaily
|
||
- ❌ Emaily z Trash/Archive/Drafts
|
||
- ❌ Emaily staršie ako 30 dní
|
||
|
||
## Prečo sa fetchovali staré emaily?
|
||
|
||
JMAP API fetchuje **zo SERVERA, nie z Thunderbirdu**!
|
||
|
||
- Thunderbird je len klient
|
||
- Server (truemail.sk) má všetky emaily (aj zmazané, archivované)
|
||
- Starý buggy kód fetchoval zo všetkých mailboxov bez filtra
|
||
|
||
## Nové nastavenia syncу
|
||
|
||
Môžeš zmeniť v kóde:
|
||
|
||
```javascript
|
||
// V contact.service.js, line 56
|
||
await syncEmailsFromSender(jmapConfig, emailAccountId, newContact.id, email, {
|
||
limit: 50, // Max počet emailov
|
||
daysBack: 30 // Dni späť (30 = posledný mesiac)
|
||
});
|
||
```
|
||
|
||
**Zmeniť na:**
|
||
- `daysBack: 7` - Iba posledný týždeň
|
||
- `daysBack: 90` - Posledné 3 mesiace
|
||
- `limit: 20` - Max 20 emailov
|
||
|
||
## Alternatíva: Manuálne vyčistenie cez DB
|
||
|
||
Ak nechceš používať script:
|
||
|
||
```sql
|
||
-- Vymaž všetky emaily
|
||
DELETE FROM emails;
|
||
|
||
-- Vymaž všetky kontakty
|
||
DELETE FROM contacts;
|
||
```
|
||
|
||
## Po vyčistení
|
||
|
||
1. **Refreshni frontend** (F5)
|
||
2. **Pridaj kontakty** cez Inbox page
|
||
3. **Počkaj** kým sa syncnú (vidíš loading)
|
||
4. **Skontroluj** že sú iba správne emaily
|
||
|
||
## Ak sa stále fetchujú zlé emaily
|
||
|
||
Znamená to že sú SKUTOČNE v Inbox/Sent na serveri.
|
||
|
||
Choď do Thunderbirdu a:
|
||
1. Presuň nechcené emaily do Archive
|
||
2. Alebo ich TRVALO vymaž (Shift+Delete)
|
||
3. WAIT 5 min (server sa musí syncnúť)
|
||
4. Potom spusti CLEAN_EVERYTHING.js
|
||
5. A pridaj kontakty znova
|
||
|
||
## Výhody nového systému
|
||
|
||
✅ Žiadne staré smeti
|
||
✅ Iba aktuálna komunikácia
|
||
✅ Správne groupovanie
|
||
✅ Rýchlejší sync
|
||
✅ Menšia databáza
|
||
|
||
## Testing
|
||
|
||
Po resete otestuj:
|
||
|
||
1. **Pridaj kontakt** (napr. foxerdxd@gmail.com)
|
||
2. **Skontroluj koľko emailov** sa synclo
|
||
3. **Over že sú správne** (FROM alebo TO ten kontakt)
|
||
4. **Pošli nový email** cez CRM
|
||
5. **Over že sa zobrazí** v konverzácii
|
||
|
||
## Ak niečo nejde
|
||
|
||
Check logy pri sync:
|
||
```
|
||
Filtering: last 30 days, from Inbox/Sent only
|
||
Found X emails with contact@email.com
|
||
```
|
||
|
||
Ak je X príliš veľa → zníž `daysBack`
|
||
Ak je X 0 → zväčši `daysBack` alebo over že Inbox má emaily
|