airtunk ホテルバレー API (1.0.0)

Download OpenAPI specification:

Airtunk hotel valley service API

laravel middle ware : トークン検証・自分情報追加

AuthorizationヘッダーでBearerトークンを送信する
(axios.tsのインターセプターでヘッダーに付与する形になっているので、開発者が意識することではない)

全てのapi呼び出しで、アクセストークン検証を実施しますが、有効な場合、コンテキストに自分情報を追加します
jwtトークンを検証するミドルウェア
(airtrunk-ibd/src/app/Http/Middleware/VerifyJwtToken.php)にて、 Bearerトークンを分解。

分解後、token.subを使用して、staff.subから、ホテルや配送スタッフの情報を検索し、コンテキストに追加する
※ コンテキストに追加するのは、各apiで、リクエストされたユーザーの情報を使いまわすためである)
※ また、ログ出力も考慮すると、自分情報をコンテキストに追加しておく対応が必要。

FYI. https://laravel.com/docs/12.x/context

認証

認証関連のエンドポイント

ログイン(Email/Password認証)

Cognito認証を実行します。MFAが必要な場合はsessionを返却し、 MFAが不要な場合はアクセストークンを直接返却します。

Request Body schema: application/json
required
email
required
string <email>

メールアドレス

password
required
string >= 8 characters

パスワード

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com",
  • "password": "SecurePassword123!"
}

Response samples

Content type
application/json
Example
{
  • "status": "SUCCESS",
  • "accessToken": "eyJhbGciOiJSUzI1NiIs...",
  • "idToken": "eyJhbGciOiJSUzI1NiIs...",
  • "refreshToken": "eyJjdHkiOiJKV1QiLCJlb...",
  • "user": {
    }
}

MFA認証コード検証

Email で送信された認証コードを検証し、 成功時はJWTトークン一式を返却します。

Request Body schema: application/json
required
session
required
string

ログインAPIから取得したセッション

challengeResponse
required
string^[0-9]{6}$

Email で受信した認証コード

Responses

Request samples

Content type
application/json
{
  • "session": "AYABeA...",
  • "challengeResponse": "123456"
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJSUzI1NiIs...",
  • "idToken": "eyJhbGciOiJSUzI1NiIs...",
  • "refreshToken": "eyJjdHkiOiJKV1QiLCJlb...",
  • "user": {
    }
}

ログアウト

Cognito Global Sign Outを実行し、JWTトークンを無効化します。 アクセストークンをリクエストボディに含めてください。

Request Body schema: application/json
required
accessToken
required
string

アクセストークン(JWT)

Responses

Request samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJSUzI1NiIs..."
}

Response samples

Content type
application/json
{
  • "message": "ログアウトしました"
}

トークンリフレッシュ

リフレッシュトークンを使用して新しいアクセストークンとIDトークンを取得します。

Request Body schema: application/json
required
refreshToken
required
string

リフレッシュトークン(JWT)

Responses

Request samples

Content type
application/json
{
  • "refreshToken": "eyJjdHkiOiJKV1QiLCJlb..."
}

Response samples

Content type
application/json
{
  • "accessToken": "eyJhbGciOiJSUzI1NiIs...",
  • "idToken": "eyJhbGciOiJSUzI1NiIs..."
}

ユーザー情報取得

処理概要

JWTトークンから認証済みユーザーの情報を取得します。
ユーザー情報取得処理では、フロントエンドでの表示制御のため、自分情報を返却する

処理詳細

  • ユーザー権限(role)によって、返却値が異なる
    • at-admin, at-sc-admin, at-sc

      • hotel_ids, airport_reception_idはnull
      • at-admin, at-sc-adminは、管理画面等では全てのホテル、全ての空港が検索できることになる
        • ホテルの一覧だったり、空港の一覧は、全件取得することになる。
    • at-airport

      • airport_reception_idを返す
    • hotel-admin, hotel

      • hotel_idsに値が入る
        • hotelの場合、そのユーザーが属するホテル1件が配列で返す
        • hotel-adminの場合、そのユーザーが属するグループ全体のhotel_idを配列で返す
Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
Example
{
  • "user": {
    }
}

サービス申し込み済みチェック

  • 申込テーブルから渡されたemail,name,'hotel_id'と合致するデータを探す
  • データがあればtrueを無ければfalseを返す
Request Body schema: application/json
required
email
required
string <email>
name
required
string

利用者氏名

hotel_id
required
string <uuid>

宿泊予定ホテルのid

Responses

Request samples

Content type
application/json
{
  • "email": "aaa@gmail.com",
  • "name": "やまだ ひさし",
  • "hotel_id": 1
}

Response samples

Content type
application/json
{
  • "result": true
}

申し込み

申し込み関連のエンドポイント

申し込み一覧取得

指定されたクエリ条件に基づき、申込テーブルから申込データを取得します。 リレーションを利用して、以下の関連情報も併せて取得します。

  • ゲストテーブル:宿泊者氏名、利用者名
  • ホテルテーブル:ホテル名
query Parameters
page
integer >= 1
Default: 1

ページ番号

per_page
integer [ 1 .. 100 ]
Default: 20

1ページあたりの件数

reservation_holder_name
string

宿泊予約者名

user_name
string

利用者名

email
string

メールアドレス

phone_number
string

電話番号

delivery_status
string

配送ステータス

hotel_name
string

ホテル名

check_in_date
string <date>

チェックイン日

luggage_qr_code
string

荷物qrコードの番号

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

申し込み登録

受け取った情報を下記のテーブルに保存

  • 申込テーブル
  • ゲストテーブル
Request Body schema: application/json
required
reservation_holder_name
required
string

宿泊旅行者名

user_name
required
string

利用者名

relationship_with_guest
required
string

宿泊者とのご関係

email
required
string

メールアドレス

phone_number
required
string

電話番号

hotel_id
required
string

ホテルid

hotel_name
required
string

ホテル名

hotel_address
required
string

ホテル住所

check_in_date
required
string <date>

チェックイン日

check_out_date
required
string <date>

チェックアウト日

airport_id
required
string

空港id

estimated_arrival_datetime
required
string <date-time>

到着予定日時

flight_number
string or null

便名(任意)

counter_arrival_datetime
required
string <date-time>

預入カウンターの到着予定日時

luggage_quantity
required
integer

荷物の個数

coupon_code
string or null

クーポンコード

Responses

Request samples

Content type
application/json
{
  • "reservation_holder_name": "string",
  • "user_name": "string",
  • "relationship_with_guest": "string",
  • "email": "string",
  • "phone_number": "string",
  • "hotel_id": "string",
  • "hotel_name": "string",
  • "hotel_address": "string",
  • "check_in_date": "2019-08-24",
  • "check_out_date": "2019-08-24",
  • "airport_id": "string",
  • "estimated_arrival_datetime": "2019-08-24T14:15:22Z",
  • "flight_number": "string",
  • "counter_arrival_datetime": "2019-08-24T14:15:22Z",
  • "luggage_quantity": 0,
  • "coupon_code": "string"
}

Response samples

Content type
application/json
{
  • "application_id": "string"
}

申し込み詳細取得

  • 指定された申込IDに基づき、申込テーブルの対象データを取得
  • さらに関連する個人情報、ホテル情報、日本国内の空港情報、および預け入れカウンター情報をあわせて取得
path Parameters
application_id
required
string
Example: 550e8400-e29b-41d4-a716-446655440001

申し込みID

Responses

Response samples

Content type
application/json
{}

預かり同意サイン保存

荷物 QR コードを申込情報に紐づけ、預かり同意サインを保存し、預かり同意状態へ更新する処理を行います。

  1. 預かり同意サイン(signature)を S3 にアップロード

    • アップロード後、サイン画像の取得用 URL を生成します。
  2. 申込テーブルの更新

    • 取得した サイン画像 URL を預かりサインURLとして保存します。
    • 預かりサインタイムスタンプに現在時刻を保存します。
  3. 荷物管理テーブルへの登録

    • luggage_qr_codes に含まれる各 QR コードと applicationId を紐づけて荷物管理テーブルへ保存します。
path Parameters
application_id
required
string

申し込みID

Request Body schema: multipart/form-data
required
signature
required
string <binary>

顧客のサイン(画像ファイル)

luggage_qr_codes
Array of strings

Responses

Response samples

Content type
application/json
{
  • "message": "申し込みデータがありません"
}

受け渡しサイン保存

荷物 QR コードを申込情報に紐づけ、受け渡しサインを保存し、受け渡し完了状態へ更新する処理を行います。

  1. 受け渡しサイン(signature)を S3 にアップロード

    • アップロード後、サイン画像の取得用 URL を生成します。
  2. 申込テーブルの更新

    • 取得した サイン画像 URL を受け渡しサインURLとして保存します。
    • 受け渡しサインタイムスタンプに現在時刻を保存します。
  3. 荷物管理テーブルへの登録

    • luggage_qr_codes に含まれる各 QR コードと applicationId を紐づけて荷物管理テーブルへ保存します。
path Parameters
application_id
required
string

申し込みID

Request Body schema: multipart/form-data
required
signature
required
string <binary>

顧客のサイン(画像ファイル)

Responses

Response samples

Content type
application/json
{
  • "message": "申し込みデータがありません"
}

追加荷物登録

預かり同意保存後に、後から追加した荷物を旅行者と紐づける

  • 受け取った,applicationIdとluggage_qr_codeを荷物管理テーブルへ保存
path Parameters
application_id
required
string

申し込みID

Request Body schema: application/json
required
luggage_qr_code
required
string

荷物qr番号

Responses

Request samples

Content type
application/json
{
  • "luggage_qr_code": "string"
}

Response samples

Content type
application/json
Example
{
  • "message": "申し込みデータがありません"
}

荷物紐づけ解消

荷物と旅行者の紐づけを外す

指定された application_idluggage_qr_code に基づき、以下の処理を行う。

  1. 荷物管理テーブルの検索
  • application_idluggage_qr_code が一致する荷物管理データを荷物管理テーブルから検索する。
  1. データの削除(紐づけ解除)
  • 該当データが存在する場合、そのレコードを削除し、旅行者と荷物の紐づけを解除する。
path Parameters
application_id
required
string

申し込みID

luggage_qr_code
required
string

荷物QRコード

Request Body schema: application/json
required
luggage_qr_code
required
string

荷物qr番号

Responses

Request samples

Content type
application/json
{
  • "luggage_qr_code": "string"
}

Response samples

Content type
application/json
Example
{
  • "message": "申し込みデータがありません"
}

荷物ロケーション取得

指定された applicationId を基に、以下の手順で荷物のロケーションデータを取得する。

  1. 荷物管理テーブルからの検索

    • applicationId をキーとして、荷物管理テーブルから該当する荷物管理データを取得する。
  2. 配送実績データの取得

    • 取得した荷物管理データの id を基に、配送実績テーブルから関連する配送実績データを取得し、荷物のロケーション情報として返却する。
path Parameters
application_id
required
string

申し込みID

Responses

Response samples

Content type
application/json
{
  • "location_info": {
    }
}

空港

空港関連のエンドポイント

空港受付一覧取得

空港受付一覧取得

  • 空港受付テーブルから全データを取得する
query Parameters
page
integer >= 1
Default: 1

ページ番号

per_page
integer [ 1 .. 100 ]
Default: 20

1ページあたりの件数

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

空港締め処理作成

空港締め管理テーブルにデータを作成します。

  • counterId、staff_id、carbon::now()(現在日時)を空港締め管理テーブルへ保存。
path Parameters
counter_id
required
string

空港受付Id

Request Body schema: application/json
required
staff_id
required
string

スタッフ

Responses

Request samples

Content type
application/json
{
  • "staff_id": "string"
}

Response samples

Content type
application/json
{
  • "message": "空港データがありません"
}

空港締め処理削除

空港締め管理テーブルのデータを削除

  • counterIdを元に空港締め管理テーブルから該当するカウンターのデータを取得する
  • 取得したデータ達の中から今日の締め処理データ探し出す
  • 存在したら削除する
path Parameters
counter_id
required
string

空港受付Id

Responses

Response samples

Content type
application/json
{
  • "message": "今日の締め処理が保存されていません"
}

空港締め処理確認

  • counterId を指定して、当日における空港の締め処理データが存在するかを確認。
path Parameters
counter_id
required
string

空港受付Id

Responses

Response samples

Content type
application/json
{
  • "result": true
}

スタッフ

スタッフ関連のエンドポイント

担当車両取得

スキャンした車両QRコードをもとに、ログインしているスタッフの担当車両を取得する。

  • スキャンしたQRコード.車両m_IDを用いて、
    • 行き先マスター.車両m_IDを引いてくる
      • 適用開始日・終了日を検査する
    • 行き先Mマスターとロケーション系マスタを使用してレスポンスを生成する
      • ロケーション系マスタとは、
        • 空港受付
        • ホテルエリア
        • デポ
        • 積み替え
      • 空港受付Mから引っ張ってくる時は、"japanese_name"を行き先ロケーション名とすること
path Parameters
staff_id
required
string

スタッフID

query Parameters
vehicle_id
required
string

車両ID

Responses

Response samples

Content type
application/json
[
  • {
    }
]

配達車両

配達車両関連のエンドポイント

集配先ルート一覧

車両に紐づけられた目的地達を取得

path Parameters
vehicle_id
required
string

車両ID

Responses

Response samples

Content type
application/json
{
  • "pickup_info": {
    },
  • "delivery_info": {
    }
}

行き先

行き先関連のエンドポイント

ロケーション検証

登録されている行き先を取得

  • destinationIdに基づき行き先テーブルからデータを取得

typeに応じたidを取得する

  • airport_reception -> airport_reception_id
  • hotel -> hotel_id

検証

上記で取得したidとlocation_idが同じか検証する

path Parameters
destination_id
required
string

行き先ID

Request Body schema: application/json
required
location_id
required
string

スキャンしたロケーションのid

Responses

Request samples

Content type
application/json
{
  • "location_id": "string"
}

Response samples

Content type
application/json
{
  • "result": true,
  • "location_id": "string"
}

配達品

配達品関連のエンドポイント

配達荷物取得

指定された行き先 ID に関連する荷物データを取得する。

ホテルの場合

1. ホテルデータの取得

行き先 ID と一致するホテルデータを、ホテルテーブルから検索する。

2. 申込データの取得

取得したホテルデータの ID に紐づく申込データを、申込テーブルから取得する。

3. 荷物データの取得

見つかった申込データと紐づく荷物データを検索し、結果として返却する。

空港の場合

1. 空港データの取得

行き先 ID と一致する空港データを、空港テーブルから検索する。

2. 申込データの取得

取得した空港データの ID に紐づく申込データを、申込テーブルから取得する。

3. 荷物データの取得

見つかった申込データと紐づく荷物データを検索し、結果として返却する。

path Parameters
destination_id
required
string

行き先ID

Responses

Response samples

Content type
application/json
{
  • "application_info": {
    }
}

ロケーション検証

荷物と配達先が一致してるか調べる

  • 荷物管理テーブルからluggage_qr_codeと合致するデータを取得
  • 荷物データに紐づいている申込データを取得
  • 申込データのdelivery_hotel_idとlocation_idが一致しているか調べる
path Parameters
destination_id
required
string

行き先ID

Request Body schema: application/json
required
location_id
required
string

スキャンしたロケーションのid

luggage_qr_code
required
string

荷物qr番号

Responses

Request samples

Content type
application/json
{
  • "location_id": "string",
  • "luggage_qr_code": "string"
}

Response samples

Content type
application/json
{
  • "result": true,
  • "location_id": "string"
}

ホテル置き配証拠アップロード

証拠写真のアップロードと紐づけ

photos に含まれる全ての画像が処理されるまで、以下の手順を繰り返す。

1. 証拠写真(photo)を S3 にアップロード

  • photo を S3 にアップロードする。
  • アップロード完了後、画像取得用の URL を受け取る。

2. 荷物置き配写真テーブルへの登録

  • 取得した 証拠写真 URL を、 application_ids に含まれる各 id と紐づけて保存する。

配送実績への保存

  • luggage_qr_codesの中身の荷物QRId達,staff_id,hotel_id,location_typeを配送実績に保存する
path Parameters
destination_id
required
string

行き先ID

Request Body schema: multipart/form-data
required
staff_id
required
string

スタッフid

location_type
required
string

ロケーションタイプ

hotel_id
required
string

ホテルid

application_ids
required
Array of strings
luggage_qr_codes
required
Array of strings
photos
required
Array of any

Responses

Response samples

Content type
application/json
{
  • "message": "行き先データがありません"
}

ホテル配達完了

受取サインのアップロードと紐づけ

1. 受取サイン(photo)を S3 にアップロード

  • アップロード後、取得用 URL を受け取る。

2. ホテル引渡サインテーブルへの登録

  • 取得した 受取サイン URL と、application_ids の id達を紐づけて保存します。

配送実績に保存する

  • luggage_qr_codesの中身の荷物QRId達,staff_id,hotel_id,location_typeを配送実績に保存する
path Parameters
destination_id
required
string

行き先ID

Request Body schema: multipart/form-data
required
staff_id
required
string

スタッフid

location_type
required
string

ロケーションタイプ

hotel_id
required
string

ホテルid

application_ids
required
Array of strings
luggage_qr_codes
required
Array of strings
signature
required
string <binary>

サイン(画像ファイル)

Responses

Response samples

Content type
application/json
{
  • "message": "行き先データがありません"
}

配達実績登録

  • luggage_qr_codesの中身の荷物QRId達,staff_id,location_type,location_idに関してはairtport_idとして配送実績テーブルに保存する
path Parameters
destination_id
required
string

行き先ID

Request Body schema: application/json
required
luggage_qr_codes
required
Array of strings
staff_id
required
string

スタッフid

location_type
required
string

ロケーションタイプ

location_id
string

スキャンしたロケーションのid

Responses

Request samples

Content type
application/json
{
  • "luggage_qr_codes": [
    ],
  • "staff_id": "string",
  • "location_type": "空港",
  • "location_id": "string"
}

Response samples

Content type
application/json
{
  • "message": "行き先データがありません"
}

配達ステータス強制変更

配送ステータス強制変更API

path Parameters
destination_id
required
string

行き先ID

Request Body schema: application/json
required
delivery_status
required
string

配送ステータス

application_ids
required
Array of strings

Responses

Request samples

Content type
application/json
{
  • "delivery_status": "string",
  • "application_ids": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "行き先データがありません"
}

ホテル

ホテル関連のエンドポイント

ホテル認証コード一覧

hotelIdに該当するデータを認証コードテーブルからすべて引っ張ってくる

path Parameters
hotel_id
required
string

ホテルID

Responses

Response samples

Content type
application/json
{
  • "codes": [
    ]
}

検品荷物情報取得

1. ホテルデータの取得

ホテルID と一致するホテルデータを、ホテルテーブルから検索する。

2. 申込データの取得

取得したホテルデータの ID に紐づく申込データを、申込テーブルから取得する。

3. 荷物データの取得

見つかった申込データと紐づく荷物データを検索し、結果として返却する。

path Parameters
hotel_id
required
string

ホテルID

Responses

Response samples

Content type
application/json
{
  • "application_info": {
    },
  • "luggage_info": {
    }
}

検品完了

検品完了状態にする

path Parameters
hotel_id
required
string

ホテルID

Request Body schema: application/json
required
luggage_qr_codes
required
Array of strings

Responses

Request samples

Content type
application/json
{
  • "luggage_qr_codes": [
    ]
}

Response samples

Content type
application/json
{
  • "message": "ホテルデータがありません"
}

ホテルグループに属するホテル一覧取得

  • 指定されたグループIDに紐づくホテル情報を、ホテルテーブルから取得。
  • 取得したホテルデータをエリア単位でグルーピングし、所定のソート順で並び替えたうえで、フロントエンドへ返却
path Parameters
group_id
required
string

グループID

Responses

Response samples

Content type
application/json
{
  • "group": {
    }
}

ホテルグループ認証コード検証

※ クーポンと言っているが、割引などではなく認証のためのコードなので注意

データ取得

  • ホテルテーブルからhotel_idと合致するデータを取得
  • ホテルデータからホテルグループidをとりあえず
  • クーポンコードテーブルからホテルグループid,coupon_codeが合致するデータを取得する

検証

取得したクーポンコードデータについて、以下の条件で「今日の日時」が有効期間内かどうかを検証する。

適用開始日時 ≤ 今日の日時 < 適用終了日時

上記条件を満たす場合、認証は有効と判定する。

Request Body schema: application/json
required
hotel_id
required
string

ホテルid

coupon_code
required
string

クーポンコード

Responses

Request samples

Content type
application/json
{
  • "hotel_id": "string",
  • "coupon_code": "string"
}

Response samples

Content type
application/json
{
  • "result": true
}

マスタ

マスタデータ関連のエンドポイント

出庫元登録

csvの内容を出庫元テーブルに登録

Request Body schema: multipart/form-data
required
csv_file
required
string <binary>

csvファイル

Responses

行き先登録

csvの内容を行き先テーブルに登録

Request Body schema: multipart/form-data
required
csv_file
required
string <binary>

csvファイル

Responses

荷物経路登録

csvの内容を荷物経路テーブルに登録

Request Body schema: multipart/form-data
required
csv_file
required
string <binary>

csvファイル

Responses

荷物経由地登録

csvの内容を荷物経由地テーブルに登録

Request Body schema: multipart/form-data
required
csv_file
required
string <binary>

csvファイル

Responses

車両スタッフ割当登録

csvの内容を車両スタッフ割当テーブルに登録

Request Body schema: multipart/form-data
required
csv_file
required
string <binary>

csvファイル

Responses

配達車両登録

csvの内容を車両テーブルに登録

Request Body schema: multipart/form-data
required
csv_file
required
string <binary>

csvファイル

Responses