forked from pangpanglabs/echosample
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
111 lines (92 loc) · 2.45 KB
/
main.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package main
import (
"flag"
"fmt"
"log"
"os"
"runtime"
"github.com/asaskevich/govalidator"
_ "github.com/go-sql-driver/mysql"
"github.com/go-xorm/xorm"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
_ "github.com/mattn/go-sqlite3"
"github.com/pangpanglabs/echoswagger"
configutil "github.com/pangpanglabs/goutils/config"
"github.com/pangpanglabs/goutils/echomiddleware"
"github.com/pangpanglabs/goutils/echotpl"
"github.com/pangpanglabs/echosample/controllers"
"github.com/pangpanglabs/echosample/models"
)
func main() {
appEnv := flag.String("app-env", os.Getenv("APP_ENV"), "app env")
flag.Parse()
var c Config
if err := configutil.Read(*appEnv, &c); err != nil {
panic(err)
}
fmt.Println(c)
db, err := initDB(c.Database.Driver, c.Database.Connection)
if err != nil {
panic(err)
}
defer db.Close()
e := echo.New()
r := echoswagger.New(e, "/v1", "doc", &echoswagger.Info{
Title: "Echo Sample",
Description: "This is API doc for Echo Sample",
Version: "1.0",
})
controllers.HomeController{}.Init(e.Group("/"))
controllers.DiscountController{}.Init(e.Group("/discounts"))
controllers.DiscountApiController{}.Init(r.Group("Discount", "/api/discounts"))
e.Static("/static", "static")
e.Pre(middleware.RemoveTrailingSlash())
e.Use(middleware.Recover())
e.Use(middleware.CORS())
// e.Use(middleware.Logger())
e.Use(middleware.RequestID())
e.Use(echomiddleware.ContextLogger())
e.Use(echomiddleware.ContextDB(c.Service, db, echomiddleware.KafkaConfig(c.Database.Logger.Kafka)))
e.Use(echomiddleware.BehaviorLogger(c.Service, echomiddleware.KafkaConfig(c.BehaviorLog.Kafka)))
e.Renderer = echotpl.New()
e.Validator = &Validator{}
e.Debug = c.Debug
if err := e.Start(":" + c.HttpPort); err != nil {
log.Println(err)
}
}
func initDB(driver, connection string) (*xorm.Engine, error) {
db, err := xorm.NewEngine(driver, connection)
if err != nil {
return nil, err
}
if driver == "sqlite3" {
runtime.GOMAXPROCS(1)
}
db.Sync(new(models.Discount))
return db, nil
}
type Config struct {
Database struct {
Driver string
Connection string
Logger struct {
Kafka echomiddleware.KafkaConfig
}
}
BehaviorLog struct {
Kafka echomiddleware.KafkaConfig
}
Trace struct {
Zipkin echomiddleware.ZipkinConfig
}
Debug bool
Service string
HttpPort string
}
type Validator struct{}
func (v *Validator) Validate(i interface{}) error {
_, err := govalidator.ValidateStruct(i)
return err
}