package main import ( "context" "log" "net/http" "os" "trading-tool/internal/auth" "trading-tool/internal/db" "trading-tool/internal/handlers" ) func env(k, d string) string { if v := os.Getenv(k); v != "" { return v } return d } func main() { ctx := context.Background() database, err := db.Open(ctx, env("DATABASE_URL", "trading:trading@tcp(127.0.0.1:3306)/trading")) if err != nil { log.Fatal(err) } if err := db.Migrate(ctx, database); err != nil { log.Fatal(err) } am, err := auth.New(ctx, database) if err != nil { log.Fatal(err) } app := handlers.New(database) mux := http.NewServeMux() mux.HandleFunc("/login", app.LoginPage) mux.HandleFunc("/auth/login", am.Login) mux.HandleFunc("/auth/callback", am.Callback) mux.HandleFunc("/logout", auth.Logout) mux.Handle("/", am.Require(http.HandlerFunc(app.Home))) mux.Handle("/requests/new", am.Require(http.HandlerFunc(app.NewRequest))) mux.Handle("/quests/update", am.Require(http.HandlerFunc(app.UpdateQuest))) mux.Handle("/departments", am.Require(http.HandlerFunc(app.Departments))) mux.Handle("/departments/", am.Require(http.HandlerFunc(app.DepartmentQuests))) mux.Handle("/admin", am.RequireAdmin(http.HandlerFunc(app.Admin))) mux.Handle("/admin/departments", am.RequireAdmin(http.HandlerFunc(app.AdminDepartment))) mux.Handle("/admin/items", am.RequireAdmin(http.HandlerFunc(app.AdminItem))) mux.Handle("/admin/settings", am.RequireAdmin(http.HandlerFunc(app.AdminSetting))) mux.Handle("/admin/statuses", am.RequireAdmin(http.HandlerFunc(app.AdminStatus))) mux.Handle("/admin/workflow-rules", am.RequireAdmin(http.HandlerFunc(app.AdminWorkflowRule))) mux.Handle("/admin/quest-templates", am.RequireAdmin(http.HandlerFunc(app.AdminQuestTemplate))) log.Println("listening", env("APP_ADDR", ":8080")) log.Fatal(http.ListenAndServe(env("APP_ADDR", ":8080"), mux)) }