perf(game-api): 사령부 예약턴 조회를 일괄화한다

관직 8개의 턴과 revision을 16개 개별 query 대신 두 번의 findMany로 읽고 기존 응답 기본값을 회귀 검증한다.
This commit is contained in:
2026-08-21 23:17:32 +00:00
parent e67a40e51d
commit 7716b2cc7c
3 changed files with 89 additions and 5 deletions
@@ -3,7 +3,7 @@ import { TRPCError } from '@trpc/server';
import { accessAuthedProcedure } from '../../../trpc.js';
import { getMyGeneral } from '../../shared/general.js';
import { resolveSecretPermission } from '../../shared/secretPermission.js';
import { MAX_NATION_TURNS, getNationTurnSnapshot } from '../../../turns/reservedTurns.js';
import { MAX_NATION_TURNS, getNationTurnSnapshots } from '../../../turns/reservedTurns.js';
import { assertNationAccess } from '../shared.js';
export const getChiefCenter = accessAuthedProcedure.query(async ({ ctx }) => {
@@ -56,17 +56,18 @@ export const getChiefCenter = accessAuthedProcedure.query(async ({ ctx }) => {
const chiefLevels = [12, 10, 8, 6, 11, 9, 7, 5];
const generalByLevel = new Map(nationGenerals.map((general) => [general.officerLevel, general]));
const turnsByLevel = await Promise.all(chiefLevels.map((level) => getNationTurnSnapshot(ctx.db, nation.id, level)));
const turnsByLevel = await getNationTurnSnapshots(ctx.db, nation.id, chiefLevels);
const chiefs = chiefLevels.map((level, idx) => {
const chiefs = chiefLevels.map((level) => {
const entry = generalByLevel.get(level);
const snapshot = turnsByLevel.get(level);
return {
officerLevel: level,
name: entry?.name ?? null,
npcState: entry?.npcState ?? null,
turnTime: entry?.turnTime ? entry.turnTime.toISOString() : null,
revision: turnsByLevel[idx]?.revision ?? 0,
turns: turnsByLevel[idx]?.turns ?? [],
revision: snapshot?.revision ?? 0,
turns: snapshot?.turns ?? [],
};
});