Compare commits

2 Commits

Author SHA1 Message Date
Andrej Mickov
c5c5706206 .env.sample added 2025-08-08 11:04:32 +02:00
Andrej Mickov
7833bbd120 Fixed short url return and improved .env loading 2025-08-08 11:01:19 +02:00
5 changed files with 30 additions and 27 deletions

8
.env.sample Normal file
View File

@@ -0,0 +1,8 @@
REDIS_PASSWORD=
DB_PASSWORD=
DB_NAME=
DB_USER=
DB_HOST=
REDIS_PORT=
REDIS_HOST=
BASE_URL=

2
.gitignore vendored
View File

@@ -1,2 +1,2 @@
.env
build/
build/

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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"),