153 lines
5.4 KiB
Markdown
153 lines
5.4 KiB
Markdown
# **Datenbank und Analytik-Funktionen**
|
|
|
|
Dieser Abschnitt konzentriert sich auf die Struktur der Datenbank sowie die Analyse- und Prognosefunktionen, die im Projekt verwendet werden.
|
|
|
|
---
|
|
|
|
## **1. Datenbankstruktur**
|
|
|
|
Das Datenbankschema wurde mit **Drizzle ORM** definiert und basiert auf SQLite. Die wichtigsten Tabellen und ihre Zwecke sind:
|
|
|
|
### **1.1. Tabellenübersicht**
|
|
|
|
#### **`user`**
|
|
- Speichert Benutzerinformationen.
|
|
- Enthält Rollen wie „admin“ oder „guest“ zur Verwaltung von Berechtigungen.
|
|
|
|
| **Feld** | **Typ** | **Beschreibung** |
|
|
|-------------------|------------|-------------------------------------------|
|
|
| `id` | `text` | Eindeutige ID des Benutzers. |
|
|
| `github_id` | `integer` | ID des Benutzers aus dem OAuth-Dienst. |
|
|
| `name` | `text` | Benutzername. |
|
|
| `displayName` | `text` | Angezeigter Name. |
|
|
| `email` | `text` | E-Mail-Adresse. |
|
|
| `role` | `text` | Benutzerrolle, Standardwert: „guest“. |
|
|
|
|
---
|
|
|
|
#### **`printer`**
|
|
- Beschreibt verfügbare Drucker und deren Status.
|
|
|
|
| **Feld** | **Typ** | **Beschreibung** |
|
|
|-------------------|------------|-------------------------------------------|
|
|
| `id` | `text` | Eindeutige Drucker-ID. |
|
|
| `name` | `text` | Name des Druckers. |
|
|
| `description` | `text` | Beschreibung oder Spezifikationen. |
|
|
| `status` | `integer` | Betriebsstatus (0 = inaktiv, 1 = aktiv). |
|
|
|
|
---
|
|
|
|
#### **`printJob`**
|
|
- Speichert Informationen zu Druckaufträgen.
|
|
|
|
| **Feld** | **Typ** | **Beschreibung** |
|
|
|-----------------------|---------------|-------------------------------------------------------|
|
|
| `id` | `text` | Eindeutige Auftrags-ID. |
|
|
| `printerId` | `text` | Verweis auf die ID des Druckers. |
|
|
| `userId` | `text` | Verweis auf die ID des Benutzers. |
|
|
| `startAt` | `integer` | Startzeit des Druckauftrags (Unix-Timestamp). |
|
|
| `durationInMinutes` | `integer` | Dauer des Druckauftrags in Minuten. |
|
|
| `comments` | `text` | Zusätzliche Kommentare. |
|
|
| `aborted` | `integer` | 1 = Abgebrochen, 0 = Erfolgreich abgeschlossen. |
|
|
| `abortReason` | `text` | Grund für den Abbruch (falls zutreffend). |
|
|
|
|
---
|
|
|
|
#### **`session`**
|
|
- Verwaltert Benutzer-Sitzungen und Ablaufzeiten.
|
|
|
|
| **Feld** | **Typ** | **Beschreibung** |
|
|
|-------------------|------------|-------------------------------------------|
|
|
| `id` | `text` | Eindeutige Sitzungs-ID. |
|
|
| `user_id` | `text` | Verweis auf die ID des Benutzers. |
|
|
| `expires_at` | `integer` | Zeitpunkt, wann die Sitzung abläuft. |
|
|
|
|
---
|
|
|
|
### **1.2. Relationen**
|
|
- `printer` → `printJob`: Druckaufträge sind an spezifische Drucker gebunden.
|
|
- `user` → `printJob`: Druckaufträge werden Benutzern zugewiesen.
|
|
- `user` → `session`: Sitzungen verknüpfen Benutzer mit Login-Details.
|
|
|
|
---
|
|
|
|
## **2. Analytik-Funktionen**
|
|
|
|
Das Projekt bietet verschiedene Analytik- und Prognosetools, um die Druckernutzung und Fehler zu überwachen.
|
|
|
|
### **2.1. Fehlerratenanalyse**
|
|
- Funktion: `calculatePrinterErrorRate` (in `src/utils/analytics/error-rate.ts`).
|
|
- Berechnet die prozentuale Fehlerrate für jeden Drucker basierend auf abgebrochenen Aufträgen.
|
|
|
|
Beispielausgabe:
|
|
```json
|
|
[
|
|
{ "name": "Drucker 1", "errorRate": 5.2 },
|
|
{ "name": "Drucker 2", "errorRate": 3.7 }
|
|
]
|
|
```
|
|
|
|
---
|
|
|
|
### **2.2. Abbruchgründe**
|
|
- Funktion: `calculateAbortReasonsCount` (in `src/utils/analytics/errors.ts`).
|
|
- Zählt die Häufigkeit der Abbruchgründe aus der Tabelle `printJob`.
|
|
|
|
Beispielausgabe:
|
|
```json
|
|
[
|
|
{ "abortReason": "Materialmangel", "count": 10 },
|
|
{ "abortReason": "Düsenverstopfung", "count": 7 }
|
|
]
|
|
```
|
|
|
|
---
|
|
|
|
### **2.3. Nutzung und Prognosen**
|
|
#### Nutzung:
|
|
- Funktion: `calculatePrinterUtilization` (in `src/utils/analytics/utilization.ts`).
|
|
- Berechnet die Nutzung der Drucker in Prozent.
|
|
|
|
Beispielausgabe:
|
|
```json
|
|
{ "printerId": "1", "utilizationPercentage": 85 }
|
|
```
|
|
|
|
#### Prognosen:
|
|
- Funktion: `forecastPrinterUsage` (in `src/utils/analytics/forecast.ts`).
|
|
- Nutzt historische Daten, um die erwartete Druckernutzung für kommende Tage/Wochen zu schätzen.
|
|
|
|
Beispielausgabe:
|
|
```json
|
|
[
|
|
{ "day": 1, "usageMinutes": 300 },
|
|
{ "day": 2, "usageMinutes": 200 }
|
|
]
|
|
```
|
|
|
|
---
|
|
|
|
### **2.4. Druckvolumen**
|
|
- Funktion: `calculatePrintVolumes` (in `src/utils/analytics/volume.ts`).
|
|
- Vergleicht die Anzahl der abgeschlossenen Druckaufträge für heute, diese Woche und diesen Monat.
|
|
|
|
Beispielausgabe:
|
|
```json
|
|
{
|
|
"today": 15,
|
|
"thisWeek": 90,
|
|
"thisMonth": 300
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## **3. Datenbankinitialisierung**
|
|
Die Datenbank wird über Skripte in der `package.json` initialisiert:
|
|
```bash
|
|
pnpm run db:clean # Datenbank und Migrationsordner löschen
|
|
pnpm run db:generate # Neues Schema generieren
|
|
pnpm run db:migrate # Migrationsskripte ausführen
|
|
```
|
|
|
|
Nächster Schritt: [=> Bereitstellungsdetails und Best Practices](./Bereitstellungsdetails.md) |