Closed moromin closed 2 years ago
詳細あとで見ます! DB操作しているRepositoryのテストを書いてみて欲しいンゴ。 DBへの操作はランタイム時にクラッシュしやすいイメージがあるのでそれが起こってないのか検知したいのと、実際にいくつかInsertやselectする処理を書いてみて、使い勝手の良いDB構成になっているか確認したいです。
やってみるでぃ
現状のdatabase周りテスト一応できるけど、結構ガバいから多分描き直す
このパッケージ使うとDB周りの処理わかりやすそうだから、これ使って実装してみる https://github.com/kyleconroy/sqlc
DB周りの処理をするために、dabase*
っていうファイルを今回のPRでいくつか追加したんだけど
このパッケージ使うとDB周りの処理わかりやすそうだから、これ使って実装してみる https://github.com/kyleconroy/sqlc
sqlc*
っていうファイルに👆これ使った処理で書き直してみた。
テストもこっちで書こうと思いやす。
一旦、database*
っていうファイルたちは無視してもらっても大丈夫です。
追加ファイルがクソ多いと思うんで笑
interfaces/database
ディレクトリ内のsqlc_test.go
っていうファイルにテスト書いてみた。
Goのtesting パッケージ使って書いてるからVSCodeとかだと楽にテストできると思う。
差分1kのPR見るのキツイかもしれんww
テスト書く前後とかでPR分けた方が良かったねw
今回、database*.go
、sqlc*.go
っていう二つのDB実装パターン出してみたんだけど、sqlc*.go
のパターンのほうが弄りやすいし、見やすいと思う。
次PR出すときは、sqlc*.go
の方をDB処理の軸として出してみるね。
変更点
Exchange
exchange*
にGetAllCurrency()
的なメソッドを持たせて、mainからその処理を呼び出している。DB
コード外の設定
OHLC, currency, symbol
などのentityも追加した(Intervalのentity完全に忘れてました)。上記のDBを構成するために、Goのmigration toolを使用。migrationを実行するためのファイルをdb/migrationディレクトリに追加。
Dockerコンテナ内にPostgreSQL環境を構築。そのための各処理(DBの初期化、テーブルの作成など)をMakefileに追加。
コード内の設計
各層の処理
StoreCurrency(), FindAllCurrency()
など、DB操作の具体的な部分を実装ShowCurrency(), RegisterCurrency()
など、usecase.Interacterのメソッドを用いて、ユーザーに操作結果などを返す。DIコンテナにおいて、APIとDBの処理を分割したかったため、
NewAPIClient(), NewDB()
というように各コンテナを返す関数にした。また、config パッケージ(.envファイル)からDBの各設定値を読み込めるようにした。
レビューで見てほしいポイント
関連 Issue
参考リンク