80 lines
1.6 KiB
Go
Raw Normal View History

2025-02-22 12:50:26 +08:00
package main
import (
"context"
"fmt"
"log"
"os"
"legalgo-BE-go/config"
"legalgo-BE-go/database"
repository "legalgo-BE-go/internal/accessor"
internalhttp "legalgo-BE-go/internal/api/http"
pkgconfig "legalgo-BE-go/internal/config"
"legalgo-BE-go/internal/services"
2025-02-23 13:04:30 +08:00
"github.com/go-chi/chi/v5"
"github.com/joho/godotenv"
"github.com/redis/go-redis/v9"
2025-02-22 12:50:26 +08:00
"go.uber.org/fx"
)
func init() {
// Check if the .env file exists
if _, err := os.Stat(".env"); err == nil {
// Load environment variables from .env file if it exists
if err := godotenv.Load(); err != nil {
log.Println("Error loading .env file, continuing without it")
}
} else {
log.Println(".env file not found, skipping load")
}
2025-02-26 22:28:19 +08:00
config.InitEnv()
}
func run(
lc fx.Lifecycle,
db *database.DB,
apiRouter chi.Router,
rdb *redis.Client,
) {
lc.Append(fx.Hook{
OnStart: func(ctx context.Context) error {
fmt.Println("Application has started...")
_, err := rdb.Ping(ctx).Result()
if err != nil {
log.Fatalf("Could not connect to Redis: %v", err)
}
pkgconfig.Router(apiRouter)
return nil
},
OnStop: func(ctx context.Context) error {
fmt.Println("Shutting down...")
rdb.Close()
return nil
},
})
}
2025-02-22 12:50:26 +08:00
func main() {
app := fx.New(
2025-03-03 18:59:25 +07:00
config.Module,
database.Module,
repository.Module,
services.Module,
2025-03-03 18:59:25 +07:00
internalhttp.Module,
fx.Invoke(run),
2025-02-22 16:15:38 +08:00
)
if err := app.Start(context.Background()); err != nil {
log.Fatal("Error starting app:", err)
}
// Wait for the app to stop gracefully
if err := app.Stop(context.Background()); err != nil {
log.Fatal("Error stopping app:", err)
}
2025-02-22 12:50:26 +08:00
}