mirror of
https://github.com/aykhans/movier.git
synced 2025-04-19 20:56:19 +00:00
75 lines
1.8 KiB
Go
75 lines
1.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"net/http"
|
|
|
|
"github.com/aykhans/movier/server/pkg/config"
|
|
"github.com/aykhans/movier/server/pkg/handlers"
|
|
"github.com/aykhans/movier/server/pkg/storage/postgresql"
|
|
"github.com/aykhans/movier/server/pkg/storage/postgresql/repository"
|
|
"github.com/spf13/cobra"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials/insecure"
|
|
)
|
|
|
|
func getServeCmd() *cobra.Command {
|
|
serveCmd := &cobra.Command{
|
|
Use: "serve",
|
|
Short: "Movie Recommendation Serve",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
err := runServe()
|
|
if err != nil {
|
|
log.Fatalln(err)
|
|
}
|
|
fmt.Println("Movie Recommendation Serve")
|
|
},
|
|
}
|
|
return serveCmd
|
|
}
|
|
|
|
func runServe() error {
|
|
dbURL, err := config.NewPostgresURL()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
db, err := postgresql.NewDB(dbURL)
|
|
defer db.Close()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
imdbRepo := repository.NewIMDbRepository(db)
|
|
|
|
grpcRecommenderServiceTarget, err := config.NewRecommenderServiceGrpcTarget()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
conn, err := grpc.NewClient(
|
|
grpcRecommenderServiceTarget,
|
|
grpc.WithTransportCredentials(insecure.NewCredentials()),
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("did not connect to grpc recommender service: %v", err)
|
|
}
|
|
defer conn.Close()
|
|
|
|
router := http.NewServeMux()
|
|
imdbHandler := handlers.NewIMDbHandler(*imdbRepo, conn, config.GetBaseURL())
|
|
|
|
router.HandleFunc("GET /ping", func(w http.ResponseWriter, r *http.Request) {
|
|
w.Header().Set("Content-Type", "text/plain")
|
|
w.WriteHeader(http.StatusOK)
|
|
w.Write([]byte("pong"))
|
|
})
|
|
router.HandleFunc("GET /", imdbHandler.HandlerHome)
|
|
router.HandleFunc("GET /recs", imdbHandler.HandlerGetRecommendations)
|
|
|
|
log.Printf("serving on port %d", config.ServePort)
|
|
err = http.ListenAndServe(fmt.Sprintf(":%d", config.ServePort), handlers.CORSMiddleware(router))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|