/
service.go
75 lines (64 loc) · 1.44 KB
/
service.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
package controller
import (
"fmt"
_ "github.com/Maxson-dev/place-api/api" // swagger docs
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
type v1API interface {
PostFile(ctx *gin.Context)
GetFile(ctx *gin.Context)
PostPlace(ctx *gin.Context)
GetPlace(ctx *gin.Context)
GetDistance(ctx *gin.Context)
PostEvent(ctx *gin.Context)
GetHealth(ctx *gin.Context)
}
type HTTPConfig struct {
Port int64
MaxMultipartSizeMib int64
}
type service struct {
engine *gin.Engine
cfg HTTPConfig
}
// New creates a service
// Swagger spec:
// @title Place-API Service.
// @version 0.1.0
// @host localhost:8080
// @BasePath /api/v1
func New(engine *gin.Engine, v1 v1API, cfg HTTPConfig) *service {
srv := &service{
cfg: cfg,
engine: engine,
}
api := srv.engine.Group("/api/")
{
apiV1 := api.Group("/v1/")
{
{
apiV1.POST("/file", v1.PostFile)
apiV1.GET("/file/:id", v1.GetFile)
}
{
apiV1.POST("/place", v1.PostPlace)
apiV1.GET("/place/:id", v1.GetPlace)
apiV1.GET("/place/:id/distance", v1.GetDistance)
}
{
apiV1.POST("/event", v1.PostEvent)
}
{
apiV1.GET("/health", v1.GetHealth)
}
}
}
// TODO swagger only for dev env
srv.engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
return srv
}
func (s *service) Run() error {
return s.engine.Run(fmt.Sprintf(":%d", s.cfg.Port))
}