HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux mail.btech-izolacje.pl 5.15.0-140-generic #150-Ubuntu SMP Sat Apr 12 06:00:09 UTC 2025 x86_64
User: pewna6876 (1017)
PHP: 8.2.28
Disabled: NONE
Upload Files
File: //srv/rmgun_admin/admin-next/express/README.md
# Express Service - Weekly Registrations Export

## Opis
Serwis Express z schedulerem, który automatycznie eksportuje dane z kolekcji `registrations` do CSV co tydzień w niedzielę o 22:00 i wysyła je mailem do skonfigurowanych odbiorców.

## Funkcjonalności

### 1. Automatyczny Export z Emailem
- **Kiedy**: Każda niedziela o 22:00 (timezone: Europe/Warsaw)
- **Co**: Eksport wszystkich rejestracji z ostatniego tygodnia
- **Format**: CSV z polskimi nagłówkami
- **Lokalizacja**: `/express/exports/`
- **Email**: Automatyczne wysłanie CSV do skonfigurowanych odbiorców

### 2. Ręczny Export
- **Endpoint**: `GET http://localhost:4000/export/weekly`
- Umożliwia ręczne wygenerowanie eksportu

### 3. Lista Eksportów
- **Endpoint**: `GET http://localhost:4000/export/list`
- Zwraca listę wszystkich wygenerowanych plików CSV

### 4. Pobieranie Plików
- **Endpoint**: `GET http://localhost:4000/export/download/:filename`
- Pobiera konkretny plik CSV

## Struktura Danych (Registration)
```typescript
{
  id: string;
  fullName: string;
  permitNumber: string;
  address: string | null;
  hasPermit: boolean;
  instructorName: string;
  hasInstructorQualifications: boolean;
  active: boolean;
  createdAt: Timestamp;
  checkoutTime: Timestamp | null;
  tempId: string;
}
```

## Konfiguracja

### Zmienne Środowiskowe (wspólny plik .env w root)
```env
# Express Server
EXPRESS_PORT=4000
EXPRESS_NODE_ENV=production

# Scheduler
SCHEDULER_ENABLED=true
SCHEDULER_TIMEZONE=Europe/Warsaw

# Firebase Admin
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_CLIENT_EMAIL=your-client-email
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n..."

# Email Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
EMAIL_FROM="RMGun Range <noreply@rmgun.pl>"
# Odbiorcy (rozdzielone przecinkiem)
EMAIL_RECIPIENTS="admin1@example.com,admin2@example.com,admin3@example.com"
```

### Uruchomienie Lokalne
```bash
cd express
npm install
npm run dev
```

### Uruchomienie Docker
```bash
docker-compose up express-service
```

## Automatyczne Czyszczenie
- Stare eksporty (starsze niż 4 tygodnie) są automatycznie usuwane
- Czyszczenie odbywa się codziennie o 3:00 w nocy

## Endpointy API

| Metoda | Endpoint | Opis |
|--------|----------|------|
| GET | `/health` | Health check |
| GET | `/` | Informacje o serwisie |
| GET | `/export/weekly` | Ręczny export tygodniowy z emailem |
| GET | `/export/weekly?email=false` | Ręczny export bez emaila |
| GET | `/export/list` | Lista plików CSV |
| GET | `/export/download/:filename` | Pobierz plik CSV |
| GET | `/email/test` | Wyślij testowy email |

## Harmonogram

| Zadanie | Cron | Czas | Opis |
|---------|------|------|------|
| Weekly Export | `0 22 * * 0` | Niedziela 22:00 | Export danych z całego tygodnia |
| Cleanup | `0 3 * * *` | Codziennie 3:00 | Usuwanie starych eksportów |