fix(migration): 레거시 개장 시각 센티널 허용
This commit is contained in:
@@ -83,7 +83,16 @@ const asJsonRecord = (value: JsonValue): Record<string, JsonValue> =>
|
|||||||
export const resolveLegacyGameOpenedAt = (env: JsonValue, legacyDate: Date, context: string): Date => {
|
export const resolveLegacyGameOpenedAt = (env: JsonValue, legacyDate: Date, context: string): Date => {
|
||||||
const record = asJsonRecord(env);
|
const record = asJsonRecord(env);
|
||||||
const candidate = record.opentime ?? record.starttime;
|
const candidate = record.opentime ?? record.starttime;
|
||||||
return candidate === null || candidate === undefined || candidate === '' ? legacyDate : toDate(candidate, context);
|
if (candidate === null || candidate === undefined || candidate === '') {
|
||||||
|
return legacyDate;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return toDate(candidate, context);
|
||||||
|
} catch {
|
||||||
|
// 후기 레거시 기수는 개장 전 sentinel(-324000000/0)을 기록하기도 한다.
|
||||||
|
// raw_env는 그대로 보존하고, 유효한 ng_games.date만 파생 시각에 사용한다.
|
||||||
|
return legacyDate;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const migrateSimpleTable = async (
|
const migrateSimpleTable = async (
|
||||||
|
|||||||
@@ -114,6 +114,20 @@ describe('legacy archive game migration', () => {
|
|||||||
expect(resolveLegacyGameOpenedAt({}, new Date('2020-01-01T00:00:00.000Z'), 'fixture').toISOString()).toBe(
|
expect(resolveLegacyGameOpenedAt({}, new Date('2020-01-01T00:00:00.000Z'), 'fixture').toISOString()).toBe(
|
||||||
'2020-01-01T00:00:00.000Z'
|
'2020-01-01T00:00:00.000Z'
|
||||||
);
|
);
|
||||||
|
expect(
|
||||||
|
resolveLegacyGameOpenedAt(
|
||||||
|
{ opentime: -324000000, starttime: 0 },
|
||||||
|
new Date('2026-08-10T22:00:00.000Z'),
|
||||||
|
'fixture'
|
||||||
|
).toISOString()
|
||||||
|
).toBe('2026-08-10T22:00:00.000Z');
|
||||||
|
expect(
|
||||||
|
resolveLegacyGameOpenedAt(
|
||||||
|
{ opentime: 'not-a-date' },
|
||||||
|
new Date('2026-08-10T22:00:00.000Z'),
|
||||||
|
'fixture'
|
||||||
|
).toISOString()
|
||||||
|
).toBe('2026-08-10T22:00:00.000Z');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('keeps dry-run target-read-only while reporting normalized formats', async () => {
|
it('keeps dry-run target-read-only while reporting normalized formats', async () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user