[hw-4] add postgres db

This commit is contained in:
Никита Шубин
2025-06-26 12:08:46 +00:00
parent 3ebaad5558
commit 77ed9fcf85
46 changed files with 1582 additions and 369 deletions

View File

@@ -9,6 +9,7 @@ import (
"time"
"github.com/grpc-ecosystem/grpc-gateway/v2/runtime"
"github.com/jackc/pgx/v5/pgxpool"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"google.golang.org/grpc"
@@ -16,11 +17,12 @@ import (
"google.golang.org/grpc/reflection"
"route256/loms/internal/app/server"
ordersRepository "route256/loms/internal/domain/repository/orders"
stocksRepository "route256/loms/internal/domain/repository/stocks"
ordersRepository "route256/loms/internal/domain/repository/orders/sqlc"
stocksRepository "route256/loms/internal/domain/repository/stocks/sqlc"
"route256/loms/internal/domain/service"
"route256/loms/internal/infra/config"
mw "route256/loms/internal/infra/grpc/middleware"
"route256/loms/internal/infra/postgres"
pb "route256/pkg/api/loms/v1"
)
@@ -50,13 +52,16 @@ func NewApp(configPath string) (*App, error) {
log.WithLevel(zerolog.GlobalLevel()).Msgf("using logging level=`%s`", zerolog.GlobalLevel().String())
stockRepo, err := stocksRepository.NewInMemoryRepository(100)
masterPool, replicaPool, err := getPostgresPools(c)
if err != nil {
return nil, fmt.Errorf("stocksRepository.NewInMemoryRepository: %w", err)
return nil, err
}
orderRepo := ordersRepository.NewInMemoryRepository(100)
service := service.NewLomsService(orderRepo, stockRepo)
stockRepo := stocksRepository.NewStockRepository(masterPool, replicaPool)
orderRepo := ordersRepository.NewOrderRepository(masterPool)
txManager := postgres.NewTxManager(masterPool, replicaPool)
service := service.NewLomsService(orderRepo, stockRepo, txManager)
controller := server.NewServer(service)
app := &App{
@@ -117,3 +122,34 @@ func (app *App) ListenAndServe() error {
return gwServer.ListenAndServe()
}
func getPostgresPools(c *config.Config) (masterPool, replicaPool *pgxpool.Pool, err error) {
masterConn := fmt.Sprintf(
"postgresql://%s:%s@%s:%s/%s?sslmode=disable",
c.DatabaseMaster.User,
c.DatabaseMaster.Password,
c.DatabaseMaster.Host,
c.DatabaseMaster.Port,
c.DatabaseMaster.DBName,
)
replicaConn := fmt.Sprintf(
"postgresql://%s:%s@%s:%s/%s?sslmode=disable",
c.DatabaseReplica.User,
c.DatabaseReplica.Password,
c.DatabaseReplica.Host,
c.DatabaseReplica.Port,
c.DatabaseReplica.DBName,
)
pools, err := postgres.NewPools(context.Background(), masterConn, replicaConn)
if err != nil {
return nil, nil, err
}
if len(pools) != 2 {
return nil, nil, fmt.Errorf("got wrong number of pools when establishing postgres connection")
}
return pools[0], pools[1], nil
}