Files
metatube-server/cmd/server/main.go
T
2022-05-21 17:49:55 +08:00

70 lines
1.4 KiB
Go

package main
import (
goflag "flag"
"log"
"net"
"net/http"
"os"
"time"
"github.com/gin-gonic/gin"
"github.com/javtube/javtube-sdk-go/engine"
"github.com/javtube/javtube-sdk-go/route"
"github.com/javtube/javtube-sdk-go/route/validator"
"github.com/peterbourgon/ff/v3"
)
var (
opts = new(options)
flag = goflag.NewFlagSet("", goflag.ExitOnError)
)
type options struct {
bind string
port string
token string
dsn string
autoMigrate bool
}
func init() {
// gin initiate
gin.DisableConsoleColor()
// flag parsing
flag.StringVar(&opts.bind, "bind", "", "Bind address of server")
flag.StringVar(&opts.port, "port", "8080", "Port number of server")
flag.StringVar(&opts.token, "token", "", "Token to access server")
flag.StringVar(&opts.dsn, "dsn", "", "Database Service Name")
flag.BoolVar(&opts.autoMigrate, "auto-migrate", false, "Database auto migration")
ff.Parse(flag, os.Args[1:], ff.WithEnvVarNoPrefix())
}
func main() {
app, err := engine.New(&engine.Options{
DSN: opts.dsn,
Timeout: 2 * time.Minute,
})
if err != nil {
log.Fatal(err)
}
if err = app.AutoMigrate(opts.autoMigrate); err != nil {
log.Fatal(err)
}
var token validator.Validator
if opts.token != "" {
token = validator.Token(opts.token)
}
var (
addr = net.JoinHostPort(opts.bind, opts.port)
router = route.New(app, token)
)
if err = http.ListenAndServe(addr, router); err != nil {
log.Fatal(err)
}
}