# 見積もりAPI ## エンドポイント /estimate 【POST】 ## リクエストボディ(JSON) ```jsonld { "game_id": 1, "price": "150000" } ``` ## 処理のフロー 1. マザーボード、SSD、ケース、電源、OSはDBから取得したデータ(最安値?)メモリは固定の容量(予算が8万↑の場合16GB、20万↑の場合32GB)?で仮置きして処理を進める。なお互換性も考慮しながら仮置きするパーツを決定していく事。 SQLAlchemyを使ったテーブル結合の例 ``` Session.query(cpus, motherboads).join(motherboads, motherboads.socket == cpu.socket).all() ``` 2. 仮置きしたパーツを予算から引き使用できる予算を計算する。 150000 - 50000 = 100000(使用できる予算) 3. gamesテーブルに保存している予算分配割合データと公式推奨スペックを取得する ### 予算分配データ cpu_ratio 0.3 cpu_ratio 0.7 4. 画像のように割合を繰り上げながらCPUとGPUを算出していく パーツのアップグレードは価格÷性能で算出した値と基に行う 元々の割合を2倍、3倍…n倍した際に、値が小数部から1繰り上がったとき、部品のグレードを上げる ![](https://i.imgur.com/PQygKIp.jpg) 5. 公式推奨スペックと今回算出したパーツの性能をgpu_benchmarksテーブル、cpu_benchmarksテーブルから取得し、下記グラフ画像のように出力の上base64でエンコードして返却する ![](https://i.imgur.com/dcvo1id.png) ## レスポンスボディ(JSON) 全体図 ``` { 性能比較画像配列, 算出したPC構成配列, 推奨スペック配列 } ``` # 追記 予算をユーザから受け取り ユーザの予算をCPU&GPU の予算 その他パーツの予算に分割する CPU、GPUの割合をgamasテーブルから取得する 分割後の予算からCPUとGPUの割合を限度額に性能の高い順からCPUとGPUを取得する 分割後のその他パーツの予算から互換性を考慮しながら最安値のパーツを見積もる 12/07追記 その他パーツの決め方 ### 前提 CPUとGPUは算出済みである ## 以降の記述例 A.hoge→B.hoge ### 説明 A.hogeが決まれば、B.hogeが決まる(互換性) ## 見積もり時に考慮すべき内容 CPU.TDP+GPU.TDP<電源.容量 ※1 × CPU.ソケット=マザーボード.ソケット 〇 マザーボード.ソケット=CPUクーラー.対応ソケット 〇 マザーボード.対応メモリ枚数>メモリ.枚数 〇 マザーボード.対応メモリ周波数>メモリ.周波数 × cpu.TDP<CPUクーラー.対応TDP 〇 マザーボード.メモリータイプ=メモリー.メモリータイプ 〇 マザーボード.サイズ.=ケース.サイズ 〇 マザーボード.m2=SSD.タイプ 〇 電源.サイズ=ケース.サイズ 〇 上記のその他パーツでの見積もりで余った予算をもとにCPUとGPUの再計算を行う ## 注記 ※1 GPUが65W GPUが200Wであった場合 65+200+75(その他パーツ分(固定))=340Wが消費電力と考える 電源は変換効率などで全ての容量を使えるわけではないため、0.7倍した値を実容量とする 上記の例であれば 容量×0.7 > 340を電源データ取得時の基準とすること