pub(crate) async fn handle_post_inquiry(
db: &DatabaseConnection,
email: &str,
cognito_sub: Uuid,
body: &str,
cors_origin: &str,
) -> Result<Response, Error>Expand description
新規お問い合わせを作成する
リクエストボディから CreateInquiryRequest をデシリアライズし、
UUID v7 の ID と現在時刻を付与してデータベースに保存します。
保存したお問い合わせを CreateInquiryResponse として HTTP 201 で返します。
§データベース操作
INSERT INTO inquiries (id, cognito_sub, email, subject, body, created_at)
VALUES ($1, $2, $3, $4, $5, $6)§ID の生成
お問い合わせ ID には UUID v7 (uuid::Uuid::now_v7) を使用します。
UUID v7 はタイムスタンプベースのため、作成順ソートが可能です。
§Arguments
db- SeaORM データベース接続。Aurora DSQL への接続が確立済みである必要があります。email- JWTクレームから取得した認証済みユーザーのメールアドレス。 お問い合わせのオーナーとしてinquiries.email列に保存されます。cognito_sub- JWTクレームのsubフィールドから取得した Cognito ユーザーの UUID。 お問い合わせのオーナーとしてinquiries.cognito_sub列に保存されます。body- リクエストボディの文字列(JSON形式)。CreateInquiryRequestにデシリアライズされます。subject(件名)とbody(本文)フィールドを含む必要があります。cors_origin- レスポンスのAccess-Control-Allow-Originヘッダーに設定するオリジン。
§Returns
Ok(Response)- HTTP 201 とCreateInquiryResponseのJSON(作成されたお問い合わせ情報を含む)Err(Error)- リクエストボディのパースエラー、データベース挿入エラー、またはJSONシリアライズエラー
§Errors
- リクエストボディのJSON解析失敗時:
"Failed to parse request body: ..."をログに記録しErrを返します。 - データベース挿入失敗時:
"Failed to insert inquiry: ..."をログに記録しErrを返します。 - JSONシリアライズ失敗時:
serde_json::to_valueのエラーを?で伝播します。