Add Timesheets API with file upload and role-based access
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>
This commit is contained in:
125
CLEAN_START_GUIDE.md
Normal file
125
CLEAN_START_GUIDE.md
Normal file
@@ -0,0 +1,125 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user