Files
golang-lab4/cmds/server.go
2025-11-07 05:26:09 +08:00

78 lines
1.8 KiB
Go

package cmds
import (
"database/sql"
"golang-lab4/handlers"
"golang-lab4/middlewares"
"golang-lab4/utils"
"golang-lab4/workflows"
"log"
"net/http"
_ "golang-lab4/docs"
"github.com/spf13/cobra"
"github.com/spf13/viper"
httpSwagger "github.com/swaggo/http-swagger"
"github.com/uptrace/bun"
"github.com/uptrace/bun/dialect/sqlitedialect"
"github.com/uptrace/bun/driver/sqliteshim"
"github.com/uptrace/bunrouter"
"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"
)
// @title Golang Lab4
// @version 0.0.1-rc1
// @termsOfService http://swagger.io/terms
// @license.name 0BSD
// @BasePath /
var serverCmd = &cobra.Command{
Use: "server",
Run: func(cmd *cobra.Command, args []string) {
// sqldb := sql.OpenDB(pgdriver.NewConnector(pgdriver.WithDSN(
// viper.GetString("pg-connection-string"))))
// bunDB := bun.NewDB(sqldb, pgdialect.New())
sqldb, err := sql.Open(sqliteshim.ShimName, "file::memory:?cache=shared")
if err != nil {
panic(err)
}
db := bun.NewDB(sqldb, sqlitedialect.New())
utils.InitDB(db)
fetcher := workflows.NewFetcher(db)
go fetcher.Run()
h := handlers.NewHandlers(db, fetcher)
router := bunrouter.New()
backend := router.NewGroup("").
Use(middlewares.ErrorHandler).
Use(middlewares.AccessLog)
if viper.GetBool("swagger") {
backend.GET("/swagger/*any",
bunrouter.HTTPHandlerFunc(
httpSwagger.Handler()))
}
backend.GET("/url", h.GetUrl)
backend.POST("/url", h.PostUrl)
backend.DELETE("/url", h.DeleteUrl)
log.Println(http.ListenAndServe(
":"+viper.GetString("port"),
otelhttp.NewHandler(router, "")))
},
}
func init() {
serverCmd.Flags().
String("port", "8080", "")
serverCmd.Flags().
Bool("swagger", true, "")
serverCmd.Flags().
String("savefile", "./urlList.json", "")
}