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", "") }