[API] 大青工業日報Webアプリ (1.0)

Download OpenAPI specification:Download

大青工業日報アプリ

大青工業 日報Webアプリ API仕様書

予定/実績(日程)

作業日報一覧

  • 認証失敗[401]

--

作業日報一覧を取得するAPI

指定日を含む週のログインユーザーの日報と日程データを全て取得する

  • 日付が未指定の場合は、実行された日付が指定されたものとして処理
  • 該当の週は月曜始まり
query Parameters
date
string

日付をyyyy-MM-dd形式で指定

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

予定/実績登録

  • バリデーションエラー[400]
  • 認証失敗[401]
  • 「ロックされているため登録することができません。」[422](対象日がロックされている場合)
  • 「1日に登録可能な○○は6件までです。」(○○=予定or実績)[422](登録先の日程タイプに既に6件存在している場合)

--

予定または実績の登録を行う
社員IDはログイン中ユーザーのIDを使用する

  1. nittei を登録 => nittei が yotei の場合はここで終了
  2. shain_id と date に一致する nippou が存在するかチェック => 存在しない場合: nippou を新規作成
  3. nippou を更新
  • 休暇に関連する場合は対象外
  • 休暇を除くその日の日程の最も早い時間が出社時間、遅い時間が退社時間になるように実装
Request Body schema: application/json
type
required
string
Enum: "yotei" "jisseki"

日程タイプ yotei または jisseki

date
required
string <date>

日付(yyyy-MM-dd)

start_at
required
string <date-time>

開始時間(yyyy-MM-dd hh:mm:ss)

end_at
required
string <date-time>

終了時間(yyyy-MM-dd hh:mm:ss)

title
required
string

タイトルまたは作業内容

comment
string or null

コメント

kouji_id
string or null <= 15 characters [A-Z]{2}[0-9]{2}-[0-9]+(-[0-9A-Z]+){0,1}

工事番号(工事ID)

kyakusaki
string or null

客先名

Responses

Request samples

Content type
application/json
Example
{
  • "type": "yotei",
  • "date": "2022-06-01",
  • "start_at": "2022-06-01 08:00:00",
  • "end_at": "2022-06-01 12:00:00",
  • "title": "現場A",
  • "comment": "aaa\nbbb\nccc",
  • "kouji_id": "AZ09-09-09AZ",
  • "kyakusaki": "AAAA(株)"
}

Response samples

Content type
application/json
{
  • "message": "リクエストの内容が不正です",
  • "errors": {
    }
}

予定/実績取得

  • 認証失敗[401]
  • アクセス権限がない[403](ログインユーザーが管理者ではなく、日程IDに紐づく本人以外の場合)
  • 一致するデータがない[404]

日程IDに一致する予定または実績のデータを取得する

path Parameters
id
required
string
Example: 2433dfca-3b49-45cd-bc40-09e8a3e6d17a

日程ID

Responses

Response samples

Content type
application/json
{
  • "type": "yotei",
  • "date": "2022-07-01",
  • "start_at": "2022-07-01 08:00:00",
  • "end_at": "2022-07-01 12:00:00",
  • "kouji_id": null,
  • "kyakusaki": null,
  • "title": "現場AAA",
  • "comment": null,
  • "is_locked": false
}

予定/実績更新

  • バリデーションエラー[400]
  • 認証失敗[401]
  • アクセス権限がない[403](管理者ではないまたは編集権限のある部署に所属していないユーザーが自分以外の日程を更新しようとしている場合)
  • 一致するデータがない[404]
  • 「ロックされているため更新することができません。」[422](ロックされている日程を更新しようとしているユーザーが管理者ではない、または編集権限のある部署に所属していない場合)
  • 「1日に登録可能な○○は6件までです。」(○○=予定or実績)[422](変更先の日程タイプに既に6件存在している場合)

日程ID(@path)に一致する日程データを更新する

nittei.type が jisseki だった場合は nippou を更新

  • 休暇に関連する場合は対象外
  • 休暇を除くその日の日程の最も早い時間が出社時間、遅い時間が退社時間になるように実装
  • 休暇を除くその日の日程が存在しない場合は日報データを削除

ロックされている日報を変更する場合 管理者かつ日程編集権限のある部署に所属している場合編集可能とする

path Parameters
id
required
string
Example: 2433dfca-3b49-45cd-bc40-09e8a3e6d17a

日程ID

Request Body schema: application/json
type
required
string
Enum: "yotei" "jisseki"

日程タイプ yotei または jisseki

date
required
string <date>

日付(yyyy-MM-dd)

start_at
required
string <date-time>

開始時間(yyyy-MM-dd hh:mm:ss)

end_at
required
string <date-time>

終了時間(yyyy-MM-dd hh:mm:ss)

title
required
string

タイトルまたは作業内容

comment
string or null

コメント

kouji_id
string or null <= 15 characters [A-Z]{2}[0-9]{2}-[0-9]+(-[0-9A-Z]+){0,1}

工事番号(工事ID)

kyakusaki
string or null

客先名

Responses

Request samples

Content type
application/json
Example
{
  • "type": "yotei",
  • "date": "2022-06-01",
  • "start_at": "2022-06-01 08:00:00",
  • "end_at": "2022-06-01 12:00:00",
  • "title": "現場A",
  • "comment": "aaa\nbbb\nccc",
  • "kouji_id": "AZ09-09-09AZ",
  • "kyakusaki": "株式会社AAA"
}

Response samples

Content type
application/json
{ }

予定/実績削除

  • 認証失敗[401]
  • アクセス権限がない[403](ログインユーザーが管理者ではなく、日程IDに紐づく本人以外の場合)
  • 一致するデータがない[404]

--

日程IDに一致する日程を削除する

jisseki が削除された場合は同日の日報データの timecard を修正する
※jisseki が1件しか存在せず、そのjissekiを削除する場合は日報も削除するようにしてください。

path Parameters
id
required
string
Example: 2433dfca-3b49-45cd-bc40-09e8a3e6d17a

日程ID

Responses

Response samples

Content type
application/json
{ }

予定/実績フォーム項目取得

  • 認証失敗[401]
  • アクセス権限がない[403](ログインユーザーが管理者ではなく、ログインユーザーの部署とbusho_id(@path)が一致しない場合)
  • 一致するデータがない[404]

--

busho_id(@path)に一致する busho の日程フォーム項目に関連するフラグを返却する

path Parameters
busho_id
required
integer

部署ID

Responses

Response samples

Content type
application/json
{
  • "nittei_show_kouji_id": true,
  • "nittei_show_kyakusaki": false,
  • "nittei_can_multi_line_input_title": false
}

休暇日程登録

  • バリデーションエラー[400]
  • 認証失敗[401]
  • 「ロックされているため登録することができません。」[422](対象日がロックされている場合)
  • 「1日に登録可能な○○は6件までです。」(○○=予定or実績)[422](登録先の日程タイプに既に6件存在している場合)

--

Request を基に nittei に登録する

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

日付(yyyy-MM-dd)

nittei_type
required
string
Enum: "yotei" "jisseki"

日程タイプ

kyuka_type
required
string
Enum: "kekkin" "yuukyu" "daikyu" "dokyu" "koukyu" "tokubetu"

休暇タイプ

time_type
required
string
Enum: "zenkyu" "gozenkyu" "gogokyu"

休暇時間タイプ

comment
string or null

Responses

Request samples

Content type
application/json
{
  • "date": "2022-07-04",
  • "nittei_type": "yotei",
  • "kyuka_type": "yuukyu",
  • "time_type": "zenkyu",
  • "comment": "通院のため"
}

Response samples

Content type
application/json
{ }

工事番号一覧

  • 認証失敗[401]

--

工事番号一覧を取得するAPI
jutyuubiの最新50件分+固定の工事番号を返却する

display_text: 「id kokyaku_name name」
search_text: 「id,kokyaku_name,name,kokyaku_name_kana」

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

日報

日報一覧

  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)

--

条件に一致する社員の指定日の日報データを返却する

ログインユーザーの部署が総務の場合: retired が 0(false) の社員全員分の日報を返却する
総務以外の場合: retired が 0(false) かつログインユーザーと同じ部署の社員全員分の日報を返却する

ソート※フロントのソートでも使用するかもしれないので、この要素はレスポンスにも含む

  1. (総務の場合のみ)部署表示順の昇順
  2. 氏名(かな)のあいうえお順

※日報が存在しない場合でも該当社員全員分の配列を返却する
※date(@param)の指定がない場合は当日とみなす

query Parameters
date
string

取得したい日報の対象日

Responses

Response samples

Content type
application/json
Example
[
  • {
    },
  • {
    }
]

日報詳細

  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)
  • 一致するデータがない[404]

--

社員IDに一致する実績日程情報を対象日から対象日6日前までの7日間分を取得
※date(@param)の指定がない場合は当日とみなす

kouji: kouji_id が kouji テーブルに存在するかしないかで値が変わる
存在する場合は(koujiテーブルの)「id kokyaku_name name」
存在しない場合は nittei の kouji_id

path Parameters
shain_id
required
string
Example: 1

社員ID

query Parameters
date
string

取得したい日程の対象日

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    }
]

社員

社員(ユーザー)一覧

  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)

--

shain テーブルから retired が 0(false) の社員を取得
以下の条件でソートして返却する

  1. 部署のdisplay_orderの昇順
  2. 氏名(かな)の昇順(?)(あいうえお順)

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    }
]

社員(ユーザー)登録

  • バリデーションエラー[400]
  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)

--

  1. 社員を登録
  2. 登録した社員のメールアドレス宛に招待メールを送信

※メール送信に失敗した場合はDBをロールバックしてください。

Request Body schema: application/json
last_name
required
string

姓

first_name
required
string

名

short_name
string or null

氏名(略称)

kana
required
string^[\u3040-\u309F]+$

氏名(かな)

email
required
string

メールアドレス

password
required
string

パスワード

password_confirmation
required
string

パスワード確認

busho_id
required
integer

部署ID

is_administrator
required
boolean

管理者を選択した場合true

is_mh_list_target
required
boolean

作業時間集計対象フラグ

Responses

Request samples

Content type
application/json
{
  • "last_name": "山田",
  • "first_name": "太郎",
  • "short_name": "山田(太)",
  • "kana": "やまだたろう",
  • "email": "yamada@gmail.com",
  • "password": "4gHErv4iVECs",
  • "password_confirmation": "4gHErv4iVECs",
  • "busho_id": 1,
  • "is_administrator": false,
  • "is_mh_list_target": true
}

Response samples

Content type
application/json
{
  • "message": "リクエストの内容が不正です",
  • "errors": {
    }
}

社員(ユーザー)詳細取得

  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)
  • 一致するデータがない[404]

--

path Parameters
id
required
integer
Example: 1

社員ID

Responses

Response samples

Content type
application/json
{
  • "id": 1,
  • "last_name": "山田",
  • "first_name": "太郎",
  • "short_name": "山田(太)",
  • "kana": "やまだたろう",
  • "email": "yamada@gmail.com",
  • "busho_id": 1,
  • "is_administrator": false,
  • "is_mh_list_target": true
}

社員(ユーザー)更新

  • バリデーションエラー[400]
  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)
  • 一致するデータがない[404]

--

メールアドレスの重複は同一idのメールアドレスを除く

パスワードは入力されている場合のみ更新する
また、パスワードが入力されている場合はパスワード確認も必ず入力され、一致している必要がある

path Parameters
id
required
integer
Example: 1

社員ID

Request Body schema: application/json
last_name
required
string
first_name
required
string
short_name
string or null
kana
required
string^[\u3040-\u309F]+$
email
required
string
password
string or null
password_confirmation
string or null
busho_id
required
integer
is_administrator
required
boolean
is_mh_list_target
required
boolean

Responses

Request samples

Content type
application/json
Example
{
  • "last_name": "山田",
  • "first_name": "太郎",
  • "short_name": "山田(太)",
  • "kana": "やまだたろう",
  • "email": "yamada@gmail.com",
  • "password": "4gHErv4iVECs",
  • "password_confirmation": "4gHErv4iVECs",
  • "busho_id": 1,
  • "is_administrator": false,
  • "is_mh_list_target": true
}

Response samples

Content type
application/json
{ }

社員(ユーザー)削除

  • 認証失敗[401]
  • アクセス権限がない[403](管理者のみ)
  • 一致するデータがない[404]
  • 自分を削除しようとしたとき[422]
  • 最後の管理者を削除しようとしたとき[422]

--

一致する社員の retired を 1(true) にする

path Parameters
id
required
integer
Example: 1

社員ID

Responses

Response samples

Content type
application/json
{ }

部署一覧

busho マスタに登録されているデータを全件返却する
display_order の昇順でソート

Responses

Response samples

Content type
application/json
[
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    },
  • {
    }
]

ログイン/パスワード関連

パスワード再設定メール送信

  • バリデーションエラー[400]
  • 一致するデータがない[404]

--

パスワード再設定画面のリンクを記載したメールを送信する  

  1. email(@param) が shain テーブルに存在するかチェックを行う
  2. 一致するユーザー(社員)が存在する場合、トークンを発行し、shain_id と token を社員トークンテーブルに保持
  3. メールを送信

※メール送信に失敗した場合はすべての処理を最初からやり直すためDBもロールバックしてください。

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

Responses

Request samples

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

Response samples

Content type
application/json
{ }

パスワード再設定トークンチェック

  • アクセス期限切れ[404]

  • トークンが存在しない場合 => 404
  • トークンが存在したが、有効期限が切れている場合 => トークンをDBから削除して 404
  • トークンが存在し、有効期限内の場合 => 204

このAPIが成功した場合トークンは有効期限内のため、パスワード再設定画面を表示する

path Parameters
token
required
string

パスワード再設定トークン

Responses

Response samples

Content type
application/json
{ }

パスワード再設定(未ログイン)

  • バリデーションエラー[400]
  • アクセス期限切れ[404]
  • トークンが存在しない[404]

--

  1. token(@path)を社員トークンテーブルから探す=>一致するものがなければ404
  2. 有効期限をチェック=>有効期限外であれば404
  3. 紐づく社員IDを基に入力されたパスワードをハッシュ化して社員テーブルを更新
  4. 再設定が終わったら token を削除

※パスワードの強度は要確認

path Parameters
token
required
string

パスワード再設定トークン

Request Body schema: application/json
password
required
string
password_confirmation
required
string

Responses

Request samples

Content type
application/json
{
  • "password": "ryh9QyqxPAP8",
  • "password_confirmation": "ryh9QyqxPAP8"
}

Response samples

Content type
application/json
{ }

パスワード再設定(ログイン)

  • バリデーションエラー[400]
  • 認証失敗[401]
  • アクセス権限がない[403](ログインユーザーと社員IDが一致していない場合)

--

ログイン中のユーザー本人が設定からパスワードを変更する場合に実行するAPI

※管理者が変更する場合はユーザー更新APIで変更する ※パスワードの強度は要確認

path Parameters
shain_id
required
integer

社員ID

Request Body schema: application/json
current_password
required
string
new_password
required
string

Responses

Request samples

Content type
application/json
{
  • "current_password": "4gHErv4iVECs",
  • "new_password": "ryh9QyqxPAP8"
}

Response samples

Content type
application/json
{ }

ログイン

  • バリデーションエラー[400]
  • 認証失敗[401]

--

認証に成功した場合ログインしたユーザーの情報を返却する

※ログイン保持の期間を長め(1か月くらい)にしておく

Request Body schema: application/json
email
required
string

メールアドレス

password
required
string

パスワード

Responses

Request samples

Content type
application/json
{
  • "email": "sample@gmail.com",
  • "password": "4gHErv4iVECs"
}

Response samples

Content type
application/json
{
  • "id": 1,
  • "busho_id": 1,
  • "first_name": "太郎",
  • "last_name": "山田",
  • "email": "yamada@gmail.com",
  • "retired": false,
  • "is_administrator": true,
  • "can_edit_nippou": false
}

ログインユーザー情報取得

  • 認証失敗[401]

--

認証に成功している場合ログインユーザーの情報を返却する

Responses

Response samples

Content type
application/json
{
  • "id": 1,
  • "busho_id": 1,
  • "first_name": "太郎",
  • "last_name": "山田",
  • "email": "yamada@gmail.com",
  • "retired": false,
  • "is_administrator": true,
  • "can_edit_nippou": false
}

ログアウト

ログアウト処理を行う

Responses

Response samples

Content type
application/json
{ }