2026-09-28 19:09:09 +02:00
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
|
|
|
|
namespace GhostImageManager.Data;
|
|
|
|
|
|
|
|
|
|
public class AppDbContext : DbContext
|
|
|
|
|
{
|
|
|
|
|
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public DbSet<ManagedImage> ManagedImages => Set<ManagedImage>();
|
|
|
|
|
|
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
|
|
|
{
|
|
|
|
|
modelBuilder.Entity<ManagedImage>(entity =>
|
|
|
|
|
{
|
|
|
|
|
entity.HasKey(e => e.Id);
|
|
|
|
|
entity.HasIndex(e => e.GhostImageUrl);
|
|
|
|
|
entity.HasIndex(e => e.GhostInstanceId);
|
|
|
|
|
entity.HasIndex(e => e.FileName);
|
|
|
|
|
entity.HasIndex(e => e.AuthorId);
|
|
|
|
|
entity.HasIndex(e => e.Theme);
|
|
|
|
|
entity.HasIndex(e => e.CaptureDate);
|
|
|
|
|
|
|
|
|
|
entity.Property(e => e.GhostImageUrl).HasMaxLength(2000);
|
|
|
|
|
entity.Property(e => e.RelativePath).HasMaxLength(1000);
|
|
|
|
|
entity.Property(e => e.FileName).HasMaxLength(500);
|
|
|
|
|
entity.Property(e => e.GhostInstanceId).HasMaxLength(100);
|
|
|
|
|
entity.Property(e => e.AuthorId).HasMaxLength(100);
|
|
|
|
|
entity.Property(e => e.AuthorName).HasMaxLength(200);
|
|
|
|
|
entity.Property(e => e.CameraMake).HasMaxLength(200);
|
|
|
|
|
entity.Property(e => e.CameraModel).HasMaxLength(200);
|
|
|
|
|
entity.Property(e => e.Lens).HasMaxLength(200);
|
|
|
|
|
entity.Property(e => e.Aperture).HasMaxLength(50);
|
|
|
|
|
entity.Property(e => e.ShutterSpeed).HasMaxLength(50);
|
|
|
|
|
entity.Property(e => e.Iso).HasMaxLength(50);
|
|
|
|
|
entity.Property(e => e.FocalLength).HasMaxLength(50);
|
|
|
|
|
entity.Property(e => e.Theme).HasMaxLength(500);
|
Importer: Kategorien als Tags, Keywords als Meta, Bilder vollständig nach Ghost
Importer
- Kategorien werden als Ghost-Tags angelegt; bei mehreren wird die primäre
abgefragt, die übrigen folgen als sekundäre Tags
- Schlagwörter werden ohne Nachfrage als <meta name="keywords"> in den
Code-Injection-Header geschrieben (Ghost kennt kein meta_keywords-Feld)
- Tag-Suche lädt alle Seiten, HTML-kodierte Namen werden dekodiert
Bilder
- Varianten eines WordPress-Bildes (Original, -scaled, -WxH, ?w=) werden
zusammengefasst, einmal geladen und im HTML alle umgeschrieben
- src bei Einzelbildern setzen, srcset/sizes entfernen
- Cache-Schlüssel ist der Pfad statt nur der Dateiname; Dateinamen eindeutig
- ZIP-Export enthält Cache-Bilder und feature_image
- Warnung bei Bild-URLs, die weiter auf WordPress zeigen
- Maximale Bildgröße 2048 px
Plugin / GhostImageManager
- Plugin liefert primäre Kategorie
- Kategorie- und Keyword-Felder samt Filter im Image Manager
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 12:26:18 +02:00
|
|
|
entity.Property(e => e.Category).HasMaxLength(200);
|
|
|
|
|
entity.Property(e => e.CategorySecondary).HasMaxLength(200);
|
|
|
|
|
entity.Property(e => e.Keywords).HasMaxLength(500);
|
2026-09-28 19:09:09 +02:00
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|