package main
import (
"log"
"os"
"github.com/akhil/ecommerce-yt/controllers"
"github.com/akhil/ecommerce-yt/database"
"github.com/akhil/ecommerce-yt/middleware"
"github.com/akhil/ecommerce-yt/routes"
"github.com/gin-gonic/gin"
)
func main() {
// 環境変数からポート番号を取得します
port := os.Getenv("PORT")
if port == "" {
port = "8000"
}
// データベースの初期化と必要な依存関係を注入して、アプリケーションを作成します
// ProductDataとUserData関数は、データベースクライアントとコレクション名を受け取り、
それぞれのデータベースを初期化します
productDB := database.ProductData(database.Client, "Products")
userDB := database.UserData(database.Client, "Users")
app := controllers.NewApplication(productDB, userDB)
// Ginルーターを作成します
router := gin.New()
// ロガーミドルウェアを使用して、リクエストのログを出力します
router.Use(gin.Logger())
// ユーザールートを設定します
routes.UserRoutes(router)
// 認証ミドルウェアを使用して、認証を必要とするエンドポイントを保護します
router.Use(middleware.Authentication())
// カートに商品を追加するエンドポイントを設定します
// app.AddToCart()は、カートに商品を追加するコントローラー関数です
router.GET("/addtocart", app.AddToCart())
// アイテムをカートから削除するエンドポイントを設定します
// app.RemoveItem()は、カートからアイテムを削除するコントローラー関数です
router.GET("/removeitem", app.RemoveItem())
// カート内のアイテムをリストするエンドポイントを設定します
// controllers.GetItemFromCart()は、カート内のアイテムをリストするコントローラー関数です
router.GET("/listcart", controllers.GetItemFromCart())
// 住所を追加するエンドポイントを設定します
// controllers.AddAddress()は、住所を追加するコントローラー関数です
router.POST("/addaddress", controllers.AddAddress())
// 自宅の住所を編集するエンドポイントを設定します
// controllers.EditHomeAddress()は、自宅の住所を編集するコントローラー関数です
router.PUT("/edithomeaddress", controllers.EditHomeAddress())
// 仕事の住所を編集するエンドポイントを設定します
// controllers.EditWorkAddress()は、仕事の住所を編集するコントローラー関数です
router.PUT("/editworkaddress", controllers.EditWorkAddress())
// 住所を削除するエンドポイントを設定します
// controllers.DeleteAddress()は、住所を削除するコントローラー関数です
router.GET("/deleteaddresses", controllers.DeleteAddress())
// カートのチェックアウトを行うエンドポイントを設定します
// app.BuyFromCart()は、カートのチェックアウトを行うコントローラー関数です
router.GET("/cartcheckout", app.BuyFromCart())
// 即時購入を行うエンドポイントを設定します
// app.InstantBuy()は、即時購入を行うコントローラー関数です
router.GET("/instantbuy", app.InstantBuy())
// 指定したポートでアプリケーションを実行し、エラーが発生した場合にログに出力します
log.Fatal(router.Run(":" + port))
}
このコードは、eコマースアプリケーションのメインパッケージです。以下に、各部分の説明を提供します。
os.Getenv("PORT") は、環境変数からポート番号を取得するために使用されます。ポートが設定されていない場合はデフォルト値として "8000" が使用されます。
controllers.NewApplication() は、データベースの初期化と依存関係の注入を行って、アプリケーションを作成します。これにより、controllers パッケージ内の NewApplication 関数が呼び出されます。
gin.New() は、Ginフレームワークのインスタンスであるルーターを作成します。
router.Use(gin.Logger()) は、リクエストのログを出力するために Gin のロガーミドルウェアを使用します。
routes.UserRoutes(router) は、ユーザールートを設定するために routes パッケージ内の UserRoutes 関数を呼び出します。
router.Use(middleware.Authentication()) は、認証が必要なエンドポイントを保護するために middleware パッケージ内の Authentication ミドルウェアを使用します。
router.GET("/addtocart", app.AddToCart()) は、"/addtocart" エンドポイントに対して GET リクエストがあった場合に app.AddToCart() メソッドを呼び出します。
同様に、他のエンドポイントも設定されています。例えば、"/removeitem"、"/listcart"、"/addaddress"、"/edithomeaddress" などです。
log.Fatal(router.Run(":" + port)) は、指定したポートでアプリケーションを実行し、エラーが発生した場合にログに出力します。
このコードは、eコマースアプリケーションの基本的な機能を実装しており、ユーザーのカートへのアイテムの追加や削除、住所の管理、チェックアウトなどを扱うことができます。