From 62c03f41ebe087b11c683ce8e197dd479fd9a859 Mon Sep 17 00:00:00 2001 From: Josh Creek <8179928+jcreek@users.noreply.github.com> Date: Sun, 14 Jul 2024 19:45:06 +0100 Subject: [PATCH] feat(*): Add region-game mappings --- src/lib/helpers/region-game-mapping.json | 46 +++++++++++++++++++ src/lib/models/RegionGameMapping.ts | 13 ++++++ .../RegionGameMappingRepository.ts | 25 ++++++++++ src/routes/api/seed/+server.ts | 8 ++++ 4 files changed, 92 insertions(+) create mode 100644 src/lib/helpers/region-game-mapping.json create mode 100644 src/lib/models/RegionGameMapping.ts create mode 100644 src/lib/repositories/RegionGameMappingRepository.ts diff --git a/src/lib/helpers/region-game-mapping.json b/src/lib/helpers/region-game-mapping.json new file mode 100644 index 0000000..37fadf8 --- /dev/null +++ b/src/lib/helpers/region-game-mapping.json @@ -0,0 +1,46 @@ +[ + { + "region": "Kanto", + "games": ["Red", "Blue", "Yellow", "LG: Pikachu", "LG: Eevee"] + }, + { + "region": "Johto", + "games": ["Gold", "Silver", "Crystal", "HG", "SS"] + }, + { + "region": "Hoenn", + "games": ["Ruby", "Sapphire", "Emerald", "OR", "AS"] + }, + { + "region": "Sinnoh", + "games": ["Diamond", "Pearl", "Platinum", "BD", "SP"] + }, + { + "region": "Unova", + "games": ["Black", "White", "Black2", "White2", "Dream Radar"] + }, + { + "region": "Kalos", + "games": ["X", "Y"] + }, + { + "region": "Alola", + "games": ["Sun", "Moon", "Moon Demo", "US", "UM"] + }, + { + "region": "Galar", + "games": ["Sword", "Shield"] + }, + { + "region": "Hisui", + "games": ["PLA"] + }, + { + "region": "Paldea", + "games": ["Scarlet", "Violet"] + }, + { + "region": "Unknown", + "games": ["Home", "Go"] + } +] diff --git a/src/lib/models/RegionGameMapping.ts b/src/lib/models/RegionGameMapping.ts new file mode 100644 index 0000000..55a42ff --- /dev/null +++ b/src/lib/models/RegionGameMapping.ts @@ -0,0 +1,13 @@ +import mongoose, { Schema, Document } from 'mongoose'; + +export interface RegionGameMapping extends Document { + region: string; + games: string[]; +} + +const regionGameMappingSchema = new Schema({ + region: String, + games: Array +}); + +export default mongoose.model('RegionGameMapping', regionGameMappingSchema); diff --git a/src/lib/repositories/RegionGameMappingRepository.ts b/src/lib/repositories/RegionGameMappingRepository.ts new file mode 100644 index 0000000..ce84cfd --- /dev/null +++ b/src/lib/repositories/RegionGameMappingRepository.ts @@ -0,0 +1,25 @@ +import RegionGameMappingModel, { type RegionGameMapping } from '$lib/models/RegionGameMapping'; + +class RegionGameMappingRepository { + async findById(id: string): Promise { + return RegionGameMappingModel.findById(id).exec(); + } + + async findAll(): Promise { + return RegionGameMappingModel.find().exec(); + } + + async create(data: Partial): Promise { + return RegionGameMappingModel.create(data); + } + + async update(id: string, data: Partial): Promise { + return RegionGameMappingModel.findByIdAndUpdate(id, data, { new: true }).exec(); + } + + async delete(id: string): Promise { + await RegionGameMappingModel.findByIdAndDelete(id).exec(); + } +} + +export default RegionGameMappingRepository; diff --git a/src/routes/api/seed/+server.ts b/src/routes/api/seed/+server.ts index 0285bc1..d00b210 100644 --- a/src/routes/api/seed/+server.ts +++ b/src/routes/api/seed/+server.ts @@ -2,8 +2,11 @@ import { json } from '@sveltejs/kit'; import { dbConnect, dbDisconnect } from '$lib/utils/db'; import PokedexEntryModel from '$lib/models/PokedexEntry'; import PokedexEntryRepository from '$lib/repositories/PokedexEntryRepository'; +import RegionGameMapping from '$lib/models/RegionGameMapping'; +import RegionGameMappingRepository from '$lib/repositories/RegionGameMappingRepository'; import PokedexMetadataModel from '$lib/models/PokedexMetadata'; import dex from '$lib/helpers/pokedex.json'; +import RegionGameMappingJson from '$lib/helpers/region-game-mapping.json'; // Function to update the lastModified field in the metadata collection const updateLastModified = async () => { @@ -23,6 +26,7 @@ export const GET = async () => { await dbConnect() .then(async () => { + // Create pokedex entries const repo = new PokedexEntryRepository(); dex.forEach(async (pokemon: PokedexEntryModel) => { @@ -30,6 +34,10 @@ export const GET = async () => { console.log(`Seeded ${pokemon.pokedexNumber} ${pokemon.pokemon} ${pokemon.form}`); }); + // Create region-game mappings + const regionGameMappingRepository = new RegionGameMappingRepository(); + await regionGameMappingRepository.create(RegionGameMappingJson as RegionGameMapping[]); + // Update the lastModified field after seeding await updateLastModified(); })