import {Realm} from "realm"; import {createRealmContext} from "@realm/react"; import {AMServer} from "./AMServer"; import {AMCardRecentUse} from "./AMCardRecentUse"; import {AMCard, AMPhysicalCardData} from "./AMCard"; const migrationFunction = (oldRealm: Realm, newRealm: Realm) => { if (oldRealm.schemaVersion < 5) { const oldCards = oldRealm.objects("card"); const gameIdMap: Map = new Map(); // get last used card for each game oldCards.forEach((card: any) => { if (card.lastUsedGameId && card.lastUsed) { const existing = gameIdMap.get(card.lastUsedGameId); if (!existing || card.lastUsed > existing.lastUsed) { gameIdMap.set(card.lastUsedGameId, { card, lastUsed: card.lastUsed }); } } }); // write new history records const newCards = newRealm.objects("card"); newRealm.write(() => { gameIdMap.forEach((value, gameId) => { const newCard = newCards.filtered(`_id == $0`, value.card._id)[0]; newRealm.create("cardUsageHistory", { gameId: gameId, card: newCard }); }); }); } }; // @ts-ignore export default createRealmContext({ schemaVersion: 5, schema: [AMPhysicalCardData, AMCardRecentUse, AMCard, AMServer], onMigration: migrationFunction, deleteRealmIfMigrationNeeded: false, });