This is a code-along implementation of zero2prod.
The server is built in async Rust with Actix Web
and SQLx for database interactions, the website is
server-side generated with Askama. The API
documentation is generated with
Utoipa and available at
/swagger-ui/.
The newsletter publication is asynchronous, idempotent and resilient to transient errors.
It uses a database queue and background workers to achieve asynchronous part. And uses idempotency keys to avoid
publishing the same newsletter twice.
Error handling ensures newsletter emails are sent at most once to each subscriber, even in the event of a
network outage or an email sender (SendGrid) downtime.
The newsletter subscription is done by submitting a form and clicking a confirmation link received by email.
Admin registration is currently manual with a CLI tool, but the website allows them to reset their password using a dedicated form with validation.