[golang]fiber API10~Admin: Order APIの実装~

こんにちは、KOUKIです。

GolangのWebフレームワークであるfiberを使ってAPIを開発しています。

前回は、UserとProductsモデルを関連付ける(LINK)テーブルモデル/APIを実装しました。

今回は、Order APIを実装します。

尚、この記事に出てくるソースコードは、Udemyの「React, NextJS and Golang: A Rapid Guide – Advanced」コースを参考にしています。解釈は私が勝手に付けているので、本物をみたい場合は受講をお勧めします!

前回

事前準備

フォルダ/ファイル作成

作るもの

Admin機能を作りたいと思います。エンドポイントは、次の通りです。

エンドポイント
  • GET/POST /api/admin/products
  • GET/PUT/DELETE /api/admin/products/{product_id}
  • GET /api/admin/users/{user_id}/links
  • GET /api/admin/orders
  • GET /api/admin/ambassadors

今回は、「/api/admin/orders」への処理を実装します。

Order API

Order APIは、ユーザーの注文情報を扱うAIPです。

Order モデルの追加

Order(注文)とOrderItem(商品)を分けて、構造体を作成します。

マイグレーションの追加

GORMのマイグレーション機能を使って、Order/OrderItemモデルからDBのテーブルスキーマーを作成します。

これで、dockerコンテナを立ち上げるだけで、テーブルスキーマーが自動作成されるようになりました。

ルートの追加

「/api/admin/orders」のルートを追加します。

コントローラーの追加

Orderコントローラーを追加します。

ここでは、Orderテーブルから全てのデータを取得する処理を実装しました。

動作検証

以下のパラメーターで、動作確認をしましょう。

  • URL: http://localhost:8000/api/admin/orders
  • 形式: GET

※ログインしていない場合は、ログインしてください

データがない為、戻り値は空ですが、特にエラーが発生しなかったのでこれでOKです。

テストデータの追加

テストデータを追加するプログラムを実装しましょう。

Makefileに起動コマンドを追加します。

下記のコマンドで、テストデータを作成できます。

Order APIを叩いて、先ほどのデータが取得できるか確認してみましょう。

Orderデータの取得ができましたね。

order_itemsがnullになっていますが、Preloadingを使うと取得できるようになります。

Preloading

order_itemsを取得するには、GORMのPreloadを使うと便利です。

DBの検索時に、Preloadを噛ませる。ただこれだけです。

データを再取得しましょう。

今度は、order_itemsのデータが取得できましたね。

Full Name

first_nameとlast_nameが分離しているので、一つにまとめましょう。

FullNameメソッドを追加しました。これを、コントローラーの中から呼び出します。

データを確認しましょう。

「name」にFull Nameが表示されているので、OKですね。

合計金額

Full Nameと同じ容量で、order_itemsの合計値の表示にもチャレンジしてみましょう。

GetTotalメソッドで、Total金額を計算します。これもコントローラーから呼び出しましょう。

先ほどと同様に、データを取得してみましょう。

Linkモデルの修正

前回実装したLinkモデルとOrderを紐付けます。

Linkは、モデルを繋ぐ関連テーブルです。そこにOrderも追加した感じですね。

Linkコントローラーに以下の修正を加えます。

この修正をしても現時点では何も変わりませんが、後々必要になってくると思います。

次回

次回は、Ambassador APIを実装しましょう。

Go言語まとめ

ソースコード

ここまでのソースコードを以下に記載します。

link.go

order.go

db.go

routes.go

linkController.go

orderController.go

orderProducts.go

Makefile

コメントを残す