Skip to content

Commit 20ae57e

Browse files
AchoArnoldCopilot
andcommitted
refactor(api): migrate backend from Fiber v2 to v3
- Bump gofiber/fiber to v3.3.0 via fiber migrate CLI - Swap contrib deps: otelfiber -> contrib/v3/otel, swagger -> contrib/v3/swaggo - Update routing to v3 signature via new handler.register() helper - Adapt cors.Config to []string fields with splitCommaEnv() helper - *fiber.Ctx -> fiber.Ctx across handlers/middlewares Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 0e56876 commit 20ae57e

17 files changed

Lines changed: 76 additions & 58 deletions

api/pkg/di/config.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package di
33
import (
44
"log"
55
"os"
6+
"strings"
67

78
"github.com/joho/godotenv"
89
)
@@ -23,3 +24,15 @@ func getEnvWithDefault(key, defaultValue string) string {
2324

2425
return value
2526
}
27+
28+
func splitCommaEnv(key, defaultValue string) []string {
29+
value := getEnvWithDefault(key, defaultValue)
30+
parts := strings.Split(value, ",")
31+
result := make([]string, 0, len(parts))
32+
for _, part := range parts {
33+
if trimmed := strings.TrimSpace(part); trimmed != "" {
34+
result = append(result, trimmed)
35+
}
36+
}
37+
return result
38+
}

api/pkg/di/container.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,11 +192,11 @@ func (container *Container) App() (app *fiber.App) {
192192
app.Use(
193193
cors.New(
194194
cors.Config{
195-
AllowOrigins: getEnvWithDefault("CORS_ALLOW_ORIGINS", "*"),
196-
AllowHeaders: getEnvWithDefault("CORS_ALLOW_HEADERS", "*"),
197-
AllowMethods: getEnvWithDefault("CORS_ALLOW_METHODS", "GET,POST,PUT,DELETE,OPTIONS"),
195+
AllowOrigins: splitCommaEnv("CORS_ALLOW_ORIGINS", "*"),
196+
AllowHeaders: splitCommaEnv("CORS_ALLOW_HEADERS", "*"),
197+
AllowMethods: splitCommaEnv("CORS_ALLOW_METHODS", "GET,POST,PUT,DELETE,OPTIONS"),
198198
AllowCredentials: false,
199-
ExposeHeaders: getEnvWithDefault("CORS_EXPOSE_HEADERS", "*"),
199+
ExposeHeaders: splitCommaEnv("CORS_EXPOSE_HEADERS", "*"),
200200
},
201201
),
202202
)

api/pkg/handlers/billing_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func NewBillingHandler(
3838

3939
// RegisterRoutes registers the routes for the MessageHandler
4040
func (h *BillingHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
41-
router.Get("/v1/billing/usage-history", h.computeRoute(middlewares, h.UsageHistory)...)
42-
router.Get("/v1/billing/usage", h.computeRoute(middlewares, h.Usage)...)
41+
h.register(router, fiber.MethodGet, "/v1/billing/usage-history", middlewares, h.UsageHistory)
42+
h.register(router, fiber.MethodGet, "/v1/billing/usage", middlewares, h.Usage)
4343
}
4444

4545
// UsageHistory returns the usage history of a user

api/pkg/handlers/bulk_message_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ func NewBulkMessageHandler(
4646

4747
// RegisterRoutes registers the routes for the MessageHandler
4848
func (h *BulkMessageHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
49-
router.Get("/v1/bulk-messages", h.computeRoute(middlewares, h.Index)...)
50-
router.Post("/v1/bulk-messages", h.computeRoute(middlewares, h.Store)...)
49+
h.register(router, fiber.MethodGet, "/v1/bulk-messages", middlewares, h.Index)
50+
h.register(router, fiber.MethodPost, "/v1/bulk-messages", middlewares, h.Store)
5151
}
5252

5353
// Index fetches the bulk message order history.

api/pkg/handlers/discord_handler.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,13 @@ func NewDiscordHandler(
5757
// RegisterRoutes registers the routes for the MessageHandler
5858
func (h *DiscordHandler) RegisterRoutes(app *fiber.App, authMiddleware fiber.Handler, middlewares ...fiber.Handler) {
5959
router := app.Group("discord")
60-
router.Post("/event", h.computeRoute(middlewares, h.Event)...)
60+
h.register(router, fiber.MethodPost, "/event", middlewares, h.Event)
6161

6262
authRouter := app.Group("v1/discord-integrations")
63-
authRouter.Post("/", h.computeRoute(append(middlewares, authMiddleware), h.Store)...)
64-
authRouter.Get("/", h.computeRoute(append(middlewares, authMiddleware), h.Index)...)
65-
authRouter.Delete("/:discordID", h.computeRoute(append(middlewares, authMiddleware), h.Delete)...)
66-
authRouter.Put("/:discordID", h.computeRoute(append(middlewares, authMiddleware), h.Update)...)
63+
h.register(authRouter, fiber.MethodPost, "/", append(middlewares, authMiddleware), h.Store)
64+
h.register(authRouter, fiber.MethodGet, "/", append(middlewares, authMiddleware), h.Index)
65+
h.register(authRouter, fiber.MethodDelete, "/:discordID", append(middlewares, authMiddleware), h.Delete)
66+
h.register(authRouter, fiber.MethodPut, "/:discordID", append(middlewares, authMiddleware), h.Update)
6767
}
6868

6969
// Index returns the discord integrations of a user

api/pkg/handlers/events_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ func NewEventsHandler(
3838

3939
// RegisterRoutes registers the routes for the MessageHandler
4040
func (h *EventsHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
41-
router.Post("/v1/events", h.computeRoute(middlewares, h.Dispatch)...)
41+
h.register(router, fiber.MethodPost, "/v1/events", middlewares, h.Dispatch)
4242
}
4343

4444
// Dispatch a cloud event

api/pkg/handlers/handler.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,13 @@ func (h *handler) userIDFomContext(c fiber.Ctx) entities.UserID {
123123
return h.userFromContext(c).ID
124124
}
125125

126-
func (h *handler) computeRoute(middlewares []fiber.Handler, route fiber.Handler) []fiber.Handler {
127-
return append(append([]fiber.Handler{}, middlewares...), route)
126+
func (h *handler) register(router fiber.Router, method, path string, middlewares []fiber.Handler, route fiber.Handler) {
127+
handlers := make([]any, 0, len(middlewares)+1)
128+
for _, middleware := range middlewares {
129+
handlers = append(handlers, middleware)
130+
}
131+
handlers = append(handlers, route)
132+
router.Add([]string{method}, path, handlers[0], handlers[1:]...)
128133
}
129134

130135
func (h *handler) mergeErrors(errors ...url.Values) url.Values {

api/pkg/handlers/heartbeat_handler.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,12 @@ func NewHeartbeatHandler(
4141

4242
// RegisterRoutes registers the routes for the HeartbeatHandler
4343
func (h *HeartbeatHandler) RegisterRoutes(router fiber.Router, middlewares ...fiber.Handler) {
44-
router.Get("/v1/heartbeats", h.computeRoute(middlewares, h.Index)...)
44+
h.register(router, fiber.MethodGet, "/v1/heartbeats", middlewares, h.Index)
4545
}
4646

4747
// RegisterPhoneAPIKeyRoutes registers the routes for the HeartbeatHandler
4848
func (h *HeartbeatHandler) RegisterPhoneAPIKeyRoutes(router fiber.Router, middlewares ...fiber.Handler) {
49-
router.Post("/v1/heartbeats", h.computeRoute(middlewares, h.Store)...)
49+
h.register(router, fiber.MethodPost, "/v1/heartbeats", middlewares, h.Store)
5050
}
5151

5252
// Index returns the heartbeats of a phone number

api/pkg/handlers/integration_3cx_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func NewIntegration3CxHandler(
3939
// RegisterRoutes registers the routes for the MessageHandler
4040
func (h *Integration3CXHandler) RegisterRoutes(app *fiber.App, middlewares ...fiber.Handler) {
4141
router := app.Group("integration/3cx/")
42-
router.Post("/messages", h.computeRoute(middlewares, h.Messages)...)
42+
h.register(router, fiber.MethodPost, "/messages", middlewares, h.Messages)
4343
}
4444

4545
// Messages consumes a 3cx event

api/pkg/handlers/lemonsqueezy_handler.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func NewLemonsqueezyHandler(
4141
// RegisterRoutes registers the routes for the MessageHandler
4242
func (h *LemonsqueezyHandler) RegisterRoutes(app *fiber.App, middlewares ...fiber.Handler) {
4343
router := app.Group("lemonsqueezy")
44-
router.Post("/event", h.computeRoute(middlewares, h.Event)...)
44+
h.register(router, fiber.MethodPost, "/event", middlewares, h.Event)
4545
}
4646

4747
// Event handles lemonsqueezy events

0 commit comments

Comments
 (0)