start.go 938 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. package cli
  2. import (
  3. "net"
  4. "net/http"
  5. "github.com/annybs/ezdb"
  6. "github.com/recipeer/short-url-service/internal/api"
  7. )
  8. type StartCmd struct {
  9. DatabasePath string `short:"d" help:"Database path (SHORTY_DATABASE_PATH)" default:"${database_path}"`
  10. Host string `short:"h" help:"HTTP bind host (SHORTY_HOST)" default:"${host}"`
  11. Port string `short:"p" help:"HTTP port (SHORTY_PORT)" default:"${port}"`
  12. Token string `short:"t" help:"Bearer token (SHORTY_TOKEN)" default:"${token}"`
  13. }
  14. func (c *StartCmd) Run(ctx *Context) error {
  15. errc := make(chan error)
  16. db := ezdb.Memory(
  17. ezdb.LevelDB(c.DatabasePath, ezdb.Bytes(), nil),
  18. )
  19. if err := db.Open(); err != nil {
  20. return err
  21. }
  22. a := &api.API{
  23. DB: db,
  24. Log: ctx.Log,
  25. Token: c.Token,
  26. }
  27. addr := net.JoinHostPort(c.Host, c.Port)
  28. go func() {
  29. errc <- http.ListenAndServe(addr, a)
  30. }()
  31. ctx.Log.Info().Msgf("Listening at %s", addr)
  32. return <-errc
  33. }