aboutsummaryrefslogtreecommitdiffhomepage
path: root/backend/main.go
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-15 22:13:50 +0900
committernsfisis <nsfisis@gmail.com>2026-02-15 22:16:22 +0900
commit5ed369a6c70707543fd5ec9a13c79851fdfc5d6c (patch)
treee5678d6d88fab3ac0ae8c05b85236f3e7d5eddfd /backend/main.go
parent87e9f5ed48af3a8dca5f6373ae900336f285eef5 (diff)
downloadphperkaigi-2026-albatross-5ed369a6c70707543fd5ec9a13c79851fdfc5d6c.tar.gz
phperkaigi-2026-albatross-5ed369a6c70707543fd5ec9a13c79851fdfc5d6c.tar.zst
phperkaigi-2026-albatross-5ed369a6c70707543fd5ec9a13c79851fdfc5d6c.zip
refactor(backend): introduce DI interfaces for testability
Replace concrete *db.Queries and *pgxpool.Pool dependencies with db.Querier and db.TxManager interfaces across all handlers, game hub, and auth. This enables unit testing with mocks. - Enable sqlc emit_interface to generate Querier interface - Add TxManager abstraction to encapsulate transactions - Convert auth package-level functions to Authenticator struct - Add TaskQueueInterface/TaskWorkerInterface for game.Hub - Add initial unit tests for game logic and API handlers Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'backend/main.go')
-rw-r--r--backend/main.go9
1 files changed, 6 insertions, 3 deletions
diff --git a/backend/main.go b/backend/main.go
index 01ed784..f936cf4 100644
--- a/backend/main.go
+++ b/backend/main.go
@@ -16,6 +16,7 @@ import (
"albatross-2026-backend/admin"
"albatross-2026-backend/api"
+ "albatross-2026-backend/auth"
"albatross-2026-backend/config"
"albatross-2026-backend/db"
"albatross-2026-backend/game"
@@ -61,6 +62,8 @@ func main() {
defer connPool.Close()
queries := db.New(connPool)
+ txm := db.NewTxManager(connPool, queries)
+ authenticator := auth.NewAuthenticator(queries, txm)
e := echo.New()
e.Renderer = admin.NewRenderer()
@@ -91,7 +94,7 @@ func main() {
taskQueue := taskqueue.NewQueue("task-db:6379")
workerServer := taskqueue.NewWorkerServer("task-db:6379")
- gameHub := game.NewGameHub(queries, connPool, taskQueue, workerServer)
+ gameHub := game.NewGameHub(queries, txm, taskQueue, workerServer)
loginRL := ratelimit.NewIPRateLimiter(rate.Every(time.Minute/5), 5)
@@ -99,10 +102,10 @@ func main() {
apiGroup.Use(ratelimit.LoginRateLimitMiddleware(loginRL))
apiGroup.Use(api.SessionCookieMiddleware(queries))
apiGroup.Use(oapimiddleware.OapiRequestValidator(openAPISpec))
- apiHandler := api.NewHandler(queries, connPool, gameHub, conf)
+ apiHandler := api.NewHandler(queries, txm, gameHub, authenticator, conf)
api.RegisterHandlers(apiGroup, api.NewStrictHandler(apiHandler, nil))
- adminHandler := admin.NewHandler(queries, connPool, conf)
+ adminHandler := admin.NewHandler(queries, txm, conf)
adminGroup := e.Group(conf.BasePath + "admin")
adminGroup.Use(api.SessionCookieMiddleware(queries))
adminHandler.RegisterHandlers(adminGroup)