ducky-dash/main.go

102 lines
3.2 KiB
Go

package main
import (
"embed"
"fmt"
"log"
"log/slog"
"net/http"
"os"
"git.duckylabs.xyz/duckbox/ducky-dash/db"
"git.duckylabs.xyz/duckbox/ducky-dash/handler"
"git.duckylabs.xyz/duckbox/ducky-dash/pkg/logger"
"git.duckylabs.xyz/duckbox/ducky-dash/pkg/sb"
"github.com/go-chi/chi/v5"
"github.com/joho/godotenv"
)
var FS embed.FS
func main() {
if err := initServer(); err != nil {
log.Fatal(err)
}
router := chi.NewMux()
router.Use(handler.WithUser)
router.Handle("/*", http.StripPrefix("/", http.FileServer(http.FS(FS))))
// Render
router.Get("/", handler.MakeHandler(handler.HandleHomeIndex))
router.Get("/login", handler.MakeHandler(handler.HandleLoginIndex))
router.Get("/signup", handler.MakeHandler(handler.HandleSignupIndex))
router.Get("/reset-password", handler.MakeHandler(handler.HandleResetPasswordIndex))
// Handlers
router.Post("/login", handler.MakeHandler(handler.HandleLoginCreate))
router.Post("/logout", handler.MakeHandler(handler.HandleLogoutCreate))
router.Post("/signup", handler.MakeHandler(handler.HandleSignupCreate))
router.Post("/reset-password", handler.MakeHandler(handler.HandleResetPasswordCreate))
router.Get("/auth/callback", handler.MakeHandler(handler.HandleAuthCallback))
router.Group(func(auth chi.Router) {
auth.Use(handler.WithAuth)
auth.Get("/setup/account", handler.MakeHandler(handler.HandleAccountSetupIndex))
auth.Post("/setup/account", handler.MakeHandler(handler.HandleAccountCreate))
auth.Put("/update/account", handler.MakeHandler(handler.HandleAccountUpdate))
auth.Get("/accounts/all", handler.MakeHandler(handler.HandleAccountsQuery))
})
router.Group(func(auth chi.Router) {
auth.Use(handler.WithAuth, handler.WithAccountSetup)
// auth.Get("/", handler.MakeHandler(handler.HandleHomeIndex))
auth.Get("/tasks", handler.MakeHandler(handler.HandleTaskIndex))
auth.Get("/users", handler.MakeHandler(handler.HandleUsersIndex))
auth.Get("/users/profile/{uuid}", handler.MakeHandler(handler.HandleUserProfile))
auth.Get("/settings", handler.MakeHandler(handler.HandleSettingsIndex))
auth.Put("/reset-password", handler.MakeHandler(handler.HandleResetPasswordUpdate))
auth.Post("/tasks/create", handler.MakeHandler(handler.HandleTaskCreate))
auth.Get("/ui/tasks/create", handler.MakeHandler(handler.HandleTaskCreateModal))
})
// Serve static files from /public
router.Handle("/public/*", http.StripPrefix("/public/", http.FileServer(http.Dir("public/"))))
port := os.Getenv("HTTP_LISTEN_ADDR")
environment := os.Getenv("ENVIRONMENT")
slog.Info("application running",
"port", port,
"environment", environment,
)
// logger.Logger.Info("application running", "port", port, "environment", environment)
fmt.Println("application running on port", port)
log.Fatal(http.ListenAndServe(port, router))
}
func initServer() error {
if err := godotenv.Load(); err != nil {
slog.Error("error loading .env file", err)
return err
}
fmt.Println(".env loaded")
if err := logger.InitLogger(); err != nil {
slog.Error("error initializing logger", err)
return err
}
fmt.Println("logger loaded")
if err := db.Init(); err != nil {
slog.Error("error initializing database", err)
return err
}
return sb.Init()
}