package main
import (
"html/template"
"io/fs"
"log/slog"
"net/http"
"os"
"path/filepath"
"github.com/maximotejeda/us_dop_api/adapters/dolar"
"github.com/maximotejeda/us_dop_api/handlers"
"github.com/maximotejeda/us_dop_api/middlewares"
"github.com/maximotejeda/us_dop_api/static"
"github.com/maximotejeda/us_dop_bot/config"
"github.com/maximotejeda/us_dop_db/db"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
var (
hostSTR = os.Getenv("HOST)")
portSTR = os.Getenv("PORT")
templ template.Template
)
func main() {
// Log creation
log := slog.New(slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{}))
var opts []grpc.DialOption
opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
dolarConn, err := grpc.Dial(config.GetDollarServiceURL(), opts...)
if err != nil {
log.Error("creating gerpc conn", "error", err)
panic(err)
}
dol, err := dolar.NewAdapter(dolarConn)
if err != nil {
log.Error("creating service adapter", "error", err)
panic(err)
}
// templates
tmplDirStr := "assets/templates/"
ftmpl := os.DirFS(tmplDirStr)
toParseFiles := []string{}
// wlaks the Fs looking for templates
err = fs.WalkDir(ftmpl, ".", func(p string, d fs.DirEntry, err error) error {
log.Info("parsing", "file", p)
if filepath.Ext(p) == ".tmpl" {
toParseFiles = append(toParseFiles, tmplDirStr+p)
}
return nil
})
if err != nil {
panic(err)
}
// init database
dbe := db.Dial("dolardb/crawler.db", log)
// handler containing all the necessary files
root := handlers.NewRoot(dbe, dol, log, toParseFiles)
s := middlewares.NewLogger(http.HandlerFunc(static.ServeFiles), log)
r := middlewares.NewLogger(root, log)
mux := http.NewServeMux()
server := http.Server{
Addr: hostSTR + ":" + portSTR,
Handler: mux,
}
mux.Handle("/", r)
mux.Handle("GET /static/", s)
if err := server.ListenAndServe(); err != nil {
log.Error("while serving", "error", err)
}
}