Skip to main content

handle_post_inquiry

Function handle_post_inquiry 

Source
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 のエラーを ? で伝播します。