Fixed short url return and improved .env loading
This commit is contained in:
@@ -53,6 +53,7 @@ func NewHandler(service *Service, baseURL string) (*Handler, error) {
|
|||||||
|
|
||||||
return &Handler{service: service, baseURL: baseURL}, nil
|
return &Handler{service: service, baseURL: baseURL}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *Handler) CreateShortURL(w http.ResponseWriter, r *http.Request) {
|
func (h *Handler) CreateShortURL(w http.ResponseWriter, r *http.Request) {
|
||||||
w.Header().Set("Access-Control-Allow-Origin", "*")
|
w.Header().Set("Access-Control-Allow-Origin", "*")
|
||||||
w.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS")
|
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,
|
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)
|
log.Error("Failed to store URL", "error", err)
|
||||||
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
@@ -329,7 +331,6 @@ func (s *Service) storeUrl(u db.URL) error {
|
|||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
wg.Add(1)
|
|
||||||
go func() {
|
go func() {
|
||||||
defer wg.Done()
|
defer wg.Done()
|
||||||
if err := s.database.InsertNewURL(u); err != nil {
|
if err := s.database.InsertNewURL(u); err != nil {
|
||||||
@@ -349,10 +350,10 @@ func (s *Service) storeUrl(u db.URL) error {
|
|||||||
wg.Wait()
|
wg.Wait()
|
||||||
close(errChan)
|
close(errChan)
|
||||||
|
|
||||||
select {
|
for err := range errChan {
|
||||||
case err := <-errChan:
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
1
main.go
1
main.go
@@ -15,6 +15,7 @@ var log = logrus.New()
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log.Info("Starting ferurl URL shortener service")
|
log.Info("Starting ferurl URL shortener service")
|
||||||
|
utils.LoadDotEnv()
|
||||||
|
|
||||||
redisConfig, err := utils.LoadRedisConfig()
|
redisConfig, err := utils.LoadRedisConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -5,8 +5,11 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
|
|
||||||
"github.com/joho/godotenv"
|
"github.com/joho/godotenv"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var log = logrus.New()
|
||||||
|
|
||||||
type RedisConfig struct {
|
type RedisConfig struct {
|
||||||
Host string
|
Host string
|
||||||
Port string
|
Port string
|
||||||
@@ -22,15 +25,6 @@ type DatabaseConfig struct {
|
|||||||
Name string
|
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 {
|
func GetEnv(key string, defaultValue string) string {
|
||||||
value := os.Getenv(key)
|
value := os.Getenv(key)
|
||||||
if value == "" {
|
if value == "" {
|
||||||
@@ -39,6 +33,15 @@ func GetEnv(key string, defaultValue string) string {
|
|||||||
return value
|
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 {
|
func DatabaseUrl() string {
|
||||||
return fmt.Sprintf("postgres://%s:%s@%s:%s/%s?sslmode=disable", GetEnv("DB_USERNAME", "postgres"),
|
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"))
|
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) {
|
func LoadRedisConfig() (RedisConfig, error) {
|
||||||
err := LoadEnv()
|
|
||||||
if err != nil {
|
|
||||||
return RedisConfig{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return RedisConfig{
|
return RedisConfig{
|
||||||
Host: GetEnv("REDIS_HOST", "localhost"),
|
Host: GetEnv("REDIS_HOST", "localhost"),
|
||||||
Port: GetEnv("REDIS_PORT", "6379"),
|
Port: GetEnv("REDIS_PORT", "6379"),
|
||||||
@@ -63,11 +61,6 @@ func LoadRedisConfig() (RedisConfig, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func LoadDbConfig() (DatabaseConfig, error) {
|
func LoadDbConfig() (DatabaseConfig, error) {
|
||||||
err := LoadEnv()
|
|
||||||
if err != nil {
|
|
||||||
return DatabaseConfig{}, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return DatabaseConfig{
|
return DatabaseConfig{
|
||||||
Host: GetEnv("POSTGRES_HOST", "localhost"),
|
Host: GetEnv("POSTGRES_HOST", "localhost"),
|
||||||
Port: GetEnv("POSTGRES_PORT", "5432"),
|
Port: GetEnv("POSTGRES_PORT", "5432"),
|
||||||
|
|||||||
Reference in New Issue
Block a user