feat: use postgres

This commit is contained in:
Ilia Denisov
2026-04-26 20:34:39 +02:00
committed by GitHub
parent 48b0056b49
commit fe829285a6
365 changed files with 29223 additions and 24049 deletions
+43 -17
View File
@@ -1,6 +1,7 @@
package app
import (
"database/sql"
"errors"
"fmt"
"log/slog"
@@ -10,6 +11,11 @@ import (
"galaxy/lobby/internal/adapters/idgen"
"galaxy/lobby/internal/adapters/metricsintentpub"
"galaxy/lobby/internal/adapters/metricsracenamedir"
pgapplicationstore "galaxy/lobby/internal/adapters/postgres/applicationstore"
pggamestore "galaxy/lobby/internal/adapters/postgres/gamestore"
pginvitestore "galaxy/lobby/internal/adapters/postgres/invitestore"
pgmembershipstore "galaxy/lobby/internal/adapters/postgres/membershipstore"
pgracenamedir "galaxy/lobby/internal/adapters/postgres/racenamedir"
"galaxy/lobby/internal/adapters/racenameintents"
"galaxy/lobby/internal/adapters/racenamestub"
"galaxy/lobby/internal/adapters/redisstate"
@@ -234,6 +240,7 @@ type wiring struct {
func newWiring(
cfg config.Config,
redisClient *redis.Client,
pgPool *sql.DB,
clock func() time.Time,
logger *slog.Logger,
telemetryRuntime *telemetry.Runtime,
@@ -249,29 +256,47 @@ func newWiring(
logger = slog.Default()
}
rawDirectory, err := buildRaceNameDirectory(cfg, redisClient, policy, clock)
if redisClient == nil {
return nil, errors.New("new lobby wiring: nil redis client")
}
if pgPool == nil {
return nil, errors.New("new lobby wiring: nil postgres pool")
}
rawDirectory, err := buildRaceNameDirectory(cfg, pgPool, policy, clock)
if err != nil {
return nil, fmt.Errorf("new lobby wiring: %w", err)
}
directory := metricsracenamedir.New(rawDirectory, telemetryRuntime)
if redisClient == nil {
return nil, errors.New("new lobby wiring: nil redis client")
pgStoreCfg := struct {
DB *sql.DB
OperationTimeout time.Duration
}{
DB: pgPool,
OperationTimeout: cfg.Postgres.Conn.OperationTimeout,
}
gameStore, err := redisstate.NewGameStore(redisClient)
gameStore, err := pggamestore.New(pggamestore.Config{
DB: pgStoreCfg.DB, OperationTimeout: pgStoreCfg.OperationTimeout,
})
if err != nil {
return nil, fmt.Errorf("new lobby wiring: %w", err)
}
applicationStore, err := redisstate.NewApplicationStore(redisClient)
applicationStore, err := pgapplicationstore.New(pgapplicationstore.Config{
DB: pgStoreCfg.DB, OperationTimeout: pgStoreCfg.OperationTimeout,
})
if err != nil {
return nil, fmt.Errorf("new lobby wiring: %w", err)
}
inviteStore, err := redisstate.NewInviteStore(redisClient)
inviteStore, err := pginvitestore.New(pginvitestore.Config{
DB: pgStoreCfg.DB, OperationTimeout: pgStoreCfg.OperationTimeout,
})
if err != nil {
return nil, fmt.Errorf("new lobby wiring: %w", err)
}
membershipStore, err := redisstate.NewMembershipStore(redisClient)
membershipStore, err := pgmembershipstore.New(pgmembershipstore.Config{
DB: pgStoreCfg.DB, OperationTimeout: pgStoreCfg.OperationTimeout,
})
if err != nil {
return nil, fmt.Errorf("new lobby wiring: %w", err)
}
@@ -763,20 +788,21 @@ func newWiring(
// selected by cfg.RaceNameDirectory.Backend.
func buildRaceNameDirectory(
cfg config.Config,
redisClient *redis.Client,
pgPool *sql.DB,
policy *racename.Policy,
clock func() time.Time,
) (ports.RaceNameDirectory, error) {
switch cfg.RaceNameDirectory.Backend {
case config.RaceNameDirectoryBackendRedis:
if redisClient == nil {
return nil, errors.New("redis race name directory backend requires a Redis client")
case config.RaceNameDirectoryBackendPostgres:
if pgPool == nil {
return nil, errors.New("postgres race name directory backend requires a Postgres pool")
}
return redisstate.NewRaceNameDirectory(
redisClient,
policy,
redisstate.WithRaceNameDirectoryClock(clock),
)
return pgracenamedir.New(pgracenamedir.Config{
DB: pgPool,
OperationTimeout: cfg.Postgres.Conn.OperationTimeout,
Policy: policy,
Clock: clock,
})
case config.RaceNameDirectoryBackendStub:
return racenamestub.NewDirectory(racenamestub.WithClock(clock))
default: