serve_api.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package main
  2. import (
  3. "database/sql"
  4. "fmt"
  5. "code.osinet.fr/fgm/kurz/api"
  6. "code.osinet.fr/fgm/kurz/domain"
  7. "code.osinet.fr/fgm/kurz/infrastructure"
  8. _ "code.osinet.fr/fgm/kurz/migrations"
  9. "github.com/spf13/cobra"
  10. "github.com/spf13/viper"
  11. )
  12. var cmdServeAPI = &cobra.Command{
  13. Args: cobra.NoArgs,
  14. Long: "Serve Kurz as a JSON web API.",
  15. Run: serveAPIHandler,
  16. Short: "Serve Kurz API",
  17. Use: "api",
  18. }
  19. func init() {
  20. cmdServe.AddCommand(cmdServeAPI)
  21. }
  22. func registerInfrastructure() *sql.DB {
  23. dbDriver, dbDsn := infrastructure.ParseDbCred()
  24. db, err := infrastructure.DbDial(dbDriver, dbDsn)
  25. if err != nil {
  26. panic(err)
  27. }
  28. domain.RegisterRepositories(
  29. infrastructure.MySQLShortURLRepository{DB: db},
  30. infrastructure.MySQLTargetURLRepository{DB: db},
  31. )
  32. return db
  33. }
  34. // Set up infrastructure and listen on specified address.
  35. func serveAPIHandler(_ *cobra.Command, args []string) {
  36. db := registerInfrastructure()
  37. defer db.Close()
  38. address := viper.Get("api.address").(string)
  39. err := api.ListenAndServe(address)
  40. fmt.Println(err)
  41. }