-
Notifications
You must be signed in to change notification settings - Fork 0
/
api.go
89 lines (68 loc) 路 2.38 KB
/
api.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
80
81
82
83
84
85
86
87
88
89
package main
import (
"embed"
_ "embed"
"fmt"
"io/fs"
"log"
"net/http"
"github.com/gorilla/mux"
"github.com/ooaklee/ghatd/external/logger"
loggerMiddleware "github.com/ooaklee/ghatd/external/logger/middleware"
"github.com/ooaklee/ghatd/external/middleware/contenttype"
"github.com/ooaklee/ghatd/external/response"
"github.com/ooaklee/ghatd/external/router"
"github.com/ooaklee/ghatd/external/validator"
//>ghatd {{ define "ApiDetailImports" }}
"github.com/ooaklee/ghatd-detail-api-demo-endpoints/external/dictionary"
"github.com/ooaklee/ghatd-detail-api-demo-endpoints/external/repository"
//>ghatd {{ end }}
)
// content holds our static web server content.
//
//go:embed external/web/ui/html/*
var content embed.FS
const serverPort = ":4088"
func main() {
// Initialise detail logger
appLogger, err := logger.NewLogger(
"info",
"local",
"ghatd-detail-api",
)
if err != nil {
log.Default().Panicf("server/unable-to-initiate-logger - %v", err)
}
tempRouterMiddlewares := []mux.MiddlewareFunc{loggerMiddleware.NewLogger(appLogger).HTTPLogger, contenttype.NewContentType}
// Initialise validator
appValidator := validator.NewValidator()
// Initialise router
httpRouter := router.NewRouter(response.GetResourceNotFoundError, response.GetDefault200Response, tempRouterMiddlewares...)
// Prep web detail
NewApiDetail(httpRouter, appValidator, content, "external/")
// Define server
srv := &http.Server{
Addr: serverPort,
Handler: httpRouter.GetRouter(),
}
// Start listening
fmt.Printf("\nServer is listening on port - %s\n", serverPort)
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Default().Panicf("server/unable-to-start-server - %v", err)
}
}
func NewApiDetail(httpRouter *router.Router, appValidator *validator.Validator, embeddedContent fs.FS, embeddedContentFilePathPrefix string) {
//>ghatd {{ define "ApiDetailInit" }}
// Initialise repository
coreRepository := repository.NewInMememoryRepository()
// TODO: Create Service(s)
dictionaryService := dictionary.NewService(coreRepository)
// TODO: Create Handler(s)
dictionaryHandler := dictionary.NewHandler(dictionaryService, appValidator, embeddedContent, embeddedContentFilePathPrefix)
// TODO: Attach package routes to router
dictionary.AttachRoutes(&dictionary.AttachRoutesRequest{
Router: httpRouter,
Handler: dictionaryHandler,
})
//>ghatd {{ end }}
}