開始・終了イベントの予約
#WIP
例えばメディアサイトに掲載する広告記事を考える。掲載時間によって従量課金の料金体系とする。したがって、出稿するクライアントはできるだけ出費を減らしたいので、細かに掲載のコントロールをしたくなるだろう。さらには、出稿効果の高いと考える日程をスケジュールを組んで、掲載開始予約、掲載終了予約もできるようにしたい。
つまり、ある1つの広告記事について、以下のイベントが存在する。
掲載開始 (ユーザの操作または掲載開始予定日がきたらイベントが実行される)
掲載終了 (ユーザの操作または掲載終了予定日がきたらイベントが実行される)
掲載開始予約
掲載終了予約
簡単のため掲載開始予約、終了予約は、予定日が到来するまでは、その取り消しや予定日の変更が可能なものとする。
(すなわち以前の予約内容は失われてもよいものとする; 大抵の業務ではそれで許容されると思われる)
https://gyazo.com/ce8e2260d76de77c37cd94a5a98be90b
掲載開始終了(予定)対応のエンティティには、
掲載開始 - 掲載終了
掲載開始 - 掲載終了予定
掲載開始
掲載開始予定
掲載開始予定 - 掲載終了予定
のいずれかのデータが記録され、これらで表される期間に重複がないことを保証するのに使う。
このとき、各イベントが実行可能であるかどうかの判定は、ちょっと厄介なので、その整理をしておく。
掲載予定の空いてるところに、新たに掲載開始予定、掲載終了予定のペアもしくは、掲載開始予定を作ることができる
https://gyazo.com/c86edda8efe96e31531ad84363321be4
次の掲載予定が入っている、掲載終了予定を取り消すと、期間がマージされて、次の掲載開始予定も消える
https://gyazo.com/cc93e2a38960d13ad86d8989927aef50
掲載開始予定の取り消しは、単にその掲載開始予定、およびペアとなる掲載終了予定が取り消される。
https://gyazo.com/dd782f15d2dda284ee9638cda22de48f
後ろに掲載開始予定が入っている時、掲載終了予定なしで掲載開始したら、後ろの掲載開始予定は取り消す
https://gyazo.com/11b9e3b61a9f916f2aecc22035c05665