Ett fullstack-projekt som konverterar iCal-kalendrar till förenklade arbetsdygn (06:00-06:00).
- Arbetsdygnslogik: Konverterar events till 06:00-06:00 format enligt svensk tidszon
- Filtrering: Tar automatiskt bort events som innehåller "Work reduction", "Holiday", "LoA", "Care of Child", eller "Sick"
- Google Calendar-integration: Direkt länk för att lägga till i Google Calendar
- Automatisk uppdatering: Backend-endpoint för att uppdatera alla kalendrar
- Status-övervakning: Realtidsövervakning av generering och uppdateringar
- Node.js med ES-moduler
- Express.js för API
- MongoDB med Mongoose
- ical.js för iCal-parsing
- Luxon för tidshantering
- Axios för HTTP-requests
- React med TypeScript
- Vite som build-verktyg
- Material-UI (MUI) för styling och komponenter
- Node.js (LTS version)
- MongoDB (lokal installation eller MongoDB Atlas)
- Navigera till backend-mappen:
cd backend- Installera dependencies:
npm install- Konfigurera miljövariabler i
.env:
MONGODB_URI=mongodb://localhost:27017/icalconverter
PORT=3000
CLIENT_URL=http://localhost:5173
UPDATE_API_KEY=your-secret-update-key-here
TIMEZONE=Europe/Stockholm
UPDATE_INTERVAL=3600000- Starta servern:
npm run dev- Navigera till frontend-mappen:
cd frontend- Installera dependencies:
npm install- Starta utvecklingsservern:
npm run devHälsokoll för API:et.
Genererar en förenklad iCal-kalender.
Body:
{
"url": "https://example.com/calendar.ics",
"summary": "Jobb"
}Response:
{
"apiUrl": "http://localhost:3000/calendar/abc123",
"googleLink": "https://www.google.com/calendar/render?cid=...",
"uniqueId": "abc123",
"lastUpdated": "2024-01-01T12:00:00.000Z"
}Hämtar den förenklade iCal-filen.
Uppdaterar en specifik batch av kalendrar (för Vercel timeout-hantering).
Parametrar:
apiKey: API-nyckel för autentiseringbatch: Batch-nummer (börjar från 0, default: 0)batchSize: Antal kalendrar per batch (default: 3)
Svar:
{
"message": "Batch 1/3 uppdaterad",
"totalCalendars": 10,
"totalBatches": 4,
"currentBatch": 0,
"nextBatch": 1,
"completed": false,
"result": {
"processed": 3,
"updated": 2,
"errors": ["Fel vid uppdatering av abc123: Timeout"],
"batchNumber": 0,
"duration": "8500ms",
"calendarsInBatch": 3
}
}Startar automatisk uppdatering av alla kalendrar via batch-processing.
Parametrar:
apiKey: API-nyckel för autentisering
Svar:
{
"message": "Batch-uppdatering startad",
"status": "started"
}Returnerar status för uppdateringsprocessen.
Returnerar status för genereringsprocessen.
Projektet implementerar en specifik logik för att konvertera kalenderhändelser till "arbetsdygn":
- Arbetsdygn definieras som 06:00-06:00 (nästa dag)
- Tidszon: Europe/Stockholm (konfigurerbar)
- Uppdelning: Events som sträcker sig över 06:00-gränsen delas upp
- Aggregering: Alla events inom samma arbetsdygn slås samman till ett event
- Filtrering: Events som innehåller följande nyckelord i titel eller beskrivning tas bort:
- "Work reduction"
- "Holiday"
- "LoA" (Leave of Absence)
- "Care of Child"
- "Sick"
Om du har följande events:
- Event 1: 08:00-12:00 (måndag)
- Event 2: 13:00-17:00 (måndag)
- Event 3: 22:00 (måndag) - 02:00 (tisdag)
Blir resultatet:
- Arbetsdygn måndag: 08:00-17:00
- Arbetsdygn tisdag: 22:00-02:00
- CORS konfigurerat för att endast tillåta frontend-origin
- API-nyckel krävs för uppdateringsendpoint
- Felmeddelanden maskeras i production
cd backend
npm run dev # Använder --watch för automatisk omstartcd frontend
npm run dev # Hot reload aktiverat# Frontend
cd frontend
npm run build
# Backend
cd backend
npm start| Variabel | Beskrivning | Default |
|---|---|---|
MONGODB_URI |
MongoDB-anslutningssträng | mongodb://localhost:27017/icalconverter |
PORT |
Backend-port | 3000 |
CLIENT_URL |
Frontend-URL för CORS | http://localhost:5173 |
UPDATE_API_KEY |
Hemlig nyckel för uppdateringar | - |
TIMEZONE |
Tidszon för arbetsdygn | Europe/Stockholm |
UPDATE_INTERVAL |
Uppdateringsintervall (ms) | 3600000 |
-
MongoDB-anslutning misslyckas
- Kontrollera att MongoDB körs
- Verifiera MONGODB_URI i .env
-
CORS-fel
- Kontrollera CLIENT_URL i backend .env
- Se till att frontend körs på rätt port
-
iCal-parsing misslyckas
- Kontrollera att URL:en är giltig
- Testa med en enkel iCal-fil först
-
MUI TypeScript-fel
- Kör
npm installi frontend-mappen - Felen försvinner när MUI-dependencies är installerade
- Kör
- Skapa ett nytt Vercel-projekt för backend
- Konfigurera miljövariabler i Vercel Dashboard:
MONGODB_URI: Din MongoDB Atlas connection stringCLIENT_URL: Frontend-URL (t.ex.https://icalconverter.torkelsson.online)UPDATE_API_KEY: En säker slumpmässig strängTIMEZONE:Europe/Stockholm
- Deploy med:
vercel --prod
- Skapa ett nytt Vercel-projekt för frontend
- Uppdatera
.envmed backend-URL:VITE_API_URL=https://your-backend-domain.vercel.app - Deploy med:
vercel --prod
Backend är konfigurerat för att tillåta följande origins:
https://icalconverter.torkelsson.online(production frontend)http://localhost:5173(development frontend)http://localhost:3000(development backend)
För att lägga till fler domäner, uppdatera allowedOrigins i backend/api/index.js.
MONGODB_URI=mongodb+srv://user:password@cluster.mongodb.net/icalconverter
CLIENT_URL=https://icalconverter.torkelsson.online
UPDATE_API_KEY=your-secure-random-key
TIMEZONE=Europe/Stockholm
NODE_ENV=production
VITE_API_URL=https://calendar.torkelsson.online
Vercel har en 10-sekunders timeout för serverless functions. För att hantera detta använder systemet batch-processing:
# Uppdatera första batchen (0-2 kalendrar)
curl "https://calendar.torkelsson.online/update-calendars?apiKey=YOUR_KEY&batch=0&batchSize=3"
# Uppdatera andra batchen (3-5 kalendrar)
curl "https://calendar.torkelsson.online/update-calendars?apiKey=YOUR_KEY&batch=1&batchSize=3"# Startar automatisk uppdatering av alla batches
curl "https://calendar.torkelsson.online/update-all-batches?apiKey=YOUR_KEY"Optimeringar för timeout:
- Batch-storlek: 3 kalendrar per batch
- Parallell processing inom batch
- 8-sekunders timeout per iCal-fetch
- 1-sekunds paus mellan batches
- MongoDB
.lean()för bättre prestanda
ISC