diff --git a/app/game-api/test/reservedTurns.test.ts b/app/game-api/test/reservedTurns.test.ts index 704d9be..ea64eec 100644 --- a/app/game-api/test/reservedTurns.test.ts +++ b/app/game-api/test/reservedTurns.test.ts @@ -14,6 +14,18 @@ const buildDb = () => { const generalTurns = new Map(); const nationTurns = new Map(); + type GeneralTurnFindManyArgs = Parameters[0]; + type GeneralTurnDeleteManyArgs = NonNullable[0]>; + type GeneralTurnCreateManyArgs = NonNullable[0]>; + type GeneralTurnCreateManyData = GeneralTurnCreateManyArgs['data']; + type GeneralTurnCreateManyRow = GeneralTurnCreateManyData extends Array ? Row : never; + + type NationTurnFindManyArgs = Parameters[0]; + type NationTurnDeleteManyArgs = NonNullable[0]>; + type NationTurnCreateManyArgs = NonNullable[0]>; + type NationTurnCreateManyData = NationTurnCreateManyArgs['data']; + type NationTurnCreateManyRow = NationTurnCreateManyData extends Array ? Row : never; + const db = { worldState: { findFirst: async () => null, @@ -28,13 +40,18 @@ const buildDb = () => { findUnique: async () => null, }, generalTurn: { - findMany: async ({ where }: any) => generalTurns.get(where.generalId) ?? [], - deleteMany: async ({ where }: any) => { - generalTurns.delete(where.generalId); + findMany: async (args?: GeneralTurnFindManyArgs) => { + const generalId = typeof args?.where?.generalId === 'number' ? args.where.generalId : undefined; + return generalId !== undefined ? (generalTurns.get(generalId) ?? []) : []; + }, + deleteMany: async ({ where }: GeneralTurnDeleteManyArgs) => { + if (typeof where.generalId === 'number') { + generalTurns.delete(where.generalId); + } return {}; }, - createMany: async ({ data }: any) => { - const rows = data.map((row: any, index: number) => ({ + createMany: async ({ data }: GeneralTurnCreateManyArgs) => { + const rows = data.map((row: GeneralTurnCreateManyRow, index: number) => ({ id: index + 1, generalId: row.generalId, turnIdx: row.turnIdx, @@ -49,13 +66,23 @@ const buildDb = () => { }, }, nationTurn: { - findMany: async ({ where }: any) => nationTurns.get(`${where.nationId}:${where.officerLevel}`) ?? [], - deleteMany: async ({ where }: any) => { - nationTurns.delete(`${where.nationId}:${where.officerLevel}`); + findMany: async (args?: NationTurnFindManyArgs) => { + const nationId = typeof args?.where?.nationId === 'number' ? args.where.nationId : undefined; + const officerLevel = + typeof args?.where?.officerLevel === 'number' ? args.where.officerLevel : undefined; + if (nationId === undefined || officerLevel === undefined) { + return []; + } + return nationTurns.get(`${nationId}:${officerLevel}`) ?? []; + }, + deleteMany: async ({ where }: NationTurnDeleteManyArgs) => { + if (typeof where.nationId === 'number' && typeof where.officerLevel === 'number') { + nationTurns.delete(`${where.nationId}:${where.officerLevel}`); + } return {}; }, - createMany: async ({ data }: any) => { - const rows = data.map((row: any, index: number) => ({ + createMany: async ({ data }: NationTurnCreateManyArgs) => { + const rows = data.map((row: NationTurnCreateManyRow, index: number) => ({ id: index + 1, nationId: row.nationId, officerLevel: row.officerLevel, diff --git a/app/game-api/test/router.test.ts b/app/game-api/test/router.test.ts index 8cc85c5..0e87826 100644 --- a/app/game-api/test/router.test.ts +++ b/app/game-api/test/router.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from 'vitest'; -import type { GameApiContext, GameProfile, WorldStateRow } from '../src/context.js'; +import type { DatabaseClient, GameApiContext, GameProfile, WorldStateRow } from '../src/context.js'; +import type { RedisConnector } from '@sammo-ts/infra'; import { InMemoryBattleSimTransport } from '../src/battleSim/inMemoryTransport.js'; import { InMemoryTurnDaemonTransport } from '../src/daemon/inMemoryTransport.js'; import { appRouter } from '../src/router.js'; @@ -43,12 +44,12 @@ const buildContext = (options?: { }, }; return { - db: db as any, + db: db as unknown as DatabaseClient, turnDaemon: transport, battleSim, profile, auth: null, - redis: {} as any, + redis: {} as unknown as RedisConnector['client'], }; }; diff --git a/app/gateway-api/test/authFlow.test.ts b/app/gateway-api/test/authFlow.test.ts index 953566b..1ca1754 100644 --- a/app/gateway-api/test/authFlow.test.ts +++ b/app/gateway-api/test/authFlow.test.ts @@ -3,9 +3,11 @@ import { describe, expect, it } from 'vitest'; import { InMemoryGatewaySessionService } from '../src/auth/inMemorySessionService.js'; import { createInMemoryUserRepository } from '../src/auth/inMemoryUserRepository.js'; import { InMemoryOAuthSessionStore } from '../src/auth/oauthSessionStore.js'; +import type { KakaoOAuthClient } from '../src/auth/kakaoClient.js'; import { createGatewayApiContext } from '../src/context.js'; import { InMemoryProfileStatusService } from '../src/lobby/profileStatusService.js'; import { appRouter } from '../src/router.js'; +import type { GatewayPrismaClient } from '@sammo-ts/infra'; const buildCaller = () => { const users = createInMemoryUserRepository(); @@ -76,14 +78,14 @@ const buildCaller = () => { flushPublisher, gameTokenSecret: 'test-secret', gameSessionTtlSeconds: 600, - kakaoClient: kakaoClient as any, + kakaoClient: kakaoClient as unknown as KakaoOAuthClient, oauthSessions, publicBaseUrl: 'http://localhost', profiles, orchestrator, profileStatus, requestHeaders: {}, - prisma: {} as any, + prisma: {} as unknown as GatewayPrismaClient, }) ); return { caller, oauthSessions }; diff --git a/app/gateway-frontend/src/views/LobbyView.vue b/app/gateway-frontend/src/views/LobbyView.vue index 9967ede..7ee2579 100644 --- a/app/gateway-frontend/src/views/LobbyView.vue +++ b/app/gateway-frontend/src/views/LobbyView.vue @@ -1,15 +1,24 @@