diff --git a/internal/shortener/handler.go b/internal/shortener/handler.go index 8c27ac7..0789bc6 100644 --- a/internal/shortener/handler.go +++ b/internal/shortener/handler.go @@ -53,6 +53,7 @@ func NewHandler(service *Service, baseURL string) (*Handler, error) { return &Handler{service: service, baseURL: baseURL}, nil } + func (h *Handler) CreateShortURL(w http.ResponseWriter, r *http.Request) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS") @@ -107,7 +108,8 @@ func (h *Handler) CreateShortURL(w http.ResponseWriter, r *http.Request) { ExpiresAt: expiresAt, } - if err := h.service.storeUrl(newUrl); err != nil { + err = h.service.storeUrl(newUrl) + if err != nil { log.Error("Failed to store URL", "error", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return @@ -329,7 +331,6 @@ func (s *Service) storeUrl(u db.URL) error { } }() - wg.Add(1) go func() { defer wg.Done() if err := s.database.InsertNewURL(u); err != nil { @@ -349,10 +350,10 @@ func (s *Service) storeUrl(u db.URL) error { wg.Wait() close(errChan) - select { - case err := <-errChan: - return err - default: - return nil + for err := range errChan { + if err != nil { + return err + } } + return nil } diff --git a/main.go b/main.go index 439bd09..46c425b 100644 --- a/main.go +++ b/main.go @@ -15,6 +15,7 @@ var log = logrus.New() func main() { log.Info("Starting ferurl URL shortener service") + utils.LoadDotEnv() redisConfig, err := utils.LoadRedisConfig() if err != nil { diff --git a/utils/config.go b/utils/config.go index 78c58f7..f10881c 100644 --- a/utils/config.go +++ b/utils/config.go @@ -5,8 +5,11 @@ import ( "os" "github.com/joho/godotenv" + "github.com/sirupsen/logrus" ) +var log = logrus.New() + type RedisConfig struct { Host string Port string @@ -22,15 +25,6 @@ type DatabaseConfig struct { Name string } -func LoadEnv() error { - err := godotenv.Load() - if err != nil { - return fmt.Errorf("failed to load .env file: %w", err) - } - return nil - -} - func GetEnv(key string, defaultValue string) string { value := os.Getenv(key) if value == "" { @@ -39,6 +33,15 @@ func GetEnv(key string, defaultValue string) string { return value } + +func LoadDotEnv() { + if err := godotenv.Load(); err != nil { + // .env file not found, continue using environment variables + log.Info("No .env file found, using environment variables") + } +} + + func DatabaseUrl() string { return fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", GetEnv("DB_USERNAME", "postgres"), GetEnv("DB_PASSWORD", "postgres"), GetEnv("DB_HOST", "localhost"), GetEnv("DB_PORT", "5432"), GetEnv("DB_NAME", "postgres")) @@ -49,11 +52,6 @@ func RedisUrl() string { } func LoadRedisConfig() (RedisConfig, error) { - err := LoadEnv() - if err != nil { - return RedisConfig{}, err - } - return RedisConfig{ Host: GetEnv("REDIS_HOST", "localhost"), Port: GetEnv("REDIS_PORT", "6379"), @@ -63,11 +61,6 @@ func LoadRedisConfig() (RedisConfig, error) { } func LoadDbConfig() (DatabaseConfig, error) { - err := LoadEnv() - if err != nil { - return DatabaseConfig{}, err - } - return DatabaseConfig{ Host: GetEnv("POSTGRES_HOST", "localhost"), Port: GetEnv("POSTGRES_PORT", "5432"),