Passed
Pull Request — main (#166)
by Yume
02:31
created

v1.New   A

Complexity

Conditions 3

Size

Total Lines 30
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 15
nop 0
dl 0
loc 30
rs 9.65
c 0
b 0
f 0
1
package v1
2
3
import (
4
	"github.com/gofiber/contrib/fibersentry"
5
	"github.com/gofiber/contrib/otelfiber"
6
	"github.com/gofiber/fiber/v2"
7
	"github.com/gofiber/fiber/v2/middleware/cors"
8
	"github.com/gofiber/fiber/v2/middleware/favicon"
9
	"github.com/gofiber/fiber/v2/middleware/pprof"
10
	"github.com/gofiber/swagger"
11
	_ "github.com/memnix/memnix-rest/docs" // Side effect import
12
	"github.com/memnix/memnix-rest/pkg/json"
13
)
14
15
// New returns a new Fiber instance.
16
func New() *fiber.App {
17
	// Create new app
18
19
	app := fiber.New(
20
		fiber.Config{
21
			Prefork:     false,
22
			JSONDecoder: json.NewJSON(&json.SonicJSON{}).Unmarshal,
23
			JSONEncoder: json.NewJSON(&json.SonicJSON{}).Marshal,
24
		})
25
26
	// Register middlewares
27
	registerMiddlewares(app)
28
29
	app.Get("/", func(c *fiber.Ctx) error {
30
		return c.SendString("Hello, World 👋!")
31
	})
32
33
	// Use swagger middleware
34
	app.Get("/swagger/*", swagger.HandlerDefault) // default
35
36
	// Api group
37
	v1 := app.Group("/v1")
38
39
	v1.Get("/", func(c *fiber.Ctx) error {
40
		return fiber.NewError(fiber.StatusForbidden, "This is not a valid route") // Custom error
41
	})
42
43
	registerRoutes(&v1)
44
45
	return app
46
}
47
48
func registerMiddlewares(app *fiber.App) {
49
	// Use cors middleware
50
	app.Use(cors.New(cors.Config{
51
		AllowOrigins:     "http://localhost, *",
52
		AllowHeaders:     "Origin, Content-Type, Accept, Authorization, Cache-Control",
53
		AllowCredentials: true,
54
	}))
55
56
	// Provide a minimal config
57
	app.Use(favicon.New(favicon.Config{
58
		File: "./favicon.ico",
59
		URL:  "/favicon.ico",
60
	}))
61
62
	app.Use(fibersentry.New(fibersentry.Config{
63
		Repanic:         true,
64
		WaitForDelivery: true,
65
	}))
66
67
	app.Use(otelfiber.Middleware(otelfiber.WithNext(
68
		func(c *fiber.Ctx) bool {
69
			// Do not trace /metrics endpoint
70
			return c.Path() == "/metrics" || c.Path() == "/swagger/*" || c.Path() == "/favicon.ico"
71
		})))
72
73
	app.Use(pprof.New())
74
}
75