Compare commits

..

3 Commits

Author SHA1 Message Date
9dfd012dea docs(README): open links in new tabs
All checks were successful
Publish Docker Images / build-and-publish (push) Successful in 13m44s
2025-11-17 10:16:28 +01:00
399f30157f chore: add Sonar analysis
All checks were successful
Publish Docker Images / build-and-publish (push) Successful in 12m32s
2025-11-16 02:02:58 +01:00
0b60e67e19 feat: send confirmation email to sender
All checks were successful
Publish Docker Images / build-and-publish (push) Successful in 8m13s
When users submit a contact form, they now receive a confirmation
email acknowlledging receipt of their message. The backend also
continues to send a notification email to the configured recipient.

If the backend fails to send the acknowledgement email to the sender,
it will assume the email is not valid and will therefore not transmit
the contact request to the configured recipient.

Changes:
- Refactor `send_email()` to `send_emails()` that sends two emails:
  - Confirmation email from the submitter
  - Notification email to the configured recipient
- Add `From<T>` implementations of various errors for new error type
  `ContactError`.
- Errors now return a translation identifier for the frontend.
2025-11-15 23:43:44 +01:00
4 changed files with 8 additions and 12 deletions

View File

@@ -84,7 +84,7 @@ Cachix is a Nix binary cache that dramatically speeds up builds by caching build
Configure these in the workflow's `env` section or as repository variables:
| Variable | Description | Default Value | Example |
|--------------------|------------------------------------------------|---------------|--------------------|
|--------------------+------------------------------------------------+---------------+--------------------|
| `CACHIX_NAME` | Name of the Cachix cache to use | `devenv` | `phundrak-dot-com` |
| `CACHIX_SKIP_PUSH` | Whether to skip pushing artifacts to the cache | `true` | `false` |

View File

@@ -3,13 +3,7 @@ include_toc: true
gitea: none
---
<h1 align="center">Bakit</h1>
<div align="center">
<strong>
A backend for my personal website
</strong>
</div>
<br/>
# phundrak.com Backend
<div align="center">
<a href="https://sonar.phundrak.com/dashboard?id=phundrak-backend" target="_blank">
@@ -26,6 +20,8 @@ gitea: none
</a>
</div>
The backend for [phundrak.com](https://phundrak.com), built with Rust and the [Poem](https://github.com/poem-web/poem) web framework.
## Features
- **RESTful API** with automatic OpenAPI/Swagger documentation

View File

@@ -268,7 +268,7 @@ mod tests {
#[test]
fn from_validation_errors_with_name_error() {
use validator::Validate;
use validator::{Validate, ValidationError};
#[derive(Validate)]
struct TestStruct {

View File

@@ -933,7 +933,7 @@ mod tests {
assert!(result.is_err());
match result.unwrap_err() {
ContactError::CouldNotParseSettingsEmail(_) => (),
e => panic!("Expected CouldNotParseSettingsEmail, got {e:?}"),
e => panic!("Expected CouldNotParseSettingsEmail, got {:?}", e),
}
}
@@ -964,7 +964,7 @@ mod tests {
assert!(result.is_err());
match result.unwrap_err() {
ContactError::CouldNotParseRequestEmailAddress(_) => (),
e => panic!("Expected CouldNotParseRequestEmailAddress, got {e:?}"),
e => panic!("Expected CouldNotParseRequestEmailAddress, got {:?}", e),
}
}
@@ -996,7 +996,7 @@ mod tests {
assert!(result.is_err());
match result.unwrap_err() {
ContactError::CouldNotSendEmail(_) => (),
e => panic!("Expected CouldNotSendEmail, got {e:?}"),
e => panic!("Expected CouldNotSendEmail, got {:?}", e),
}
}
}