Compare commits
2 Commits
master
...
fix/return
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5c5706206 | ||
|
|
7833bbd120 |
8
.env.sample
Normal file
8
.env.sample
Normal file
@@ -0,0 +1,8 @@
|
||||
REDIS_PASSWORD=
|
||||
DB_PASSWORD=
|
||||
DB_NAME=
|
||||
DB_USER=
|
||||
DB_HOST=
|
||||
REDIS_PORT=
|
||||
REDIS_HOST=
|
||||
BASE_URL=
|
||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1,2 +1,2 @@
|
||||
.env
|
||||
build/
|
||||
build/
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
1
main.go
1
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 {
|
||||
|
||||
@@ -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"),
|
||||
|
||||
Reference in New Issue
Block a user