-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
76 lines (65 loc) · 1.69 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
package main
import (
"database/sql"
"fmt"
"isucon8/isucoin/controller"
"log"
"net/http"
"os"
"time"
gctx "github.com/gorilla/context"
"github.com/gorilla/sessions"
"github.com/julienschmidt/httprouter"
)
const (
SessionSecret = "tonymoris"
)
func init() {
var err error
loc, err := time.LoadLocation("Asia/Tokyo")
if err != nil {
log.Panicln(err)
}
time.Local = loc
}
func getEnv(key, def string) string {
if v, ok := os.LookupEnv("ISU_" + key); ok {
return v
}
return def
}
func main() {
var (
port = getEnv("APP_PORT", "5000")
dbhost = getEnv("DB_HOST", "127.0.0.1")
dbport = getEnv("DB_PORT", "3306")
dbuser = getEnv("DB_USER", "root")
dbpass = getEnv("DB_PASSWORD", "")
dbname = getEnv("DB_NAME", "isucoin")
public = getEnv("PUBLIC_DIR", "public")
)
dbusrpass := dbuser
if dbpass != "" {
dbusrpass += ":" + dbpass
}
dsn := fmt.Sprintf(`%s@tcp(%s:%s)/%s?parseTime=true&loc=Local&charset=utf8mb4`, dbusrpass, dbhost, dbport, dbname)
db, err := sql.Open("mysql", dsn)
if err != nil {
log.Fatalf("mysql connect failed. err: %s", err)
}
store := sessions.NewCookieStore([]byte(SessionSecret))
h := controller.NewHandler(db, store)
router := httprouter.New()
router.POST("/initialize", h.Initialize)
router.POST("/signup", h.Signup)
router.POST("/signin", h.Signin)
router.POST("/signout", h.Signout)
router.GET("/info", h.Info)
router.POST("/orders", h.AddOrders)
router.GET("/orders", h.GetOrders)
router.DELETE("/order/:id", h.DeleteOrders)
router.NotFound = http.FileServer(http.Dir(public)).ServeHTTP
addr := ":" + port
log.Printf("[INFO] start server %s", addr)
log.Fatal(http.ListenAndServe(addr, gctx.ClearHandler(h.CommonMiddleware(router))))
}