feat: add LetterXpress (A&O Fischer) API v3 carrier#50
Merged
Conversation
Add the LetterXpress carrier following the post-product pattern (its own ILetterXpressClient rather than the parcel IShipmentService abstraction): - Parcel.NET.LetterXpress: options, builder, DI extensions, exception, error helper - Parcel.NET.LetterXpress.Letters: client covering print jobs, SMART@MAIL email jobs, balance, price, transactions and invoices, with snake_case wire models and a source-generated JsonSerializerContext - Parcel.NET.LetterXpress.All: meta-package Auth is injected into the JSON request body (no header), the Content-Type is pinned to exactly "application/json", and timestamps are parsed as Europe/Berlin local time — all verified against the live API. Includes request validation and 38 unit tests. Wires the packages into the solution and Parcel.NET.All, and documents the carrier in the README.
Include the LetterXpress assemblies in the docs API reference generator and add a Carriers > LetterXpress guide page. Regenerates api-docs.json, content-index.json and sitemap.xml accordingly.
Add per-package release workflows for letterxpress, letterxpress-letters and letterxpress-all, list them in the release-tag dispatcher, and run the LetterXpress test project (plus a core-change check) in CI.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds LetterXpress (A&O Fischer GmbH & Co. KG) as a new carrier — a print-and-mail service (upload a PDF, it's printed and posted, optionally via SMART@MAIL e-mail).
Because it's a letter/print-mail product rather than a parcel carrier, it does not implement
IShipmentService/ITrackingService; it exposes its ownILetterXpressClient, mirroring the DHL Internetmarke design.Packages
Parcel.NET.LetterXpress— options, builder, DI, exception, error helperParcel.NET.LetterXpress.Letters— client: print jobs, SMART@MAIL e-mail jobs, balance, price, transactions, invoicesParcel.NET.LetterXpress.All— meta-packageCarrier specifics (verified against the live API)
authobject on every request, incl. GET/DELETE) — no auth header.application/json— the API rejects; charset=utf-8with HTTP 400.DateTimeOffset.EmailJobFiltervalues (queue/hold/canceled/draft/success) were probed empirically, not guessed.JsonSerializerContext; base64 + MD5 computed by the client.Validation
Local guards for the 50 MB request limit (incl. attachments/backgrounds/terms), empty file, registered-mail-national-only, serial+email exclusivity, numeric serial separator, future dispatch date, and price page count / shipping.
Tests
38 unit tests (mocked HTTP). Read and write paths (create → get → delete in test-mode Postbox) were additionally verified against the live API.
Docs
Release / NuGet
letterxpress,letterxpress-letters,letterxpress-all), listed in the release-tag dispatcher.letterxpress→letterxpress-letters→letterxpress-all.