Skip to content

feat(wave-6): Files & Master Data — 53 endpoints across 14 services#102

Merged
naefp merged 19 commits into
mainfrom
feature/issue-29
Apr 28, 2026
Merged

feat(wave-6): Files & Master Data — 53 endpoints across 14 services#102
naefp merged 19 commits into
mainfrom
feature/issue-29

Conversation

@AMANDA-Info

Copy link
Copy Markdown
Contributor

Summary

Implements Wave 6 of the 100% API Coverage Roadmap (#22), adding 53 new endpoints across 14 services in two categories: Files & Documents and Master Data.

All 9 sub-issues were implemented in parallel by individual Docker agents, each individually verified (APPROVED), then merged into this integration branch. A final integration verification confirmed the full solution builds clean and all unit tests pass.

Sub-Issues Completed

# Service(s) Endpoints API Version Status
#93 FileService 9 (Get, GetById, Download, Preview, Usage, Upload, Search, Patch, Delete) v3.0 ✅ Closed
#94 DocumentSettingService, DocumentTemplateService 2 (Get each) v2.0 / v3.0 ✅ Closed
#95 CountryService 6 (full CRUD + Search) v2.0 ✅ Closed
#96 SalutationService 6 (full CRUD + Search) v2.0 ✅ Closed
#97 TitleService 6 (full CRUD + Search) v2.0 ✅ Closed
#98 LanguageService, CommunicationTypeService, CompanyProfileService, PermissionService 8 (read-only lookups) v2.0 / v3.0 ✅ Closed
#99 UserService, FictionalUserService 8 (v3.0 user management) v3.0 ✅ Closed
#100 NoteService 6 (full CRUD + Search) v2.0 ✅ Closed
#101 CommentService 3 (polymorphic kb_document_type) v2.0 ✅ Closed

Total: 53 endpoints, 14 services

Key Implementation Notes

  • Binary downloadsFileService.Download and FileService.Preview return byte[] via ApiResult<byte[]>
  • File uploadFileService.Upload uses multipart/form-data
  • Polymorphic commentsCommentService uses {kb_document_type}/{document_id} route pattern with a typed KbDocumentType enum
  • Read-only services — Languages, CommunicationTypes, CompanyProfile, Permissions are GET-only with no mutation methods
  • WireMock.Net bump2.2.0 → 2.4.0 (clears pre-existing NU1902 advisories in IntegrationTests)

Verification

  • Each sub-issue individually verified: VERDICT: APPROVED (9/9)
  • Integration verification on merged branch: VERDICT: APPROVED
  • dotnet build /warnaserror: ✅ clean (NU1902 pre-existing advisories on IntegrationTests are exempt)
  • dotnet test --filter TestCategory=Unit: ✅ all green

Test plan

  • Review coordination files (IBexioApiClient, BexioApiClient, BexioServiceCollection) for all 14 new service registrations
  • Spot-check a few unit test files (e.g. FileServiceTests.cs, CountryServiceTests.cs) for coverage quality
  • Verify binary download and file upload patterns in FileService
  • Confirm CommentService polymorphic route construction

Closes #29

🤖 Generated with Claude Code

claude and others added 19 commits April 24, 2026 18:25
Introduces the Files domain folder with a FileService exposing all 9
Bexio v3.0 /files endpoints: Get, GetById, Download, Preview, Usage,
Upload (FileInfo and MemoryStream overloads), Search, Patch, Delete.
Download and Preview return ApiResult<byte[]> via GetBinaryAsync; Upload
uses PostMultiPartFileAsync; Patch uses PatchAsync with a FilePatch view.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ce (issue #94)

Adds two GET-only connectors under the new Files domain:
- DocumentSettingService (v2.0, /kb_item_setting) — lists KbItemSetting entries.
- DocumentTemplateService (v3.0, /document_templates) — lists document templates
  with their default document types.

Both services follow the canonical ConnectorService pattern with ApiVersion +
EndpointRoot constants in sibling Configuration classes and are wired into
IBexioApiClient, BexioApiClient, BexioServiceCollection, and the E2E test base.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
)

Adds full CRUD + Search connector for the v2.0 country endpoint under the
new MasterData domain folder. Update uses PUT per the epic blueprint.

- sealed record Country + CountryCreate/CountryUpdate views with snake_case
  JSON mapping (name, name_short, iso3166_alpha2).
- ICountryService interface + CountryService implementation with canonical
  Get/FetchAll pagination, PostSearchAsync search, and PutAsync update.
- QueryParameterCountry for pagination (limit, offset).
- Exposed as IBexioApiClient.Countries with DI registration and wire-up
  test assertion.
- 11 offline unit tests (NSubstitute) covering verb, route, payload, and
  cancellation-token forwarding for each method.
- 6 WireMock integration tests covering CRUD + Search round-trip.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ssue #96)

Adds a new MasterData domain folder hosting a full-CRUD + Search SalutationService
covering all 6 endpoints documented under the Bexio Salutations tag (Get, GetById,
Create, Search, Update, Delete). Wires the connector into IBexioApiClient,
BexioApiClient, BexioServiceCollection and the wire-up + E2E test bases. Update
uses PutAsync (mirroring the established UnitService convention for 2.0
edit endpoints) and Search routes through PostSearchAsync.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Add TitleService with full CRUD + Search against the Bexio v2.0 /title
route (Get, GetById, Create, Search, Update via PUT, Delete). Introduces
the new MasterData domain folder and wires the connector as
IBexioApiClient.Titles.

Also upgrade WireMock.Net 2.2.0 -> 2.4.0 in IntegrationTests to pull in
OpenTelemetry 1.15.3 transitives and clear pre-existing NU1902
vulnerability warnings, enabling dotnet build /warnaserror to pass clean.

Verification: 0 warnings / 0 errors; 492 unit tests pass (11 new Title
tests covering verb + route + payload for every method); 277 integration
tests pass.
…le, Permission services (issue #98)

Adds four read-only lookup connector services to the MasterData domain
(8 endpoints total). Each service follows the established ConnectorService
pattern with ApiVersion/EndpointRoot constants and ApiResult<T> returns.

- LanguageService (v2.0): Get (with pagination), Search (PostSearchAsync)
- CommunicationTypeService (v2.0, communication_kind route): Get, Search
- CompanyProfileService (v2.0): Get (list), GetById (verified against OpenAPI spec)
- PermissionService (v3.0): Get singleton for caller's permission set

Wires the four new connectors into IBexioApiClient, BexioApiClient,
BexioServiceCollection and BexioE2eTestBase, and extends the wire-up
unit test to cover the new properties. Adds 12 new unit tests verifying
verb + route composition for each method.
…v3.0 (issue #99)

Adds the v3.0 user management connectors under a new MasterData namespace:
UserService exposes GetAll (paginated /3.0/users), GetMe (singleton
/3.0/users/me) and GetById; FictionalUserService exposes Get, GetById,
Create, Patch and Delete against /3.0/fictional_users. The Patch path
uses ConnectionHandler.PatchAsync with a FictionalUserPatch view whose
nullable + JsonIgnore(WhenWritingNull) properties guarantee partial
updates serialize only the caller-supplied fields. Both connectors are
registered via DI and exposed on IBexioApiClient as Users and
FictionalUsers.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… (issue #100)

Introduces the MasterData domain folder and the NoteService connector covering
all 6 Bexio Notes endpoints: Get (with pagination), GetById, Create, Search,
Update (PUT) and Delete. Wires the service into IBexioApiClient.Notes and the
AspNetCore DI registration; extends the wire-up test and E2E test base.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ocument_type (issue #101)

Adds Get, GetById, Create endpoints for document comments (offers/orders/invoices)
under /2.0/{kb_document_type}/{document_id}/comment. The discriminator is a
URL-level enum, not a JSON-body field, so no DiscriminatedJsonConverter is
required. KbDocumentType enum values are validated against bexio-v3.json:
kb_offer, kb_order, kb_invoice.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…ProfileService+PermissionService (8 endpoints)
@AMANDA-Info AMANDA-Info mentioned this pull request Apr 24, 2026
20 tasks
@naefp naefp merged commit 9723aee into main Apr 28, 2026
4 checks passed
@naefp naefp deleted the feature/issue-29 branch April 28, 2026 07:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Wave 6: Files & Master Data

3 participants