emdb/cmd/api-service/service.go

56 lines
1.5 KiB
Go
Raw Normal View History

2023-12-16 12:11:16 +01:00
package main
import (
2023-12-17 11:58:33 +01:00
"flag"
2023-12-16 12:11:16 +01:00
"fmt"
"log/slog"
"net/http"
"os"
"os/signal"
"syscall"
2023-12-29 19:10:31 +01:00
"ewintr.nl/emdb/client"
"ewintr.nl/emdb/cmd/api-service/handler"
2023-12-30 09:19:53 +01:00
"ewintr.nl/emdb/cmd/api-service/job"
2023-12-29 19:10:31 +01:00
"ewintr.nl/emdb/cmd/api-service/moviestore"
2023-12-16 12:11:16 +01:00
)
2023-12-17 11:58:33 +01:00
var (
2023-12-26 12:01:37 +01:00
port = flag.Int("port", 8085, "port to listen on")
2023-12-17 11:58:33 +01:00
dbPath = flag.String("dbpath", "test.db", "path to sqlite db")
apiKey = flag.String("apikey", "hoi", "api key to use")
)
2023-12-16 12:11:16 +01:00
func main() {
2023-12-17 11:58:33 +01:00
flag.Parse()
2023-12-16 12:11:16 +01:00
logger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
2024-01-20 13:31:21 +01:00
logger.Info("starting server", "port", *port, "dbPath", *dbPath, "apiKey", *apiKey)
2023-12-17 12:21:32 +01:00
2023-12-29 19:10:31 +01:00
db, err := moviestore.NewSQLite(*dbPath)
2023-12-16 14:45:38 +01:00
if err != nil {
fmt.Printf("could not create new sqlite repo: %s", err.Error())
os.Exit(1)
}
2023-12-16 12:11:16 +01:00
2023-12-30 09:19:53 +01:00
jobQueue := job.NewJobQueue(db, logger)
worker := job.NewWorker(jobQueue, moviestore.NewMovieRepository(db), moviestore.NewReviewRepository(db), client.NewIMDB(), logger)
2023-12-29 19:10:31 +01:00
go worker.Run()
apis := handler.APIIndex{
"job": handler.NewJobAPI(jobQueue, logger),
2023-12-29 19:10:31 +01:00
"movie": handler.NewMovieAPI(handler.APIIndex{
2024-01-06 14:22:22 +01:00
"review": handler.NewMovieReviewAPI(moviestore.NewReviewRepository(db), logger),
2023-12-29 19:10:31 +01:00
}, moviestore.NewMovieRepository(db), jobQueue, logger),
2024-01-06 14:22:22 +01:00
"review": handler.NewReviewAPI(moviestore.NewReviewRepository(db), logger),
2023-12-16 14:45:38 +01:00
}
2023-12-16 12:11:16 +01:00
2023-12-29 19:10:31 +01:00
go http.ListenAndServe(fmt.Sprintf(":%d", *port), handler.NewServer(*apiKey, apis, logger))
2023-12-17 12:21:32 +01:00
logger.Info("server started")
2023-12-16 12:11:16 +01:00
c := make(chan os.Signal, 1)
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
<-c
2023-12-17 12:21:32 +01:00
logger.Info("server stopped")
2023-12-16 12:11:16 +01:00
}