SplatDev.DigitalBookCurator.Core
1.0.2
dotnet add package SplatDev.DigitalBookCurator.Core --version 1.0.2
NuGet\Install-Package SplatDev.DigitalBookCurator.Core -Version 1.0.2
<PackageReference Include="SplatDev.DigitalBookCurator.Core" Version="1.0.2" />
<PackageVersion Include="SplatDev.DigitalBookCurator.Core" Version="1.0.2" />
<PackageReference Include="SplatDev.DigitalBookCurator.Core" />
paket add SplatDev.DigitalBookCurator.Core --version 1.0.2
#r "nuget: SplatDev.DigitalBookCurator.Core, 1.0.2"
#:package SplatDev.DigitalBookCurator.Core@1.0.2
#addin nuget:?package=SplatDev.DigitalBookCurator.Core&version=1.0.2
#tool nuget:?package=SplatDev.DigitalBookCurator.Core&version=1.0.2
SplatDev.DigitalBookCurator.Core
Standalone domain library for e-book and PDF management backed by EF Core + Sqlite.
Install
dotnet add package SplatDev.DigitalBookCurator.Core
What's implemented
CuratorDbContext— EF CoreDbContexttargeting Sqlite with a soft-delete query filter onBook.Bookmodel — Title, Author, FileName, FilePath, FileSize, FileType, Isbn, Description, CoverImagePath, PageCount, CreatedAt, ModifiedAt, IsDeleted.IBookRepository+BookRepository— async CRUD, paged filtering with sort, soft delete.FileManagerService— file storage with batch PDF import into the database.PagedFilter—SearchTerm,SortBy,SortDescending,Page,PageSize.PagedResults<T>— paginated response withItems,TotalCount,Page,PageSize,TotalPages.BookImportResult— per-file import outcome.CuratorSettings— configuration POCO (Origin,Destination,DeleteEmptyFolders).
Configuration
Bind CuratorSettings from your app configuration:
{
"CuratorSettings": {
"Origin": "/path/to/incoming",
"Destination": "/path/to/library",
"DeleteEmptyFolders": true
}
}
services.Configure<CuratorSettings>(configuration.GetSection("CuratorSettings"));
Usage
Register the DbContext and repository:
builder.Services.AddDbContext<CuratorDbContext>(options =>
options.UseSqlite("Data Source=curator.db"));
builder.Services.AddScoped<IBookRepository, BookRepository>();
builder.Services.AddScoped<FileManagerService>();
Paged query example:
var filter = new PagedFilter
{
Page = 1,
PageSize = 20,
SearchTerm = "design patterns",
SortBy = "title"
};
var results = await repository.GetFilteredBooksAsync(filter);
Batch import from a directory:
var service = services.GetRequiredService<FileManagerService>();
await foreach (var result in service.ProcessUploadedAsync("/incoming", "/library"))
{
Console.WriteLine(result.Success ? $"OK {result.FileName}" : $"FAIL {result.FileName}: {result.ErrorMessage}");
}
Caveats
- Sqlite-only. No multi-provider abstraction — the DbContext and current queries target Sqlite directly.
- LIKE-scoped filter.
SearchTermusesContains(LIKE '%term%') — fast for small-to-medium catalogs but not FTS5. If the library grows beyond ~100k records, consider migrating to FTS5 or moving to SQL Server with full-text indexing. - No built-in cover extraction or ISBN lookup.
CoverImagePathandIsbnare stored as metadata but must be populated externally. - No EF Core migrations checked in. This is a known gap — consumers must generate their own initial migration.
Companion Umbraco plugin
The Umbraco backoffice consumer is SplatDev.Umbraco.Plugins.PdfCurator (tracked under SPL-2494). This is currently the only known consumer of the core library.
Built by SplatDev
Changelog
1.0.2 — 2026-08-24
Removes a dashboard screenshot that showed an error toast. It was captured against a site where this plugin's API was unreachable, so it advertised a broken dashboard. No screenshot is better than a misleading one; a replacement will be taken against a working install.
1.0.1 — 2026-08-24
Package metadata only: the listing now carries an icon and search tags, and the project and repository links point at the organisation that actually hosts this code. No code changes.
1.0.0 — 2026-08-24
This package now keeps a changelog. Earlier releases predate it and are not reconstructed here — consult the repository history for those. From this version on, every release records what changed for someone using it.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.EntityFrameworkCore.Sqlite (>= 10.0.7)
-
net8.0
- Microsoft.EntityFrameworkCore.Sqlite (>= 8.0.20)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.2 | 65 | 8/24/2026 |