95916cedde
feat: directory scanner plugin — walk library paths, auto-register assets
...
- DirectoryScannerPlugin: recursive directory walk via FileStoragePort
- Computes SHA256 checksums, classifies media by extension
- Registers each file via RegisterAssetHandler (triggers AssetIngested → extract_metadata pipeline)
- Reads library_path_id from job payload, looks up volume + path
- Seeded plugin + scan_directory pipeline
- Trigger via POST /jobs with { job_type: "ScanDirectory", payload: { library_path_id: "..." } }
2026-05-31 21:18:23 +02:00
f85c0cb246
feat: real XMP sidecar adapter, replaces LogSidecarWriter stubs
...
- adapters-sidecar: XmpSidecarWriter using xmp_toolkit
- Writes StructuredData → XMP with EXIF/DC/XMP namespace routing
- Reads XMP back to StructuredData
- Wired into bootstrap + worker, deleted both LogSidecarWriter stubs
2026-05-31 21:05:46 +02:00
d379f3d3c8
refactor: code smell fixes — tests, events, naming
...
- Tests for ExecutePipelineHandler (happy path, fallback, disabled skip, failure retry, not found)
- Tests for ProcessNextJobHandler (empty queue, process, drain multiple)
- DerivativeGenerated domain event + event-payload mapping + event_store aggregate
- Renamed event-payload → adapters-event-payload, event-transport → adapters-event-transport
2026-05-31 21:00:50 +02:00
35d5baf7be
feat: thumbnail generator plugin with configurable size/format
...
- ThumbnailGeneratorPort in domain (bytes + config → resized bytes)
- adapters-thumbnail: ImageThumbnailGenerator using image crate
- ThumbnailGeneratorPlugin reads width/height/format/profile from step config
- PostgresDerivativeRepository + 012_derivatives migration
- Seeded in extract_metadata pipeline as step 2 (300x300 webp)
- Standalone generate_derivative pipeline for on-demand use
2026-05-31 20:44:55 +02:00
45669ec848
feat: real EXIF extraction via adapters-exif crate
...
- MetadataExtractorPort in domain (bytes → StructuredData)
- adapters-exif: NomExifExtractor using nom-exif, handles EXIF + TrackInfo
- Worker's MetadataExtractorPlugin delegates to port, no longer knows nom-exif
- Filters noisy binary tags (U8Array, Undefined, Unknown)
2026-05-31 20:28:50 +02:00
d1c7243f5b
feat: seed default plugins/pipelines, auto-enqueue jobs on asset ingest
...
- Migration seeds metadata_extractor, sidecar_sync, no_op plugins
- Pipelines: extract_metadata → metadata_extractor, sync_sidecar → sidecar_sync
- Worker reacts to AssetIngested → enqueues ExtractMetadata job
- Worker reacts to SidecarSyncRequested → enqueues SyncSidecar job
- Closes the ingest-to-processing loop end-to-end
2026-05-31 20:12:42 +02:00
0b2237860e
refactor: introduce IngestTransaction port to reduce IngestAssetHandler from 7 to 4 ports
2026-05-31 18:44:51 +02:00
aa09aec66b
feat: event store — persist domain events to Postgres event_log table via composite publisher
2026-05-31 18:36:10 +02:00
c16c9d4581
refactor: extract pg_repo macro and MapDomainError trait to reduce postgres adapter boilerplate
2026-05-31 18:24:16 +02:00
838ed9a3f8
feat: wire NATS event publisher into bootstrap + worker
...
- Both binaries connect to NATS on startup, ensure JetStream stream
- EventPublisherAdapter<NatsTransport> replaces LogEventPublisher
- nats_url config with default nats://localhost:4222
- Deleted bootstrap's LogEventPublisher (no longer needed)
2026-05-31 11:53:51 +02:00
0e9911ebfc
feat: event infrastructure — payload, transport, NATS adapter
...
- EventPublisher now takes &DomainEvent (11 call sites + 3 impls updated)
- EventEnvelope + EventConsumer port in domain
- event-payload: serializable DomainEvent mirror with subject routing
- event-transport: generic Transport/MessageSource traits, publisher/consumer adapters
- adapters-nats: JetStream publish + durable pull consumer
2026-05-31 11:50:16 +02:00
6c88ac344c
refactor: extract inline tests to separate files in auth + storage adapters
2026-05-31 11:16:18 +02:00
aff772f6d7
style: fmt postgres lib.rs
2026-05-31 11:12:18 +02:00
e082387f6e
refactor: group postgres adapters by bounded context
2026-05-31 11:11:46 +02:00
19be8c2adf
feat: add sidecar + processing migrations and postgres adapters
...
007_sidecar, 008_processing, 009_duplicate_groups migrations.
Tag, sidecar, job, batch, plugin, pipeline, duplicate repos.
2026-05-31 11:04:13 +02:00
3399e25441
feat: add sharing endpoints — share, link, revoke, public access
2026-05-31 10:50:28 +02:00
9aba393fde
feat: vertical slice — migrations, postgres adapters, presentation handlers, bootstrap wiring
2026-05-31 05:52:42 +02:00
201eff717d
feat: add presentation layer + bootstrap wiring for vertical slice
2026-05-31 05:51:09 +02:00
8c1a0e4519
feat: add postgres migrations and repository adapters for vertical slice
2026-05-31 05:43:21 +02:00
c2ebca0da0
style: cargo fmt --all
2026-05-31 05:31:42 +02:00
3571c94bec
domain: add cross-cutting value objects (SystemId, DateTimeStamp, Checksum, StructuredData)
2026-05-31 03:16:28 +02:00
f9cb142c3b
init: scaffold from k-template with postgres + worker
2026-05-31 03:08:38 +02:00