CODE-264 スケジュール機能

2022-07-14 - 2022-07-18

  • CODE-264

  • Vueで通知を実装できるか (5h)

    • Web Pushだと微妙か
    • client始動にしたい
      • リアルタイム
        • pollingが丸いか(setInterval & clearInterval)
        • Web Socket? or gRPC
        • BE: SpringなのでSocket.ioは使えない
      • 非リアルタイム
        • ページ読み込み時にDB問い合わせ
        • localStorage
    • or Springでcron

Spring Boot 定期実行

PR

# 修正内容
- 掲載期限の通知バッチ, 取引期限を通知バッチとテストの実装を致しました。
どちらも毎時(cron = `0 0 * * * *`)定期実行され、どちらも期限日まで24時間を切ったら通知を追加する仕様となっています。
また、取引ダミーデータ投入処理(`DealSeeder`) のリファクタリング(ランダム性を無くし, 網羅的に生成されるように) をしました。

## (追記) `application.yaml` への設定値の追加について
バッチ毎に設定値をまとめてあります。

```yaml
batch:
  # 掲載期限通知
  notify-published-period-approaching:
    cron: "0 0 * * * *"
    # cronの実行間隔(sec)
    cron-interval-sec: 3600
    # 何秒後の期限切れを通知するか(sec)
    notify-before-sec: 86400
  # 取引期限通知
  notify-deal-end-time-approaching:
    cron: "0 0 * * * *"
    # cronの実行間隔(sec)
    cron-interval-sec: 3600
    # 何秒後の期限切れを通知するか(sec)
    notify-before-sec: 86400
    # 取引開始から終了までの秒数(デフォルト: 7日間 = 604800sec)
    published-period-expired-sec: 604800
```

## EntityRepositoryの実装について
ざっと調査した限りではJPQLは日付の演算に対応していないようなので`DealEntityRepository.findByDealStartTimeBetweenAndDealStatusesIn()` はnative query(PostgreSQL依存)として書いています。

お手すきの際にご確認お願いします。