From 44df19b0791cc890dc5b74e88a851b3530d3c8b8 Mon Sep 17 00:00:00 2001 From: Hide_D Date: Mon, 5 Jan 2026 17:34:36 +0000 Subject: [PATCH] refactor: improve war module type safety and reserved turns test data handling --- app/game-api/test/reservedTurns.test.ts | 42 ++++----- app/gateway-frontend/src/views/LobbyView.vue | 29 +++--- .../logic/src/actions/turn/commandModule.ts | 4 - packages/logic/src/triggers/general-action.ts | 90 ++++++++++--------- .../logic/src/triggers/special/war/aux.ts | 7 +- .../src/triggers/special/war/che_견고.ts | 4 +- .../src/triggers/special/war/che_무쌍.ts | 8 +- .../src/triggers/special/war/che_반계.ts | 4 +- packages/logic/src/war/actions.ts | 48 +++++----- packages/logic/src/war/engine.ts | 12 ++- 10 files changed, 137 insertions(+), 111 deletions(-) diff --git a/app/game-api/test/reservedTurns.test.ts b/app/game-api/test/reservedTurns.test.ts index ea64eec..570f4a8 100644 --- a/app/game-api/test/reservedTurns.test.ts +++ b/app/game-api/test/reservedTurns.test.ts @@ -17,14 +17,10 @@ const buildDb = () => { 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: { @@ -45,20 +41,23 @@ const buildDb = () => { return generalId !== undefined ? (generalTurns.get(generalId) ?? []) : []; }, deleteMany: async ({ where }: GeneralTurnDeleteManyArgs) => { - if (typeof where.generalId === 'number') { + if (where && typeof where.generalId === 'number') { generalTurns.delete(where.generalId); } return {}; }, createMany: async ({ data }: GeneralTurnCreateManyArgs) => { - const rows = data.map((row: GeneralTurnCreateManyRow, index: number) => ({ + const dataList = (Array.isArray(data) ? data : [data]) as Record[]; + const rows: GeneralTurnRow[] = dataList.map((row, index: number) => ({ id: index + 1, - generalId: row.generalId, - turnIdx: row.turnIdx, - actionCode: row.actionCode, - arg: row.arg, + generalId: row.generalId as number, + turnIdx: row.turnIdx as number, + actionCode: row.actionCode as string, + arg: row.arg as unknown as GeneralTurnRow['arg'], + createdAt: new Date(), })); - const generalId = data[0]?.generalId; + const firstRow = dataList[0]; + const generalId = firstRow?.generalId as number | undefined; if (generalId !== undefined) { generalTurns.set(generalId, rows); } @@ -76,22 +75,25 @@ const buildDb = () => { return nationTurns.get(`${nationId}:${officerLevel}`) ?? []; }, deleteMany: async ({ where }: NationTurnDeleteManyArgs) => { - if (typeof where.nationId === 'number' && typeof where.officerLevel === 'number') { + if (where && typeof where.nationId === 'number' && typeof where.officerLevel === 'number') { nationTurns.delete(`${where.nationId}:${where.officerLevel}`); } return {}; }, createMany: async ({ data }: NationTurnCreateManyArgs) => { - const rows = data.map((row: NationTurnCreateManyRow, index: number) => ({ + const dataList = (Array.isArray(data) ? data : [data]) as Record[]; + const rows: NationTurnRow[] = dataList.map((row, index: number) => ({ id: index + 1, - nationId: row.nationId, - officerLevel: row.officerLevel, - turnIdx: row.turnIdx, - actionCode: row.actionCode, - arg: row.arg, + nationId: row.nationId as number, + officerLevel: row.officerLevel as number, + turnIdx: row.turnIdx as number, + actionCode: row.actionCode as string, + arg: row.arg as unknown as NationTurnRow['arg'], + createdAt: new Date(), })); - const nationId = data[0]?.nationId; - const officerLevel = data[0]?.officerLevel; + const firstRow = dataList[0]; + const nationId = firstRow?.nationId as number | undefined; + const officerLevel = firstRow?.officerLevel as number | undefined; if (nationId !== undefined && officerLevel !== undefined) { nationTurns.set(`${nationId}:${officerLevel}`, rows); } diff --git a/app/gateway-frontend/src/views/LobbyView.vue b/app/gateway-frontend/src/views/LobbyView.vue index 7ee2579..2dae6ad 100644 --- a/app/gateway-frontend/src/views/LobbyView.vue +++ b/app/gateway-frontend/src/views/LobbyView.vue @@ -60,6 +60,7 @@ const handleLogout = async () => {
+
@@ -91,15 +92,15 @@ const handleLogout = async () => { :style="{ color: profile.color }" class="text-lg font-bold cursor-help" :title=" - profileDetails[profile.profileName] - ? `시작일: ${profileDetails[profile.profileName].starttime}` + profileDetails[profile.profileName]?.starttime + ? `시작일: ${profileDetails[profile.profileName]?.starttime}` : '' " > {{ profile.korName }}섭
- <{{ profileDetails[profile.profileName].nationCnt }}국 경쟁중> + <{{ profileDetails[profile.profileName]?.nationCnt }}국 경쟁중>
@@ -108,25 +109,25 @@ const handleLogout = async () => { @@ -145,14 +146,14 @@ const handleLogout = async () => { class="w-12 h-12 mx-auto bg-zinc-800 rounded overflow-hidden border border-zinc-700" >
- {{ profileDetails[profile.profileName].myGeneral.name }} + {{ profileDetails[profile.profileName]?.myGeneral?.name }}
- 미 등 록 -
@@ -161,7 +162,7 @@ const handleLogout = async () => {