Files
amane-tanikaze-dcbot/cmd/backend.go

85 lines
2.2 KiB
Go

package cmd
import (
"database/sql"
"log"
"net/http"
"github.com/spf13/cobra"
"github.com/spf13/viper"
httpSwagger "github.com/swaggo/http-swagger"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/pgdialect"
"github.com/uptrace/bun/driver/pgdriver"
"github.com/uptrace/bun/extra/bunotel"
"github.com/uptrace/bunrouter"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
"go.uber.org/zap"
"gitea.konchin.com/service/amane-tanikaze-dcbot/amane/handlers/api"
_ "gitea.konchin.com/service/amane-tanikaze-dcbot/amane/handlers/docs"
"gitea.konchin.com/service/amane-tanikaze-dcbot/amane/middlewares"
"gitea.konchin.com/service/amane-tanikaze-dcbot/amane/tracing"
)
// @Title Amane Tanikaze Discord Bot Backend
// @Version 2.0-alpha1
// @TermsOfService http://swagger.io/terms/
// @License.Name 0BSD
// @BasePath /
var backendCmd = &cobra.Command{
Use: "backend",
Short: "backend server",
Run: func(cmd *cobra.Command, args []string) {
ctx := cmd.Context()
tracing.InitTracer()
sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(
viper.GetString("pg-dsn"))))
db := bun.NewDB(sqldb, pgdialect.New())
db.AddQueryHook(bunotel.NewQueryHook(bunotel.WithDBName("PostgreSQL")))
router := bunrouter.New()
middlewaresHandlers := middlewares.NewHandlers(db)
backend := router.NewGroup("").
Use(middlewaresHandlers.ErrorHandler)
if viper.GetBool("swagger") {
backend.GET("/docs/*any",
bunrouter.HTTPHandlerFunc(httpSwagger.Handler()))
}
apiHandlers := api.NewHandlers(db)
apiGroup := backend.NewGroup("/api")
apiGroup.GET("/image",
apiHandlers.GetImage)
tracing.Logger.Ctx(ctx).
Info("http server up",
zap.String("http.port", viper.GetString("port")))
log.Println(http.ListenAndServe(":"+viper.GetString("port"),
otelhttp.NewHandler(router, "")))
},
}
func init() {
backendCmd.Flags().
String("port", "8080", "Port to listen on")
backendCmd.Flags().
String("pg-dsn",
"postgres://amane:amane@postgres:5432/amane?sslmode=disable",
"PostgreSQL connection string")
backendCmd.Flags().
Bool("zap-develop", false, "Enable development log")
backendCmd.Flags().
Bool("swagger", false, "Enable swagger")
}