Features: - Backend: Node.js/Express mit MySQL/MariaDB - Frontend: Vue.js 3 mit Composition API - UTC-Zeithandling für korrekte Zeiterfassung - Timewish-basierte Überstundenberechnung - Wochenübersicht mit Urlaubs-/Krankheits-/Feiertagshandling - Bereinigtes Arbeitsende (Generell/Woche) - Überstunden-Offset für historische Daten - Fixed Layout mit scrollbarem Content - Kompakte UI mit grünem Theme
146 lines
2.1 KiB
Markdown
146 lines
2.1 KiB
Markdown
# TimeClock Backend API v3.0
|
|
|
|
Node.js/Express Backend für die TimeClock Zeiterfassungsanwendung.
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
npm install
|
|
```
|
|
|
|
## Konfiguration
|
|
|
|
Erstellen Sie eine `.env` Datei im Backend-Verzeichnis:
|
|
|
|
```env
|
|
PORT=3000
|
|
NODE_ENV=development
|
|
```
|
|
|
|
## Starten
|
|
|
|
### Entwicklung (mit Auto-Reload)
|
|
```bash
|
|
npm run dev
|
|
```
|
|
|
|
### Produktion
|
|
```bash
|
|
npm start
|
|
```
|
|
|
|
## API-Dokumentation
|
|
|
|
### Base URL
|
|
```
|
|
http://localhost:3010/api
|
|
```
|
|
|
|
### Endpunkte
|
|
|
|
#### Health Check
|
|
```
|
|
GET /api/health
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"status": "ok",
|
|
"message": "TimeClock API v3.0.0",
|
|
"timestamp": "2025-10-15T10:00:00.000Z"
|
|
}
|
|
```
|
|
|
|
#### Alle Zeiteinträge abrufen
|
|
```
|
|
GET /api/time-entries
|
|
```
|
|
|
|
#### Einzelnen Zeiteintrag abrufen
|
|
```
|
|
GET /api/time-entries/:id
|
|
```
|
|
|
|
#### Neuen Zeiteintrag erstellen
|
|
```
|
|
POST /api/time-entries
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"project": "Mein Projekt",
|
|
"description": "Beschreibung"
|
|
}
|
|
```
|
|
|
|
#### Zeiteintrag aktualisieren
|
|
```
|
|
PUT /api/time-entries/:id
|
|
Content-Type: application/json
|
|
|
|
{
|
|
"endTime": "2025-10-15T10:30:00.000Z",
|
|
"description": "Aktualisierte Beschreibung"
|
|
}
|
|
```
|
|
|
|
#### Zeiteintrag löschen
|
|
```
|
|
DELETE /api/time-entries/:id
|
|
```
|
|
|
|
#### Statistiken abrufen
|
|
```
|
|
GET /api/time-entries/stats/summary
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"totalEntries": 10,
|
|
"completedEntries": 8,
|
|
"runningEntries": 2,
|
|
"totalHours": "42.50",
|
|
"totalSeconds": 153000,
|
|
"projectStats": {
|
|
"Projekt A": {
|
|
"duration": 86400,
|
|
"count": 5
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Datenmodell
|
|
|
|
### TimeEntry
|
|
|
|
```javascript
|
|
{
|
|
id: Number,
|
|
startTime: String (ISO 8601),
|
|
endTime: String (ISO 8601) | null,
|
|
description: String,
|
|
project: String,
|
|
duration: Number (Sekunden) | null,
|
|
isRunning: Boolean
|
|
}
|
|
```
|
|
|
|
## Dependencies
|
|
|
|
- **express** - Web-Framework
|
|
- **cors** - CORS-Middleware
|
|
- **helmet** - Sicherheits-Middleware
|
|
- **morgan** - HTTP Request Logger
|
|
- **dotenv** - Environment Variables
|
|
|
|
## Entwicklung
|
|
|
|
Der aktuelle Stand verwendet In-Memory-Speicher. Für eine Produktionsumgebung sollte eine Datenbank integriert werden:
|
|
|
|
- MongoDB mit mongoose
|
|
- PostgreSQL mit pg/sequelize
|
|
- MySQL mit mysql2/sequelize
|
|
|