app/http/app.go   A
last analyzed

Size/Duplication

Total Lines 63
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 34
dl 0
loc 63
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A http.New 0 32 2
A http.registerMiddlewares 0 14 1
1
package http
2
3
import (
4
	"time"
5
6
	"github.com/gofiber/fiber/v2"
7
	"github.com/gofiber/fiber/v2/middleware/compress"
8
	"github.com/gofiber/fiber/v2/middleware/cors"
9
	"github.com/gofiber/fiber/v2/middleware/monitor"
10
	"github.com/gofiber/fiber/v2/middleware/pprof"
11
	"github.com/gofiber/swagger"
12
	"github.com/memnix/memnix-rest/config"
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: config.JSONHelper.Unmarshal,
23
			JSONEncoder: config.JSONHelper.Marshal,
24
		})
25
26
	// Register middlewares
27
	registerMiddlewares(app)
28
29
	// Use monitor middleware
30
	app.Get("/metrics", monitor.New(monitor.Config{
31
		Title:   "Kafejo API",
32
		Refresh: time.Second * 5,
33
	}))
34
35
	// Use swagger middleware
36
	app.Get("/swagger/*", swagger.HandlerDefault) // default
37
38
	// Api group
39
	v1 := app.Group("/v1")
40
41
	v1.Get("/", func(c *fiber.Ctx) error {
42
		return fiber.NewError(fiber.StatusForbidden, "This is not a valid route") // Custom error
43
	})
44
45
	registerRoutes(&v1) // /v1
46
47
	return app
48
}
49
50
func registerMiddlewares(app *fiber.App) {
51
	// Use cors middleware
52
	app.Use(cors.New(cors.Config{
53
		AllowOrigins:     "http://localhost, *",
54
		AllowHeaders:     "Origin, Content-Type, Accept, Authorization, Cache-Control",
55
		AllowCredentials: true,
56
	}))
57
58
	// Use compress middleware
59
	app.Use(compress.New(compress.Config{
60
		Level: compress.LevelBestSpeed, // 1
61
	}))
62
63
	app.Use(pprof.New())
64
}
65