diff options
| author | nsfisis <nsfisis@gmail.com> | 2026-02-21 10:29:21 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2026-02-21 10:29:21 +0900 |
| commit | e8db174d3e464a5764a9f4bfd82172261bd50519 (patch) | |
| tree | 68cb8f0713fcc1f960a650d879232cb4c20ca6cd /backend/session/context.go | |
| parent | 1be106ac53caa019a8912af932a43570fa8c052d (diff) | |
| download | phperkaigi-2026-albatross-e8db174d3e464a5764a9f4bfd82172261bd50519.tar.gz phperkaigi-2026-albatross-e8db174d3e464a5764a9f4bfd82172261bd50519.tar.zst phperkaigi-2026-albatross-e8db174d3e464a5764a9f4bfd82172261bd50519.zip | |
refactor(api): separate business logic into game, tournament, session packages
Extract business logic from api/handler.go into dedicated service packages:
- session: context helpers (resolves admin → api import dependency)
- game: game state, code submission, ranking, watch logic
- tournament: bracket construction and seed ordering
- api/convert.go: domain → API type conversion functions
api/handler.go is now a thin adapter that delegates to services and
maps domain errors to HTTP status codes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'backend/session/context.go')
| -rw-r--r-- | backend/session/context.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/backend/session/context.go b/backend/session/context.go new file mode 100644 index 0000000..60f88b4 --- /dev/null +++ b/backend/session/context.go @@ -0,0 +1,39 @@ +package session + +import ( + "context" + + "albatross-2026-backend/db" +) + +type sessionIDContextKey struct{} +type userContextKey struct{} +type clientIPContextKey struct{} + +func GetSessionIDFromContext(ctx context.Context) (string, bool) { + sessionID, ok := ctx.Value(sessionIDContextKey{}).(string) + return sessionID, ok +} + +func SetSessionIDInContext(ctx context.Context, sessionID string) context.Context { + return context.WithValue(ctx, sessionIDContextKey{}, sessionID) +} + +func GetUserFromContext(ctx context.Context) (*db.User, bool) { + user, ok := ctx.Value(userContextKey{}).(*db.User) + return user, ok +} + +// SetUserInContext sets a user in the context. Intended for testing. +func SetUserInContext(ctx context.Context, user *db.User) context.Context { + return context.WithValue(ctx, userContextKey{}, user) +} + +func GetClientIPFromContext(ctx context.Context) string { + ip, _ := ctx.Value(clientIPContextKey{}).(string) + return ip +} + +func SetClientIPInContext(ctx context.Context, ip string) context.Context { + return context.WithValue(ctx, clientIPContextKey{}, ip) +} |
