# てんこっこ 仕様書
[リポジトリ(develop ブランチ)](https://github.com/tsuyama17s/tenkokko/tree/develop)
[プロジェクトボード](https://github.com/orgs/tsuyama17s/projects/2)
## アプリ名
* tenkokko
* linebotmessage-tenkokko(LINE bot)
## Branch
* develop
* User
* user_login (takishun)
* user_db (takishun)
* user_index
* user_index_rollcallgone(takishun)
* Admin
* migration
## テストデータ代入(seeder, migrate)
毎回pullした後はseederとmigrationファイルの内容が変わっている可能性があるので、ローカルのDBに反映させたいときは、
``` php artisan migrate:refresh --seed```
うまくクラスを認識しない時は
```composer dump-autoload```
## 命名規則
命名規則やっぱりデフォルトでありました... [link](https://qiita.com/gone0021/items/e248c8b0ed3a9e6dbdee)
## 使用技術
* Laravel
* AWS (DynamoDB, AmazonRDS...)
* 条件, query(同時接続1000くらい,安いやつがいい)
* 1日に782(=391人*2回(朝/夜))リクエスト
* LINE bot (DBを使用しない)
## 仕様
* Adminが予め学籍番号、苗字、名前を管理画面から追加すると、ランダムパスワードが生成され、自動でinsertされる
* LINE bot のメッセージ(URLつき)で点呼の時間、状況をお知らせ
* ログインに学籍番号 -> 苗字、名前を登録(入力)させる
* 位置情報を取得して学校敷地内であるかどうか識別
* 朝点呼(時間内のみアクセス可能,adminで集計ボタンを押すと集計開始(不在のカウント))
* 夜点呼(遅刻でない時間帯にアクセスすると、ちゃんと出席。遅刻の時間帯なら遅刻。点呼時間外なら)
### 管理者(admin)
* 日付ごとの点呼状況がわかる
* 一日ごとの点呼実施予定(時間)をカスタマイズできる
* 生徒を登録できる
## ページ
### user(student)
| URL | 処理 |
|-----|-----|
|/user/login.php|ログイン画面|
|/user/index.php|ホーム画面(お知らせ等)ログインしないと開けない|
|/user/rollcall.php|点呼画面|
### admin(officer)
| URL | 処理 |
|-----|-----|
|/admin/login.php|管理者ログイン画面|
|/admin/index.php|管理者ホーム画面|
|/admin/home/setting.php |設定画面(点呼の開始時間など)|
|/admin/home/manager.php|管理者管理画面|
|/admin/home/student.php| 新しい生徒の登録&変更|
|/admin/home/schedule.php| 点呼スケジュールを変更 |
|/admin/home/rollcallgone.php | 点呼不在者の集計&表示
## LINEbot
[時間指定でメッセージ送信](https://note.com/toshioakaneya/n/ndd1c6647d53d)
## Laravel
### ちょっとした仕様
* FormのPOSTには@csrfを使う。デフォルトでcsrfを求められ、書き忘れるとリクエスト送信時にエラーが発生
* [定義済みメソッドについて(ログイン、登録など)](https://kore1server.com/356/Laravel5.4、ルートページでログイン/ユーザ登録したい場合)
*
## 画面詳細
### User
* ログイン画面 user/login.php
* 認証に学籍番号とパスワードを入力。ログインに成功しないと基本的にはどのページにも遷移しない。
* ログイン成功-> user\index.php
* ログイン失敗-> user\login.php
(赤文字か何かで「入力情報に間違いがある」的なものを表示する)
* ホーム画面 user/index.php
* その日の点呼不在者のみ(rollcallgone テーブルのうち、statusが1と2のみ)を表示。(色は数字によって変える)
一定の人数まで表示する。ページ番号みたいなのをつける?かも。そしたら(user/ {$page_id}/index.phpになると思う。) => **一部のみ表示し、「一覧を見る」的なボタンを設置することにするべー**
* 今後寮のイベントやお知らせなどを表示させる(後回し)
* 点呼ページ(user/rollcall.php)に遷移するリンクを設置。ボタンでもよし(テキストは「点呼を行う」的な?)
* 点呼画面 user/rollcall.php
* 点呼の時間かどうか判定
-> 違うと「現在点呼の時間ではありません」と表示(**例外: 下の方の不在のパターン**)
* 位置情報を取得して寮の敷地内であるか判定(DBから参照)
-> 違うと「寮の敷地と認識されませんでした。寮の敷地内にいるならば、もう少し敷地の中心へ近づいてください」と表示。
* 点呼出席->rollcallattender テーブルへbooleanをtrueに
* 遅刻->rollcallattenderテーブルのbooleanをtrue
rollcallgoneテーブルにstatus:0で記録
* 不在
adminの集計によってカウントされる。その日の不在者であるならばrollcallgone テーブルのstatusが1->2になる
### admin(officer)
* 管理者ログイン画面 admin\login.php
* ログイン成功-> admin/index.php
* ログイン失敗-> admin/login.php
権限を設定しようかと
* 管理者ホーム画面 admin/index.php
* メインページ的な感じ
* いろんな機能へのリンク(ボタン?)てきなものが散りばめられてる
* 点呼スケジュールの表示もしたい
* 設定画面 (admin/home/setting.php)
点呼の時間を変える。
今はそれ以外思いついてない。
* 管理者管理画面(admin/home/manager.php)
管理者の追加、削除、変更など。テーブルをそのまま表示して、簡略化sql文を実行できるようにする。
* 生徒登録、編集画面
生徒登録する場合は、{学籍番号、苗字、名前}を設定するとランダムパスワードを生成し、DBにinsert(重複しないか判定をする)
編集画面の時は検索ボックス的なものから苗字で検索などをかけてそこから編集できるようにする。編集画面は管理者管理画面とほぼ同じかな?
* 点呼スケジュール画面(admin/home/schedule.php)
日にちをクリックするとその日が編集アクティブなモードになる。チェックボックスのような形式で、行う点呼をカスタマイズでき、その下には「変更を保存する」「変更を取り消す」ボタンを作る
* 点呼不在者の集計(admin\home\rollcallgone.php)
「点呼不在者情報を更新する」ボタンを用意する。**点呼時間外でないとそのボタンは押せない**。押すとrollcallattender テーブル内のfalseになっている人は、rollcallgone テーブルに追加される。
## DB
### User
* users テーブル
|カラム論理名|カラム物理名|型|型の意味|
|-|-|-|-|
|ID|id| SERIAL| 連番(自動採番)
|学年-クラス| grade_class|INTEGER| 数値(この数値をキーとしてstudentgradeclassテーブルのidと一致するものを取得)
|学籍番号(unique)| student_num | INTEGER | 数値
|部屋番号| room_num | INTEGER | 数値| 〇|
|苗字 | student_last_name | VARCHAR(20) | 20文字までの文字列
|名前 | student_first_name | VARCHAR(20) | 20文字までの文字列
|警告点|point | INTEGER | 数値(default: 0にしたい)
|パスワード|password|VARCHAR(100)| 100文字までの文字列(別の場所に作るかも)|
|最後に警告点を受けた日| last_point_date|DATETIME| 日付と時刻|
* studentgradeclasses テーブル
|カラム論理名|カラム物理名| 型|型の意味|
|-|-|-|-|
|ID|id| SERIAL| 連番(自動採番)
|学年|grade| INTEGER | 数値
|クラス| class|VARCHAR(10)|10文字までの文字列
---
### Admin
* admins テーブル
|カラム論理名|カラム物理名|型|型の意味
| - | - |-|-|
|ID|id|SERIAL| 連番(自動採番)
|苗字| admin_last_name |VARCHAR(20) | 20文字までの文字列
|名前| admin_first_name |VARCHAR(20) |
|パスワード | admin_password |VARCHAR(100) | 100文字までの文字列
|権限 | authority |INTEGER | 数値(default: 0)
---
### rollcall
点呼不在者一覧(部屋番号、苗字名前、日付、status(遅刻など))
* rollcallgones テーブル
|カラム論理名|カラム物理名|型|型の意味|
|-|-|-|-|
|ID | id | SERIAL | 連番 |
|学籍番号 | student_num |INTEGER | 数値
|ステータス| status | INTEGER | 数値(0:遅刻 , 1:不在, 2: 対応済み, 3:その他)
|作成日 | created_date | TIMESTAMP | 日付と時刻|
|更新日 | updated_at | TIMESTAMP | 日付と時刻
点呼出席者一覧
* rollcallattenders テーブル
|カラム論理名|カラム物理名|型|型の意味|
|-|-|-|-|
|ID|id| SERIAL | 連番
|学籍番号|student_num| INTEGER |数値|
|点呼済み|rollcall_bool | INTEGER |0or1
### location
位置情報(津山高専の寮の敷地の四隅)
>- location テーブル
>
>|カラム論理名|カラム物理名|型|型の意味|
|-|-|-|-|
|ID|id|SERIAL|連番
|右上(+x,+y)|right_up | INTEGER|数値
|右下(+x,-y)|right_down | INTEGER | 数値
|左上(-x,+y)|left_up | INTEGER|数値
|左下(-x,-y)|left_down | INTEGER|数値
### Schedule
点呼スケジュール(status:0~)
* schedules テーブル
|カラム論理名|カラム物理名|型|型の意味|
|-|-|-|-|
|ID|id|SERIAL|連番|
|ステータス|status| INTEGER|数値|
|日付|rollcall_day | DATETIME|日付 のみ|
点呼時間スケジュール
rollcall_time テーブル
// if 文にぶち込む
>|カラム論理名|カラム物理名|型|型の意味|
|-|-|-|-|
|ID|id|SERIAL|連番|
|点呼名称 | rollcall_label | VARCHAR(30) | 30文字までの文字列|
|開始時刻 |start_time | TIMESTAMP |時刻|
|終了時刻 |end_time |TIMESTAMP |時刻|
|遅刻ありなし | bool_late | TIMESTAMP | 時刻(0:00ならなし、それ以外ならあり)|
---
# controller
Controllers/
* User/
* IndexController.php