Api
Sibling-facing API for postal letter operations within the monolith.
__all__
module-attribute
¶
__all__ = [
"create_postal_request",
"get_last_postal_request_for_user",
"get_postal_request",
"get_postal_request_status",
"list_letters",
"mark_postal_request_force_requested",
"record_postal_letter_shipped",
"retrieve_letter",
"send_letter",
"update_postal_request",
]
create_postal_request ¶
create_postal_request(
*,
user_id,
postal_flow,
recipient_address=None,
company_id=None,
provider_letter_id=None,
provider_name=None,
forced_requested_at=None,
requested_at=None,
shipped_at=None,
error_code=None,
error_message=None,
extra_metadata=None
)
Insert a PostalRequest row (caller owns commit()).
Source code in components/emailing/subcomponents/postal_letter/internal/actions/postal_request_actions.py
get_last_postal_request_for_user ¶
Return the latest postal request for user_id and postal_flow, if any.
Source code in components/emailing/subcomponents/postal_letter/internal/queries/postal_request_queries.py
get_postal_letter_ui_url ¶
Return the provider's UI URL for a postal request's letter, or None.
None when the request is unknown, letter id is not know or not supported
by provider. This is the postal counterpart of an email's customerio_link.
Source code in components/emailing/subcomponents/postal_letter/protected/api.py
get_postal_letter_ui_urls_by_request_id ¶
Batch counterpart of get_postal_letter_ui_url.
Fetches every request in one query so callers avoid N+1.
Source code in components/emailing/subcomponents/postal_letter/protected/api.py
get_postal_request ¶
Return one postal request row, or None if missing.
Exactly one lookup mode, either by:
- postal_request_id
- OR provider_name + provider_letter_id
Source code in components/emailing/subcomponents/postal_letter/internal/queries/postal_request_queries.py
get_postal_request_status ¶
Return status for one provider letter id, or None if missing.
Source code in components/emailing/subcomponents/postal_letter/internal/queries/postal_request_queries.py
list_letters ¶
List letters filtered by provider metadata (e.g. user id).
mark_postal_request_force_requested ¶
mark_postal_request_force_requested(
*,
postal_flow,
provider_name,
provider_letter_id,
forced_requested_at=None
)
Set forced_requested_at on the matching emailing.postal_request row.
Returns False when no row exists or postal_flow does not match.
Caller owns commit().
Source code in components/emailing/subcomponents/postal_letter/protected/api.py
record_postal_letter_shipped ¶
Set shipped_at on the emailing.postal_request row for a provider letter id.
Idempotent when shipped_at is already set.
Raises PostalRequestNotFoundForLetterError when no row exists for the provider
letter id (caller may retry). Returns False when a row exists but
postal_flow does not match (permanent mismatch — log and ack).
Source code in components/emailing/subcomponents/postal_letter/protected/api.py
retrieve_letter ¶
Fetch letter status / payload from the provider.
send_letter ¶
Send one postal letter using the provider configured for request.context.
Caller owns DB transaction persistence (commit / rollback) for the
postal_request row written by this function.
Source code in components/emailing/subcomponents/postal_letter/protected/api.py
update_postal_request ¶
update_postal_request(
*,
postal_request,
recipient_address=NOT_SET,
company_id=NOT_SET,
postal_flow=NOT_SET,
provider_letter_id=NOT_SET,
provider_name=NOT_SET,
forced_requested_at=NOT_SET,
requested_at=NOT_SET,
shipped_at=NOT_SET,
error_code=NOT_SET,
error_message=NOT_SET,
extra_metadata=NOT_SET
)
Patch mutable fields on an existing row (caller owns commit()).