-
Notifications
You must be signed in to change notification settings - Fork 2
Home
簡単な説明は、例会講座の話 (Scrapbox) にある。
以下に仕様書を示す。各バージョンごとの仕様の差分は、それぞれのページを参照されたい。
Slack User ID | 登録日 | 希望曜日 | 担当日 | 割り当てグループ | 割り当て日 | 割り当て状態 | 割り当てメッセージのタイムスタンプ |
---|---|---|---|---|---|---|---|
U01U7S3UFAB | 20211107 | 1 | 20211128 | 20211128 | 20211107 | 10 | 1640084405.000900 |
create table reikai_kouza (id varchar(30), registration_date int, preferred_day_of_week tinyint, assigned_date int, assignment_group int, announced_date int, announcement_status tinyint, message_ts varchar(20));
大きめに、英数字 30 文字程度までとしておく (VARCHARには長さプレフィックスが含まれる)
整数型 (20210107のように保存)
システムへの登録日
未回答 = -1, どちらも = 1, 月曜 = 2, 木曜 = 3
登録日と同じ形式
登録日と同じ形式
割り当てグループの日付は発表日を表す。
この値は、延期した場合にのみ延期先の日付で更新され、それ以外の場合は更新されない。
システムにより割り当てが行われ、Slack上で通知が行われた日付
日時指定が行われたかどうか、およびそれにたいして何らかのアクションがあったかを表す
0 = 未割り当て, 1 = 返信なし, 2 = キャンセル, 3 = 延期, 10 = 対処済み
割り当て時に送信されるメッセージのタイムスタンプ
毎日動作するもの
追加の割り当て → 更新 → 割り当て → 公開・告知の順にチェック・実行される。
毎週 月、木曜日にそれぞれ1回実行され、1週間で2名に割り当てが行われる。 割り当てグループで探索して、既に1人以上いれば割り当てない。
延期により決定した担当日を優先し、残った枠について振り分けを行う。 振り分けの条件は以下の通り
「登録日から3ヶ月以上経過している
かつ 希望曜日である (「未回答」は「どちらでも」と同じ扱い)
かつ 割り当てグループから3ヶ月以上経過している
かつ 割り当て状態が0
」
条件に一致する部員がいなければ、何も行わない。
Slackに送信したら、割り当て状態を1に、割り当てグループを対象の担当日の日付で、割り当て日をその日付でそれぞれ更新する。
-
返答があった場合
ボタンを押せないようにしておく。その日付で確定された場合: 割り当てグループの日付で担当日を登録し、割り当て状態を10に更新。
延期の場合: 延期先の日付で担当日を登録し、割り当て状態を3に更新。(割り当てグループの更新は、追加の割り当て時に行う) 当該の割り当てグループは追加の割り当ての対象となる。
スキップした場合: 割り当て状態を2に更新。追加の割り当ての対象となる。 -
返答がなかった場合
2日間待って返答がなかった場合、追加の割り当ての対象となる。ボタンを押せないようにする。
追加の割り当ては、「現在の日付から3週間以内
かつ 現在の日付から2週間以上先
」を満たす割り当てグループにのみ実行される。
「現在の日付からみて2週間先よりも直近
」の割り当てグループに対しても同様の操作を行うが、割り当ての呼び出しは行わない。
追加の割り当ては以下の条件で発生する。
「割り当て状態が1 かつ 割り当て日から2日が経過している
または 割り当て状態が2である
または 割り当て状態が3である
」
割り当てグループはもとの値を引き継ぎ、割り当て日は実際の日付で更新する。
ボタンを押せないようにした上で、もとの部員の割り当て状態を10に更新する。
割り当てグループはもとの値を引き継ぎ、割り当て日は実際の日付で更新する。
もとの部員の割り当て状態を10に更新する。
割り当てグループはもとの値を引き継ぎ、割り当て日は実際の日付で更新する。
もとの部員の割り当てグループを延期先の日付 (担当日) で更新した上で、割り当て状態を10に更新する。
登録日から3ヶ月以上経過している
を満たす全員が、割り当て状態が10
になったら、全員の割り当て状態を0に更新する。
登録日から2ヶ月半が経過したら、自動的に送付する。
既存の部員には前もって送付するため、単独で実行可能になっていると良い。
担当日の1週間前に #active で担当者が公開される。担当日
だけでなく、割り当て状態
も併せて確認する。(将来的な実装の足かせにならないように、なるべく厳密な判定をする)
新しい例会講座システムの説明を送信する。既存の部員に対してはシステムの稼働前に一斉送信、新規の部員にはデータベースへの登録時に送信する。
/reikai-kouza-check
を用いて、現在登録されている例会講座の担当日を確認できる。
単にDBから担当日を取得して、現在の日付より後の値になっていればそれを通知すればよい。
例会講座の担当を登録した翌日から (そのままの日付で登録した場合は当日から) 講座担当日の前日までの間は、登録のキャンセルが可能である。スラッシュコマンド /reikai-kouza-cancel
を使用して手続きを行う。
手続きは、「担当日が今日より先の日付
かつ 割り当て状態が10または0
かつ 9:45~10:15の間ではない
」を満たす場合のみ行うことができる。
割り当て状態を10から2に書き換えるとともに、担当日を-1に設定する。
担当日を-1に設定する。
システムの稼働時のみ実行される。
登録日は実際の日付の6ヶ月前、希望曜日は-1 (未回答)、担当日は-1、割り当てグループは実際の日付の6ヶ月前、割り当て日は実際の日付の6ヶ月前、割り当て状態は0
で追加する。
同時に、希望曜日を聞く。
1日1回更新される。
名簿に追加があった場合、以下のとおりに追加する。
登録日は実際の日付、希望曜日は-1 (未回答)、割り当てグループは実際の日付の6ヶ月前、割り当て日は実際の日付の6ヶ月前、割り当て状態は0
で追加する。
また同時に、Slack上で3ヶ月後から割り当てがある旨の告知をしておく。
約2ヶ月半経ったら希望曜日を聞く。
名簿から削除する場合は、そのまま部員の情報を消す。
- システムの稼働時、入部したての部員も対象となる。 (影響範囲が限定的であるため、対応は見送り)
- 延期日が被ってしまった場合、現状は人数の過剰状態に対して対応する手段がない
- 例会の開催がない日にも割り当てが発生する
- 割り当てグループから3ヶ月以上としている点 (現状、延期は2週間程度までしか想定していないため)
- 既存の部員の登録時、登録日と割り当てグループを実際の日付の6ヶ月前にしている点 (3ヶ月以上前の日付にしておかないと、指名の対象にならない)
- 新規部員の登録時、割り当てグループを実際の日付の6ヶ月前にしている。 (上記と同等の理由)
日付情報は、全て外部から呼び出しと同時に指定する。これは、各種検証やサーバーメンテナンスに対応するための措置である。