Skip to main content

handle_post_message_new

Function handle_post_message_new 

Source
pub(crate) async fn handle_post_message_new(
    db: &DatabaseConnection,
    cognito_id: Uuid,
    body: &str,
    row_log: &str,
    cors_origin: &str,
) -> Result<Response, Error>
Expand description

新規お問い合わせを作成する

リクエストボディから CreateMessageRequest をデシリアライズし、 UUID v7 の ID と現在時刻を付与してデータベースに保存します。 保存したお問い合わせを CreateMessageResponse として HTTP 201 で返します。

§データベース操作

INSERT INTO messages (id, cognito_id, created_at, body, row_log, is_from_user)
VALUES ($1, $2, $3, $4, $5, $6)

§ID の生成

お問い合わせ ID には UUID v7 (uuid::Uuid::now_v7) を使用します。 UUID v7 はタイムスタンプベースのため、作成順ソートが可能です。

§Arguments

  • db - SeaORM データベース接続。Aurora DSQL への接続が確立済みである必要があります。
  • cognito_id - JWTクレームの sub フィールドから取得した Cognito ユーザーの UUID。 お問い合わせのオーナーとして messages.cognito_id 列に保存されます。
  • body - リクエストボディの文字列(JSON形式)。CreateMessageRequest にデシリアライズされます。 body(本文)フィールドを含む必要があります。
  • row_log - API Gateway からの生のイベントログ。
  • cors_origin - レスポンスの Access-Control-Allow-Origin ヘッダーに設定するオリジン。

§Returns

  • Ok(Response) - HTTP 201 と CreateMessageResponse のJSON(作成されたお問い合わせ情報を含む)
  • Err(Error) - データベース挿入エラー、またはJSONシリアライズエラー

§Errors

  • リクエストボディのJSON解析失敗時: "Failed to parse request body: ..." をログに記録し Err を返します。
  • データベース挿入失敗時: "Failed to insert inquiry: ..." をログに記録し Err を返します。
  • JSONシリアライズ失敗時: serde_json::to_value のエラーを ? で伝播します。