Skip to Content
API changelog

Source document · API/docs/CHANGELOG.md

API Documentation Changelog

2026-10-12

  • Added a MailAfrica transactional email adapter for account verification, sign-in codes, and password reset, with server-side API key, sender address, and optional verified-domain configuration. SMTP remains available as a fallback when no MailAfrica key is configured.
  • Added implementation-focused guides for API request flow, authentication and guest access, provider/catalog publication, bookings and payment review, chat/media/notifications, community/lifestyle, and administration/reporting.
  • Clarified that subscription payment confirmation is administrator-only, order payment confirmation is provider-owner/admin, and Stripe webhooks are not wired into the current payment flow.
  • Updated docs-site synchronization paths and endpoint index coverage notes.

2026-10-06

  • Added PostgreSQL-backed community and chat HTTP lifecycle flows covering ownership enforcement, feed visibility, reactions, comments, reports, blocks, participant-scoped messaging, message reads, and persisted read state.
  • Fixed provider dashboard SQL to resolve orders through the provider’s owner user ID; added database coverage for live status counts and sales totals.
  • Added an authenticated contact lookup for active listings, allowing customers to start provider conversations without exposing owner IDs in public search.
  • Made PostgreSQL one-to-one chat creation reuse an existing conversation, including simultaneous retries initiated by either participant.
  • Persisted listing category IDs from owner-authenticated listing creation and added a foreign key for future category assignments.
  • Promote an approved provider’s owner to the provider role in the same transaction, enabling the authenticated provider dashboard after refresh.
  • Added a PostgreSQL-backed provider HTTP flow covering owner-bound provider registration, draft listing/menu creation, server-priced subscription payment, admin approval/confirmation, role rejection, and public listing publication.
  • Fixed device registration to generate and return a stable database ID, and added snake_case JSON contracts for notification, chat, community, lifestyle, admin, reporting, and provider responses.
  • Added a PostgreSQL-backed HTTP auth lifecycle test for registration, verification, login, /me, refresh rotation, logout, password reset, and account deletion; it caught and fixed refresh replacement ordering against the session self-reference constraint.
  • Made password updates and refresh-session revocation atomic so a password reset cannot leave old sessions usable.
  • Added a PostgreSQL-backed HTTP integration flow covering server-priced order creation, idempotent retries, payment submission replay, provider confirmation, and the final customer order read.
  • Added method-specific manual payment instructions to API payment responses and require both configured merchant instruction sets in staging/production.
  • Allowed outbox workers to optionally filter by event type, isolating the concurrent PostgreSQL worker integration tests while leaving the runtime worker subscribed to all events.
  • Protected provider/listing creation and bound listing/menu mutations to the authenticated owner; added persistent IDs and snake_case catalog DTOs.
  • Added PostgreSQL OTP storage, SMTP composition, persistent repository wiring, production configuration gates, and database-backed readiness.
  • Replaced placeholder S3 URLs with Signature V4 presigned upload/read URLs and documented the endpoint contract inventory.
  • Added HTTP route sweep, auth/catalog lifecycle flow coverage, and storage signing tests. Started Android catalog integration.
  • Added an embedded migration CLI and PostgreSQL CI service; fixed server order IDs and database-backed idempotency replay/conflict handling.
  • Seeded the service catalog so new production databases return real mobile category data after migration.
  • Order requests now resolve active menu item prices and provider/listing identity from PostgreSQL, ignore client totals, and persist item quantity for stable idempotent retries; added the required order item migration and API schema.
  • Added owner-scoped payment attempt creation from order totals, fixed payment submission to update existing rows, and made payment/order state changes transactional with customer/provider/admin authorization checks.
  • Exposed public listing search with approval, subscription, expiry, category, pagination, and query filters; connected Android listing loading to the API.
  • Added paginated order history and participant-scoped order detail routes for customers and provider owners, with PostgreSQL ownership integration checks.
  • Catalog owner-scoped mutations now check affected-row counts and return not-found for missing or non-owned resources; malformed public listing pagination is rejected instead of silently using defaults.
  • Fixed the chat realtime WebSocket flow to authorize room membership, stream live message broadcasts, validate browser origins, and cleanly remove closed subscribers.
  • Fixed per-IP rate-limit keys to ignore client source ports, expire old keys, and enforce a bounded key map.
  • Made application environment validation fail closed for unknown values and require database, token, SMTP, and HTTPS object storage configuration in staging and production.
  • Added idempotent provider-owned listing subscription payments at a required server-configured price; admin confirmation activates/extends the subscription transactionally, and provider approval publishes a paid listing.
  • Made payment submission safely replayable after a lost response, without incrementing the order version twice; added PostgreSQL lifecycle coverage.
  • Revoked refresh sessions atomically on account deletion and rejected refreshes for suspended or deleted accounts.
  • Wired order-created outbox events to durable customer/provider inbox notices, with concurrent claiming, bounded retry backoff, and dead-letter state.

25 September 2026

  • Made local reference video media Git-ignored; the API repository contains no video dependency.
  • Started Phase 2 persistence and contract work: PostgreSQL pool configuration, transaction helper, initial schema migration, order/payment repository seams, and the initial OpenAPI contract.
  • Started Phase 3 authentication: registration/login service behavior, bcrypt password hashing, standard HTTP handlers, development wiring, tests, and OpenAPI routes.
  • Added refresh-token rotation and logout/revocation routes with service tests and development token-family behavior.
  • Added the auth sessions/OTP migration, PostgreSQL user repository seam, migration runner, and persistent-token issuer boundary.
  • Added HMAC-signed expiring access/refresh token primitives and bearer authorization middleware with tamper/expiry tests.
  • Added email verification and current-user service/HTTP routes, OTP persistence seams, and signed bearer-token wiring in development.
  • Implemented the PostgreSQL session adapter with hashed random refresh tokens, transactional rotation, expiry checks, and server-side revocation.
  • Added SMTP mailer seam, secure OTP generation/resend throttling, password-reset request/confirmation routes, and authenticated account deletion.
  • Started Phase 4 catalog: service discovery, provider registration, listing creation, development repository, routes, and validation tests.
  • Added the PostgreSQL catalog repository adapter, production composition wiring, category/menu migration, and catalog phase persistence boundary.
  • Added catalog search/lifecycle/menu repository seams, provider approval operations, listing deactivation, and PostgreSQL implementations with ownership predicates.
  • Added bearer-protected provider update, admin approval, listing update, and listing deactivation HTTP routes.
  • Started Phase 5 orders/payments with server-side order validation, pending-state initialization, transition service seam, and payment submission/confirmation service seam.
  • Added PostgreSQL order/payment repositories, immutable item snapshots, idempotency schema, manual evidence/Stripe boundaries, webhook storage, and transactional completion-to-sale support.
  • Added order-service idempotency replay/conflict behavior with tests.
  • Added order creation and payment submit/confirm HTTP handlers plus Stripe webhook verification boundary.
  • Wired order/payment handlers into router composition with development and PostgreSQL repository selection.
  • Added manual payment-evidence endpoint, server-side price snapshot calculator, and signed Stripe webhook gateway boundary.
  • Added webhook event persistence and explicit order customer/provider/admin authorization helpers with tests.
  • Started Phase 6 with device registration/preferences schema, notification service validation, retryable outbox worker, and provider dashboard service seam.
  • Added PostgreSQL notification/device persistence, notification/device HTTP handlers, APNs/FCM delivery interfaces, manual-sales schema, and provider dashboard HTTP contract.
  • Wired Phase 6 device, notification, acknowledgement, and provider dashboard routes into the production router composition with local and database-ready service seams.
  • Added HTTP delivery clients, outbox enqueue helper and exponential retry calculation, provider dashboard SQL aggregation, and manual-sales service boundary.
  • Added PostgreSQL manual-sales persistence, provider/admin manual-sales route, and invalid-provider-token cleanup hook.
  • Started Phase 7 with conversation/participant/message/attachment schema, participant authorization, unread/read state, message idempotency storage, PostgreSQL repository, and tests.
  • Added authenticated chat conversation/message/read HTTP routes, development composition, and a WebSocket realtime boundary.
  • Added authenticated conversation listing, participant-scoped PostgreSQL queries, and local repository support.
  • Added private-media authorization service, attachment ownership boundary, and room broadcast hub with lifecycle tests.
  • Added media asset metadata migration, PostgreSQL media repository, upload/read HTTP routes, object-storage adapter boundary, and development media repository.
  • Added S3-compatible storage adapter boundary, MIME/size validation, attachment persistence, and attachment authorization tests.
  • Added storage environment configuration, attachment IDs on chat messages, chat notification/hub hooks, and development hub wiring.
  • Started Phase 8 with moments, likes, comments, reports, blocks, lifestyle opt-in profile schema, community service boundaries, and validation tests.
  • Added PostgreSQL community repository, authenticated feed/moment/like routes, visibility/block filtering, and dating/content/meeting schema boundaries.
  • Started the Go API implementation with a runnable server under cmd/api.
  • Added standard JSON response envelopes, request IDs, recovery middleware, health/readiness routes, and /api/v1.
  • Added initial auth, order-status, payment-status, and order-transition domain types.
  • Added the phased API implementation roadmap and phase exit requirements.
  • Established the Go API implementation SRS.
  • Defined the modular monolith and internal/app feature-module layout.
  • Defined standard success, collection, and error response envelopes.
  • Added core contract models and canonical domain vocabulary.
  • Added auth, order, and payment module interfaces and collaboration flows.
  • Added architecture and documentation-maintenance guides.

2026-09-25

  • Added authenticated community comment, report, block, unblock, view, and interaction-counter routes.
  • Added PostgreSQL-backed view recording and aggregate counters.
  • Added an opt-in PostgreSQL integration test for the community repository.

2026-09-25

  • Started Phase 9 with scoped reporting and audit endpoints for accountant/admin roles.
  • Added PostgreSQL reporting adapters and the audit event migration.

2026-09-25

  • Completed the Phase 9 admin control-plane increment: role updates, moderation queue, announcements, report export, PostgreSQL adapters, and audit-event writes.

2026-09-25

  • Started Phase 10 with router-level security headers, request-size protection, and structured access logging.

2026-09-25

  • Added Phase 10 rate limiting, basic metrics, and production operations guidance.

2026-10-06

  • Added GET /api/v1/catalog/categories to return active listing categories suitable for POST /api/v1/listings; service discovery remains available at /api/v1/catalog/services.
  • Added listing category_id to public search responses so clients can filter listings using stable category IDs.
  • Reject unknown or inactive listing categories as not found before inserting, avoiding database constraint errors becoming server failures.

8 October 2026

  • Added administrator operational totals and paginated search endpoints for users, providers, listings, orders, and payments. Added audited user/listing status changes, provider approval, and payment rejection. Added accountant service assignments and enforced assigned-service scope on accountant summaries; global audit access is admin-only. The admin client uses existing role, payment confirmation, order transition, moderation, announcement, and audit endpoints.

8 October 2026

  • Added ownership-checked, optimistic-concurrency order transitions. Completing an order now atomically updates its state, creates the sale snapshot, and writes an outbox event.

8 October 2026

  • Added authorized versioned order transitions, atomic completion sales and completed-order snapshots/outbox publication, provider manual-sale creation, public listing detail, and meeting join/leave/end membership operations. Added self-service profile updates and email-resolved password reset confirmation without returning account identifiers.
  • Added bounded moment-comment retrieval to the API and connected Android comments, report, and member-block controls to the community feed.
  • Changed email/password sign-in to send a short-lived email OTP and issue session tokens only after successful OTP verification.

2026-10-08

  • Persist scheduled order times in PostgreSQL when customers create bookings.

2026-10-08

  • Added guest order creation with required contact details, hashed 256-bit recovery capabilities, 90-day expiry, idempotent token rotation, and a scoped capability read endpoint. Providers can retrieve guest contact details on their own orders.
  • Added private moment image upload authorization, transactional asset ownership checks and moment associations, public feed attachment IDs, and signed reads.
  • Added optional Firebase Cloud Messaging HTTP v1 delivery for authenticated Android devices registered through the device API.
  • Added room-scoped, short-lived LiveKit participant tokens to authorized meeting joins and made production startup require LiveKit connection settings.