package main import ( "database/sql" "fmt" "code.osinet.fr/fgm/kurz/api" "code.osinet.fr/fgm/kurz/domain" "code.osinet.fr/fgm/kurz/infrastructure" _ "code.osinet.fr/fgm/kurz/migrations" "github.com/spf13/cobra" "github.com/spf13/viper" ) var cmdServeAPI = &cobra.Command{ Args: cobra.NoArgs, Long: "Serve Kurz as a JSON web API.", Run: serveAPIHandler, Short: "Serve Kurz API", Use: "api", } func init() { cmdServe.AddCommand(cmdServeAPI) } func registerInfrastructure() *sql.DB { dbDriver, dbDsn := infrastructure.ParseDbCred() db, err := infrastructure.DbDial(dbDriver, dbDsn) if err != nil { panic(err) } domain.RegisterRepositories( infrastructure.MySQLShortURLRepository{DB: db}, infrastructure.MySQLTargetURLRepository{DB: db}, ) return db } // Set up infrastructure and listen on specified address. func serveAPIHandler(_ *cobra.Command, args []string) { db := registerInfrastructure() defer db.Close() address := viper.Get("api.address").(string) err := api.ListenAndServe(address) fmt.Println(err) }