main.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package main
  2. import (
  3. "context"
  4. "flag"
  5. "log"
  6. "os"
  7. "strconv"
  8. "github.com/ilfey/go-back/internal/app/config"
  9. "github.com/ilfey/go-back/internal/app/server"
  10. "github.com/ilfey/go-back/internal/pkg/store/pgsql"
  11. "github.com/jackc/pgx/v5"
  12. "github.com/joho/godotenv"
  13. "github.com/sirupsen/logrus"
  14. )
  15. var (
  16. logLevel string
  17. address string
  18. port string
  19. databaseUrl string
  20. key string
  21. lifeSpan int
  22. )
  23. func main() {
  24. godotenv.Load()
  25. flag.StringVar(&databaseUrl, "du", getEnv("DATABASE_URL", "PostgreSQL database url"), "LogLevel")
  26. flag.StringVar(&logLevel, "ll", getEnv("LOGLEVEL", "info"), "LogLevel")
  27. flag.StringVar(&address, "a", getEnv("ADDRESS", "0.0.0.0"), "Address")
  28. flag.StringVar(&port, "p", getEnv("PORT", "8000"), "Port")
  29. flag.StringVar(&key, "jk", getEnv("JWT_KEY", "secret"), "JWT key")
  30. flag.IntVar(&lifeSpan, "jls", getEnvInt("JWT_LIFE_SPAN", 24), "JWT life span (in hours)")
  31. flag.Parse()
  32. config := &config.Config{
  33. Address: address + ":" + port,
  34. LogLevel: logLevel,
  35. DatabaseUrl: databaseUrl,
  36. Key: []byte(key),
  37. LifeSpan: lifeSpan,
  38. }
  39. // create logger
  40. logger, err := CreateLogger(config)
  41. if err != nil {
  42. logrus.Panicf("logger configuration error: %s", err.Error())
  43. }
  44. // create database connection
  45. db, err := pgx.Connect(context.Background(), config.DatabaseUrl)
  46. if err != nil {
  47. logger.Error(err)
  48. } else {
  49. logger.Info("server connected to db")
  50. }
  51. // create store
  52. store := pgsql.New(db, logger)
  53. s := server.New()
  54. if err := s.Start(config, store, logger); err != nil {
  55. log.Fatal(err)
  56. }
  57. }
  58. func getEnv(key, fallback string) string {
  59. if value, ok := os.LookupEnv(key); ok {
  60. return value
  61. }
  62. return fallback
  63. }
  64. func getEnvInt(key string, fallback int) int {
  65. if s, ok := os.LookupEnv(key); ok {
  66. value, err := strconv.Atoi(s)
  67. if err != nil {
  68. log.Fatal(err)
  69. }
  70. return value
  71. }
  72. return fallback
  73. }
  74. func CreateLogger(config *config.Config) (*logrus.Logger, error) {
  75. logger := logrus.New()
  76. level, err := logrus.ParseLevel(config.LogLevel)
  77. if err != nil {
  78. return nil, err
  79. }
  80. logger.SetLevel(level)
  81. return logger, nil
  82. }