Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
0d4b26f
initial
garrappachc Mar 15, 2026
ab0add0
use JSON for server selection
garrappachc Mar 19, 2026
629753c
fixes
garrappachc Mar 19, 2026
33f0f33
fix: restore startup recovery for orphaned and pending-task games
garrappachc Mar 19, 2026
b79ac96
fix: improve log levels in assignFirstFree fallback chain
garrappachc Mar 19, 2026
bf4d8a7
fix: improve error message for malformed gameServer JSON in route
garrappachc Mar 19, 2026
edacc9e
fix: clarify fire-and-forget configure() call sites
garrappachc Mar 19, 2026
1cd884d
test: add unit tests for launchGame()
garrappachc Mar 19, 2026
62a7257
fix: lint
garrappachc Mar 19, 2026
812868a
fix: remove stale eslint-disable comment in launch-game test
garrappachc Mar 19, 2026
eafd02c
refactor: export assignGameServerWithRetry for use in orphan recovery
garrappachc Mar 19, 2026
8ee77e4
refactor: replace configure.cancel property with named cancelConfigur…
garrappachc Mar 19, 2026
0186403
refactor: extract assignAndConfigure for the admin reassign flow
garrappachc Mar 19, 2026
196e28c
fix: lint
garrappachc Mar 19, 2026
96529d5
refactor: extract assignGameServerWithRetry to own file
garrappachc Mar 19, 2026
20ddcdc
fix: remove unused afterEach import in assign-game-server-with-retry …
garrappachc Mar 19, 2026
f85764c
refactor: export SelectGameServer type from assign-game-server
garrappachc Mar 19, 2026
419ec05
fix: restore mutex to assignGameServer to prevent concurrent double-b…
garrappachc Mar 19, 2026
5f4ab73
fix: update stale log message and clarify findOne error behavior in c…
garrappachc Mar 19, 2026
597bf63
refactor: pre-build JSON values in tf2-quick-server region select opt…
garrappachc Mar 19, 2026
a5dccf2
fix: add findOne overload so no-pluck call returns GameModel
garrappachc Mar 19, 2026
5164329
cleanup
garrappachc Mar 20, 2026
f759e33
move configure to tasks
garrappachc Mar 20, 2026
8f15e98
cleanup
garrappachc Mar 20, 2026
f8e1c24
fix tests
garrappachc Mar 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions src/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,7 @@ export interface Events {
after: GameModel
}
'game:gameServerAssigned': {
game: GameModel
}
'game:gameServerReinitializationRequested': {
game: GameModel
gameNumber: GameNumber
}
'game:gameServerInitialized': {
game: GameModel
Expand Down
74 changes: 0 additions & 74 deletions src/game-servers/assign.test.ts

This file was deleted.

69 changes: 0 additions & 69 deletions src/game-servers/assign.ts

This file was deleted.

8 changes: 0 additions & 8 deletions src/game-servers/get-orphaned-games.ts

This file was deleted.

5 changes: 0 additions & 5 deletions src/game-servers/index.ts

This file was deleted.

100 changes: 0 additions & 100 deletions src/game-servers/plugins/auto-assign-game-server.ts

This file was deleted.

47 changes: 47 additions & 0 deletions src/games/assign-and-configure.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
import { beforeEach, describe, expect, it, vi } from 'vitest'

vi.mock('./assign-game-server', () => ({
assignGameServer: vi.fn(),
}))

vi.mock('../tasks', () => ({
tasks: { schedule: vi.fn() },
}))

vi.mock('../logger', () => ({
logger: { info: vi.fn(), error: vi.fn(), trace: vi.fn(), warn: vi.fn() },
}))

import { assignAndConfigure } from './assign-and-configure'
import { assignGameServer } from './assign-game-server'
import { tasks } from '../tasks'
import type { GameNumber } from '../database/models/game.model'
import type { SteamId64 } from '../shared/types/steam-id-64'

const gameNumber = 1 as GameNumber
const actor = '76561198000000000' as SteamId64
const select = { selected: { provider: 'static' as const, id: 'srv-1' }, actor }

describe('assignAndConfigure()', () => {
beforeEach(() => {
vi.clearAllMocks()
vi.mocked(assignGameServer).mockResolvedValue(undefined)
vi.mocked(tasks.schedule).mockResolvedValue(undefined)
})

it('calls assignGameServer with the provided selection and actor', async () => {
await assignAndConfigure(gameNumber, select)
expect(assignGameServer).toHaveBeenCalledWith(gameNumber, select)
})

it('schedules configureServer task with the game number after assignment', async () => {
await assignAndConfigure(gameNumber, select)
expect(tasks.schedule).toHaveBeenCalledWith('games:configureServer', 0, { gameNumber })
})

it('throws and does not schedule configure if assignGameServer fails', async () => {
vi.mocked(assignGameServer).mockRejectedValue(new Error('server not found'))
await expect(assignAndConfigure(gameNumber, select)).rejects.toThrow('server not found')
expect(tasks.schedule).not.toHaveBeenCalled()
})
})
9 changes: 9 additions & 0 deletions src/games/assign-and-configure.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import type { GameNumber } from '../database/models/game.model'
import { assignGameServer } from './assign-game-server'
import type { SelectGameServer } from './assign-game-server'
import { tasks } from '../tasks'

export async function assignAndConfigure(gameNumber: GameNumber, select: SelectGameServer) {
await assignGameServer(gameNumber, select)
await tasks.schedule('games:configureServer', 0, { gameNumber })
}
Loading
Loading