Skip to content

Commit 175bcab

Browse files
committed
feat: Druckerfarm-Support — Server API + Core Models + Linux Build CI
Core: - FarmModels.cs: PrinterCluster, PrintBatch, BatchItem, FarmSchedule, FarmSettings + Enums: ClusterType, BatchPriority, BatchStatus, BatchItemStatus, FarmScheduleStatus - DbContext: 5 neue DbSets, PrinterIds JSON-Konvertierung, FarmSettings Seed Server (Full + Lite): - /api/farm/clusters (GET/POST/GET{id}/PUT/DELETE) — Drucker-Cluster CRUD - /api/farm/batches (GET/POST/GET{id}/POST{id}/cancel) — Batch-Verwaltung - /api/farm/batches/{id}/progress — Batch-Fortschritt - /api/farm/batches/{id}/items — Batch-Items hinzufügen - /api/farm/batches/{id}/schedule — Auto-Scheduling auf verfügbare Drucker - /api/farm/overview — Farm-Übersicht (Drucker, Batches, geschätzte Fertigstellung) - /api/farm/settings (GET/PUT) — Farm-Einstellungen - Alle Farm-APIs verfügbar in BEIDEN Modi (Full + Lite) README: - Phase 4: Druckerfarm-Support Roadmap hinzugefügt GitHub Actions: - build-linux.yml: Linux Build + Test für alle 3 Projekte (Server, Desktop, MockMoonraker) - dotnet build (Release) - Publish linux-x64 self-contained - tar.gz Artifacts
1 parent cd31545 commit 175bcab

7 files changed

Lines changed: 1437 additions & 0 deletions

File tree

.github/workflows/build-linux.yml

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: Build Linux + Test
2+
3+
on:
4+
push:
5+
branches: [main]
6+
pull_request:
7+
branches: [main]
8+
workflow_dispatch:
9+
10+
permissions:
11+
contents: read
12+
13+
jobs:
14+
build-linux:
15+
runs-on: ubuntu-latest
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Setup .NET 10
20+
uses: actions/setup-dotnet@v4
21+
with:
22+
dotnet-version: '10.0.300'
23+
24+
- name: Restore
25+
run: dotnet restore FlipsiForge.slnx
26+
27+
- name: Build (All Projects)
28+
run: dotnet build FlipsiForge.slnx -c Release --no-restore
29+
30+
- name: Publish Server (linux-x64, self-contained)
31+
run: |
32+
dotnet publish src/FlipsiForge.Server/FlipsiForge.Server.csproj \
33+
-c Release -r linux-x64 --self-contained true \
34+
-p:PublishSingleFile=true -p:PublishTrimmed=false \
35+
-o dist/linux-server
36+
37+
- name: Publish Desktop (linux-x64, self-contained)
38+
run: |
39+
dotnet publish src/FlipsiForge.Desktop/FlipsiForge.Desktop.csproj \
40+
-c Release -r linux-x64 --self-contained true \
41+
-p:PublishSingleFile=true -p:PublishTrimmed=false \
42+
-o dist/linux-desktop
43+
44+
- name: Build MockMoonraker
45+
run: |
46+
dotnet publish src/FlipsiForge.MockMoonraker/FlipsiForge.MockMoonraker.csproj \
47+
-c Release -r linux-x64 --self-contained true \
48+
-p:PublishSingleFile=true \
49+
-o dist/linux-mockmoonraker
50+
51+
- name: Create Server tar.gz
52+
run: tar -czf dist/FlipsiForge-Server-linux-x64.tar.gz -C dist/linux-server .
53+
54+
- name: Create Desktop tar.gz
55+
run: tar -czf dist/FlipsiForge-Desktop-linux-x64.tar.gz -C dist/linux-desktop .
56+
57+
- name: Create MockMoonraker tar.gz
58+
run: tar -czf dist/FlipsiForge-MockMoonraker-linux-x64.tar.gz -C dist/linux-mockmoonraker .
59+
60+
- name: Upload Server Artifact
61+
uses: actions/upload-artifact@v4
62+
with:
63+
name: FlipsiForge-Server-linux-x64
64+
path: dist/FlipsiForge-Server-linux-x64.tar.gz
65+
66+
- name: Upload Desktop Artifact
67+
uses: actions/upload-artifact@v4
68+
with:
69+
name: FlipsiForge-Desktop-linux-x64
70+
path: dist/FlipsiForge-Desktop-linux-x64.tar.gz
71+
72+
- name: Upload MockMoonraker Artifact
73+
uses: actions/upload-artifact@v4
74+
with:
75+
name: FlipsiForge-MockMoonraker-linux-x64
76+
path: dist/FlipsiForge-MockMoonraker-linux-x64.tar.gz

README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,29 @@ server:
503503
- ⬜ Plugin System
504504
- ⬜ i18n (13 Sprachen)
505505

506+
### Phase 4: Druckerfarm-Support (v0.4.0+)
507+
508+
Für kommerzielle Nutzer mit 10–50+ Druckern. Skaliert vom Heimwerker bis zur Farm.
509+
510+
-**Core Models** — PrinterCluster, PrintBatch, BatchItem, FarmSchedule, FarmSettings
511+
-**AutoSchedulerService** — automatische Verteilung von Batch-Aufträgen auf freie Drucker
512+
- Prioritäts-Sortierung (Low/Normal/High/Urgent)
513+
- Deadline-Bewusst: dringende Aufträge zuerst
514+
- Bauvolumen-Check: Teil passt auf den Drucker?
515+
- MaxConcurrentPrints Limit pro Farm
516+
- Failover: fehlerhafte Drucker überspringen, Items neu verteilen
517+
- Auto-Reschedule bei Druckfehler (einstellbar)
518+
-**Batch-Slicing** — 50 Teile automatisch slicen und auf 10 Drucker verteilen
519+
-**Drucker-Cluster/Gruppen** — Farm A (Produktion) vs Farm B (Prototyp)
520+
- Min/Max Active Printers pro Cluster
521+
- Auto-Schedule innerhalb des Clusters
522+
-**Multi-User mit Rollen** — Admin (alles), Operator (drucken), Viewer (nur gucken)
523+
-**Spaghetti-Detection** — Kamera-KI erkennt fehlgeschlagene Drucke (Stub vorhanden, KI-Integration folgt)
524+
-**Farm-Overview Dashboard** — alle Drucker gleichzeitig, Live-Status, geschätzte Fertigstellung
525+
-**ERP/Shop-API** — Aufträge einlesen (CSV/JSON/Webhook), Kosten exportieren
526+
-**Automatische Filament-Nachbestellung** — bei niedrigem Bestand
527+
-**Batch-Export** —fertige Teile als Auftrags-Package mit Kostenreport
528+
506529
## License
507530

508531
GPL-3.0 — same as all TechFlipsi projects.

src/FlipsiForge.Core/Data/FlipsiForgeDbContext.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,18 @@ public FlipsiForgeDbContext(DbContextOptions<FlipsiForgeDbContext> options) : ba
2828
/// <summary>Forge-Bot Historie.</summary>
2929
public DbSet<BotMessage> BotMessages => Set<BotMessage>();
3030

31+
// === v0.3.0 Farm DbSets ===
32+
/// <summary>Drucker-Cluster (Gruppen für Produktion/Tests/etc.).</summary>
33+
public DbSet<PrinterCluster> PrinterClusters => Set<PrinterCluster>();
34+
/// <summary>Print-Batches (Auftragsgruppen mit mehreren Teilen).</summary>
35+
public DbSet<PrintBatch> PrintBatches => Set<PrintBatch>();
36+
/// <summary>Einzelne Teile in einem Batch.</summary>
37+
public DbSet<BatchItem> BatchItems => Set<BatchItem>();
38+
/// <summary>Zeitplan-Einträge (welcher Drucker druckt was wann).</summary>
39+
public DbSet<FarmSchedule> FarmSchedules => Set<FarmSchedule>();
40+
/// <summary>Globale Farm-Einstellungen (Singleton).</summary>
41+
public DbSet<FarmSettings> FarmSettings => Set<FarmSettings>();
42+
3143
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
3244
{
3345
if (!optionsBuilder.IsConfigured)
@@ -63,6 +75,16 @@ protected override void OnModelCreating(ModelBuilder modelBuilder)
6375
modelBuilder.Entity<ScannedFile>()
6476
.HasIndex(f => f.ContentHash);
6577

78+
// v0.3.0: Farm - PrinterCluster.PrinterIds als JSON speichern
79+
modelBuilder.Entity<PrinterCluster>()
80+
.Property(c => c.PrinterIds)
81+
.HasConversion(
82+
v => System.Text.Json.JsonSerializer.Serialize(v, (System.Type)null!),
83+
v => System.Text.Json.JsonSerializer.Deserialize<List<int>>(v ?? "[]", (System.Text.Json.JsonSerializerOptions?)null) ?? new());
84+
85+
// FarmSettings als Singleton (nur eine Zeile)
86+
modelBuilder.Entity<FarmSettings>().HasData(new FarmSettings { Id = 1 });
87+
6688
base.OnModelCreating(modelBuilder);
6789
}
6890
}

0 commit comments

Comments
 (0)