github.com/joao-fontenele/go-url-shortener@v1.3.4/pkg/api/api.go (about) 1 package api 2 3 import ( 4 "log" 5 6 "github.com/fasthttp/router" 7 myRouter "github.com/joao-fontenele/go-url-shortener/pkg/api/router" 8 "github.com/joao-fontenele/go-url-shortener/pkg/configger" 9 "github.com/joao-fontenele/go-url-shortener/pkg/logger" 10 "github.com/joao-fontenele/go-url-shortener/pkg/metrics" 11 "github.com/joao-fontenele/go-url-shortener/pkg/postgres" 12 "github.com/joao-fontenele/go-url-shortener/pkg/redis" 13 "github.com/joao-fontenele/go-url-shortener/pkg/shortener" 14 "go.uber.org/zap" 15 ) 16 17 func loadConfs() { 18 err := configger.Load() 19 if err != nil { 20 log.Fatalf("Failed to load configs: %v", err) 21 } 22 } 23 24 func connectDB(logger *zap.Logger) { 25 _, err := postgres.Connect() 26 if err != nil { 27 logger.Fatal("Failed to connect to database", zap.Error(err)) 28 } 29 } 30 31 func connectCache(logger *zap.Logger) { 32 _, err := redis.Connect() 33 if err != nil { 34 logger.Fatal("Failed to connect to redis", zap.Error(err)) 35 } 36 } 37 38 func newLinkService() shortener.LinkService { 39 dbConn := postgres.GetConnection() 40 dbDao := postgres.NewLinkDao(dbConn) 41 dbWithMetricsDao := metrics.NewLinkDao(dbDao, "db") 42 43 cacheConn := redis.GetConnection() 44 cacheDao := redis.NewLinkDao(cacheConn) 45 cacheWithMetricsDao := metrics.NewLinkDao(cacheDao, "cache") 46 47 linkRepo := shortener.NewLinkRepository(dbWithMetricsDao, cacheWithMetricsDao) 48 49 return shortener.NewLinkService(linkRepo) 50 } 51 52 func initMetrics() { 53 metrics.Init() 54 } 55 56 // New loads configs, sets up connection, and api routes 57 func New() *router.Router { 58 loadConfs() 59 60 logger := logger.Get() 61 62 connectDB(logger) 63 connectCache(logger) 64 65 initMetrics() 66 67 ls := newLinkService() 68 r := myRouter.New(ls) 69 70 return r 71 }