CSVエクスポートAPI


概要

{primary} ルートパラメーターに応じた種類のCSVを返却するAPIです。

監理団体アカウントで、ステータスが 5:利用中 のユーザのみ利用できます。

また、監理団体のマスター、管理者、一般に制限なく利用することができます。


CSVエクスポート処理

ルートパラメータのチェック

  • 1:実習実施先, 10:技能実習生, 20:送出機関 以外のパラメータが来たときは
    result:true の空配列を返します。

レスポンスを参照。

文字化け対策のため文字コードを設定

  • CSVファイルはSJIS-winで、DBなどから抽出するときはutf-8なので対策が必要。
  • setFormCharset()とsetToCharset()にて対策。

返却処理

  • HTTPヘッダーの設定をします。
ヘッダー設定 設定内容 概要
Content-type text/csv CSV形式
Content-Disposition attachment; filename=〇〇.csv 添付ファイルがある旨と、ファイル名が〇〇.csv
Pragma no-cache キャッシュ(情報保存)無し
Cache-Control must-revalidate, post-check=0, pre-check=0 キャッシュ期限切れなら確認
Expires 0 キャッシュの有効期限は0
  • 定義した1行目の情報を実際にファイルに記述します。
  • データベースからルートパラメータに対応するデータを取得します。
  • 取得したデータを1行ずつcsvファイルに追記していきます。

参考ファイル

https://coinbaby8.com/php-csv-export.html

https://qiita.com/mikankari/items/679d2ba1a63190fb5dfa

https://tkkm.tokyo/post-177/

{danger} 挙動の不明点が多いので、一旦ここまで記述しておきます。

実装後詳しい挙動などについては追記する予定です。


エンドポイント

メソッド URI Headers
GET /api/csv/{type} Default

リクエストパラメーター

ROUTEパラメータ

パラメーター名 内容 特記
type int エクスポートファイル種類 Enum参照
/api/csv/1

レスポンス

成功時
パラメーター名 内容 特記
file file CSVファイル CSVデータで返却

※ 多分できる想定。できなかったらご連絡を。

{
    "result"   : true,
    "errors"   : "",
    "data"     : {
        'file'                   : csvdata............,
    },
}
失敗時

ステータスコード:200

パラメーター名 内容 特記
result boolean リクエスト結果
error List 失敗した理由を配列
{
  "result"   : false,
  "errors"   : {
    'error'       : ['失敗しました'],
  },
  "data"     : "",
}

{primary} 何もなければ空配列で返却。typeが空の場合や、1,10,20以外の場合の存在しないコードが来た場合を

想定しています。取得するデータが存在しないため

失敗ではなく、成功として返却します。

エラー件数は上限100件までとします。


{danger} 失敗時は200以外のエラーコードが返却されます。共通ルールのレスポンスをチェック。


データ取得

実習実施先のデータをエクスポートする場合

  • 全てのデータを取得した後に監理団体ID、削除理由のカラム、作成日時、更新日時、削除日時を除外します。
  • 上記5つはインポートの際に変更出来ないカラムであるためです。
SELECT
    *
FROM
    `clients`
WHERE
    `organization_id` = Auth::organizationId()
AND `clients`.`deleted_at` IS NULL

技能実習生のデータをエクスポートする場合

  • 全てのデータを取得した後に監理団体ID、ステータス、削除理由のカラム、作成日時、更新日時、削除日時を除外します。
  • 上記6つはインポートの際に変更出来ないカラムであるためです。
SELECT
    *
FROM
    `trainees`
WHERE
    `trainees`.`organization_id` = Auth::organizationId()
AND `trainees`.`deleted_at` IS NULL

送出機関のデータをエクスポートする場合

  • 全てのデータを取得した後に監理団体ID、作成日時、更新日時、削除日時を除外します。
  • 上記4つはインポートの際に変更出来ないカラムであるためです。
SELECT
    *
FROM
    `sending_agencies`
WHERE
    `sending_agencies`.`organization_id` = Auth::organizationId()
AND `sending_agencies`.`deleted_at` IS NULL
  • 上記のSQLで取得したsending_agenciesのIDを$sendingAgencyIdとします。
  • ログインIDを取得します。

{warning} SQLを記載しましたが、実際に取得する場合はリレーションで取得します。

SELECT
    `login_id`
FROM
    `accounts`
WHERE
    `accounts`.`organization_id` = Auth::organizationId()
AND `accounts`.`sending_agency_id` = $sendingAgencyId
AND `accounts`.`deleted_at` IS NULL