-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
70 lines (53 loc) · 1.7 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
package main
import (
"context"
"embed"
"flag"
"github.com/aziemski/bookstore/internal/core"
"github.com/aziemski/bookstore/internal/core/ent"
"github.com/aziemski/bookstore/internal/core/fixures"
"github.com/aziemski/bookstore/internal/rest"
"github.com/aziemski/bookstore/internal/web"
"github.com/aziemski/bookstore/internal/x/xecho/xmiddleware"
"github.com/aziemski/bookstore/internal/x/xlog"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
"golang.org/x/crypto/acme/autocert"
_ "github.com/mattn/go-sqlite3"
)
//go:embed static/css/*.css
//go:embed static/docs/api/*.html
var staticFiles embed.FS
func main() {
address := flag.String("a", "localhost:8080", "server:port")
mode := flag.String("m", "dev", "dev|prod")
flag.Parse()
log := xlog.GetLogger()
e := echo.New()
e.StaticFS("/", staticFiles)
e.HideBanner = true
e.Use(middleware.Recover())
e.Use(xmiddleware.RequestLogger(log))
// dbClient, err := ent.Open("sqlite3", "file:ent?mode=memory&cache=shared&_fk=1")
dbClient, err := ent.Open("sqlite3", "file:./bookstore.db?_fk=1")
if err != nil {
log.Error("unexpected db.Open err", xlog.Err(err))
panic(err)
}
if err = dbClient.Schema.Create(context.Background()); err != nil {
log.Error("unexpected db.Schema.Create err", xlog.Err(err))
panic(err)
}
repo := core.NewRepository(dbClient)
restServer := rest.NewServer(repo)
restServer.RegisterWith(e)
go fixures.Populate(repo, log)
web.SetupRoutes(e, repo)
if *mode == "prod" {
e.AutoTLSManager.HostPolicy = autocert.HostWhitelist("anybook.online")
e.AutoTLSManager.Cache = autocert.DirCache(".certcache")
e.Logger.Fatal(e.StartAutoTLS(":443"))
} else {
e.Logger.Fatal(e.Start(*address))
}
}