-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
79 lines (63 loc) · 1.87 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"log"
"net/http"
"os"
"github.com/go-chi/chi/v5"
chiMiddleware "github.com/go-chi/chi/v5/middleware"
"github.com/joho/godotenv"
"base/blog/app"
"base/blog/config"
"base/blog/middleware"
"base/blog/utils"
)
func main() {
// Load environment variables
if err := godotenv.Load(); err != nil {
log.Println("No .env file found")
}
// Initialize configuration
cfg := config.New()
// Initialize database
if err := utils.InitDB(cfg); err != nil {
log.Fatalf("Failed to initialize database: %v", err)
}
// Initialize templates
if err := utils.InitTemplates(cfg.Theme); err != nil {
log.Fatalf("Error initializing templates: %v", err)
}
// Initialize Chi router
r := chi.NewRouter()
// Use Chi middlewares
r.Use(chiMiddleware.Logger)
r.Use(chiMiddleware.Recoverer)
r.Use(middleware.LoggingMiddleware)
// Create API subrouter and apply middleware before routes are mounted
apiRouter := chi.NewRouter()
apiRouter.Use(middleware.APIMiddleware)
r.Mount("/api/v1", apiRouter)
// Create Admin subrouter and apply middleware before routes are mounted
adminRouter := chi.NewRouter()
adminRouter.Use(middleware.AuthMiddleware(cfg))
r.Mount("/admin", adminRouter)
// Initialize and setup module routes
registry := app.InitModules(utils.DB, cfg)
// Apply middleware and set up routes
for name, module := range registry.Modules {
if err := module.SetupRoutes(r, apiRouter, adminRouter); err != nil {
log.Fatalf("Error setting up routes for module %s: %v", name, err)
}
}
// Serve static files
filesDir := http.Dir("./themes/" + cfg.Theme + "/static")
utils.FileServer(r, "/static", filesDir)
// Determine port for HTTP service
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("Defaulting to port %s", port)
}
// Start server
log.Printf("Server starting on :%s", port)
log.Fatal(http.ListenAndServe(":"+port, r))
}