Conversation
1060529 to
0cb33ab
Compare
shoe116
left a comment
There was a problem hiding this comment.
差分は良さそう。
リリースする前にドキュメント加筆しないと危険だな。
ため、他のリリースをブロックしないようにマージは一旦保留します。 |
1800fcb to
f1e82e9
Compare
|
バグ修正は #65 に切り出してrebaseしました。 |
| public set forceOndemandApiEnabled(forceOndemandApiEnabled: boolean) { | ||
| this._forceOndemandApiEnabled = forceOndemandApiEnabled | ||
| } |
There was a problem hiding this comment.
this._ondemandApiEnabled が false だったら exception にしたいな。
逆に、 set ondemandApiEnabled のほうにも、forceOndemandApiEnabled だったら exception 吐くようにしておきたい。
UI でも validation するべきだと思うけど、 Setting class も「自身の辻褄」を守ってほしい
f1e82e9 to
324d65a
Compare
|
conflictしてたのでrebaseしました。 |
|
いくつかの実装変更を行いました。
スクリーンショット以下のシナリオを実行してみています。
2022-01-14.18.17.08.mov |
| result = bcodeDaily(client, ticker, parsedPeriod, propertyName, setting.ondemandApiEnabled) | ||
| result = bcodeDaily( | ||
| client, | ||
| ticker, | ||
| parsedPeriod, | ||
| propertyName, | ||
| setting.ondemandApiEnabled, | ||
| setting.isOndemandApiCallModeForce() | ||
| ) | ||
| } else { | ||
| result = bcodeQuarter(client, ticker, parsedPeriod, propertyName, setting.ondemandApiEnabled) | ||
| result = bcodeQuarter( | ||
| client, | ||
| ticker, | ||
| parsedPeriod, | ||
| propertyName, | ||
| setting.ondemandApiEnabled, | ||
| setting.isOndemandApiCallModeForce() | ||
| ) |
There was a problem hiding this comment.
BCODE のquarterとdailyそれぞれに雑に setting.isOndemandApiCallModeForce() を渡していますが、将来的には Setting に応じた従量課金の挙動を決定するストラテジークラスみたいなのを実装できると綺麗になりそうです。
| const setting = Setting.load() | ||
| setting.setDefaultToken() | ||
| setting.setDefaultOndemandApiEnabled() | ||
| setting.setDefaultOndemandApiCallMode() |
There was a problem hiding this comment.
インストール時に従量課金モードの初期状態を default (5年以上前のデータは従量課金エンドポイントを利用し、それ以外は定額エンドポイント利用する) にします。
There was a problem hiding this comment.
これを default って呼ぶかどうかがだいぶ難しいところだけど、まぁ
There was a problem hiding this comment.
元々は naive とかにしようとしたけどどのみち伝わらないし、短い言葉で説明するのは限界があるなと思って default としました。結局ただのプレースホルダだしまあなんでもいいかなと。
| const ondemandQuarterApiPeriods = ondemandQuarterApiPeriodRange.selectOndemandQuarterApiPeriod(ticker, range) | ||
| const quarterApiPeriods = ondemandQuarterApiPeriodRange.filterOndemandQuarterApiPeriod(ticker, range) | ||
| let ondemandQuarterApiPeriods = [] | ||
| let quarterApiPeriods = [] | ||
|
|
||
| if (setting.isOndemandApiCallModeForce()) { | ||
| ondemandQuarterApiPeriods = range.range() | ||
| } else { | ||
| ondemandQuarterApiPeriods = ondemandQuarterApiPeriodRange.selectOndemandQuarterApiPeriod(ticker, range) | ||
| quarterApiPeriods = ondemandQuarterApiPeriodRange.filterOndemandQuarterApiPeriod(ticker, range) | ||
| } |
There was a problem hiding this comment.
CSVのダウンロード機能は、従量課金モードが default の場合はよしなに従量課金のレンジと定額のレンジに分割して叩き分けますが、従量課金モードが force の場合はすべてのレンジを従量課金として扱います。
| private constructor(private _token, private _ondemandApiEnabled) {} | ||
| private constructor( | ||
| private _token: string, | ||
| private _ondemandApiEnabled: boolean, | ||
| private _ondemandApiCallMode: 'default' | 'force' | ||
| ) {} |
There was a problem hiding this comment.
もう少し頑張れば ondemandApiCallModes から 'default' | 'force' という直和型を作るようにできそうだったのですが、時間がかかりそうだったので素朴にstring literalで実装してます。
| if (!this.ondemandApiEnabled && this.ondemandApiCallMode !== Setting.defaultOndemandApiCallMode) { | ||
| return false | ||
| } |
There was a problem hiding this comment.
従量課金がオフなのに従量課金モードが default じゃない場合はinvalidとして扱っています。
| input[disabled] + label { | ||
| text-color: #777; | ||
| } |
There was a problem hiding this comment.
disabled なinput要素に隣り合う label 要素をグレーアウトさせるcssです。
| <li> | ||
| <input id="force-ondemand-api-check" type="checkbox" disabled="disabled"> | ||
| <label for="force-ondemand-api-check"><b>常に従量課金APIを利用する (制限回避モード)</b></label> | ||
| </li> |
There was a problem hiding this comment.
設定の読み込みが非同期なので、初期状態では強制従量課金モードは disabled にしています。設定読み込みが完了したときに従量課金が有効になっていたら disabled を解除しています。
| function onOndemandApiCheckChange() { | ||
| const ondemandApiEnabled = document.getElementById('ondemand-api-check').checked | ||
| const forceOndemandApiCheck = document.getElementById('force-ondemand-api-check') | ||
|
|
||
| // ondemand-api-checkの変更の都度初期化する | ||
| forceOndemandApiCheck.checked = false; | ||
|
|
||
| if (ondemandApiEnabled) { | ||
| forceOndemandApiCheck.disabled = false; | ||
| } else { | ||
| forceOndemandApiCheck.disabled = true; | ||
| } | ||
| } |
There was a problem hiding this comment.
従量課金を有効にするチェックボックスのオンオフが切り替わったときに呼ばれる関数です。
状態が変わったらその都度強制従量課金モードはオフにしています。また、従量課金が有効になっている場合のみ、従量課金モードのチェックボックスを触れるようにしています。
| export function loadSetting(): object { | ||
| return Setting.load().toObject() | ||
| const setting = Setting.load() | ||
| const obj = setting.toObject() | ||
| obj['forceOndemandApiEnabled'] = setting.isOndemandApiCallModeForce() | ||
| return obj | ||
| } | ||
|
|
||
| export function saveSetting(token: string, ondemandApiEnabled: boolean): void { | ||
| export function saveSetting(token: string, ondemandApiEnabled: boolean, forceOndemandApiEnabled: boolean): void { | ||
| const setting = Setting.load() | ||
| setting.token = token | ||
| setting.ondemandApiEnabled = ondemandApiEnabled | ||
| setting.ondemandApiCallMode = forceOndemandApiEnabled ? 'force' : 'default' | ||
| setting.save() | ||
| } |
There was a problem hiding this comment.
UI上は「強制従量課金モードが有効かどうか」というbooleanで持ち、アプリ内での実データは 「従量課金モードがどれか」という持ち方を行っているため、そのデータをUIからの設定読み出し時に相互に変換しています。
| "compilerOptions": { | ||
| "sourceMap": true, | ||
| "target": "es5", | ||
| "lib": ["es2017"], |
There was a problem hiding this comment.
Object.values や Array.includes が使えないのが不便だったのでes2017形式で書けるように変更してます。出力はes5形式のままです。
| const setting = Setting.load() | ||
| setting.setDefaultToken() | ||
| setting.setDefaultOndemandApiEnabled() | ||
| setting.setDefaultOndemandApiCallMode() |
There was a problem hiding this comment.
これを default って呼ぶかどうかがだいぶ難しいところだけど、まぁ
Uh oh!
There was an error while loading. Please reload this page.