/// <summary> /// Returns a Pokemon form entry for the given Pokemon form. /// </summary> protected override async Task <PokemonFormEntry> ConvertToEntry(PokemonForm pokemonForm) { var versionGroup = await VersionGroupService.Upsert(pokemonForm.VersionGroup); var types = await GetTypes(pokemonForm); var validity = await GetValidity(pokemonForm); return(new PokemonFormEntry { Key = pokemonForm.Id, Name = pokemonForm.Name, FormName = pokemonForm.FormName, IsMega = pokemonForm.IsMega, VersionGroup = new VersionGroup { Id = versionGroup.VersionGroupId, Name = versionGroup.Name }, DisplayNames = pokemonForm.Names.Localise().ToList(), SpriteUrl = GetSpriteUrl(pokemonForm), ShinySpriteUrl = GetShinySpriteUrl(pokemonForm), Types = types.ToList(), Validity = validity.ToList() }); }
/// <summary> /// Returns this type's damage relations in the version group with the given ID. /// </summary> private async Task <TypeRelations> GetDamageRelations(Type type, int versionGroupId) { if (versionGroupId == await VersionGroupsService.GetNewestVersionGroupId()) { return(type.DamageRelations); } var versionGroup = await VersionGroupsService.Upsert(versionGroupId); var pastDamageRelations = await GetPastDamageRelations(type, versionGroup.Generation); return(pastDamageRelations ?? type.DamageRelations); }
/// <summary> /// Returns the moves of the Pokemon with the given ID in the version group with the /// given ID from the data store. /// </summary> public async Task <PokemonMoveContext[]> GetPokemonMoves(int pokemonId, int versionGroupId) { var resource = await CacheService.Upsert(pokemonId); var versionGroup = await VersionGroupService.Upsert(versionGroupId); var relevantMoves = resource.Moves.Where(m => { var versionGroupNames = m.VersionGroupDetails.Select(d => d.VersionGroup.Name); return(versionGroupNames.Contains(versionGroup.Name)); }).ToArray(); var moveEntries = await MoveService.UpsertMany(relevantMoves.Select(m => m.Move)); var entryList = moveEntries.ToList(); var moveContexts = new List <PokemonMoveContext>(); for (int i = 0; i < entryList.Count; i++) { var moveEntry = entryList[i]; var context = PokemonMoveContext.From(moveEntry); var relevantDetails = relevantMoves[i].VersionGroupDetails .Where(d => d.VersionGroup.Name == versionGroup.Name); var methodList = new List <MoveLearnMethodEntry>(); foreach (var detail in relevantDetails) { var method = await MoveLearnMethodService.Upsert(detail.MoveLearnMethod); if (method.Name == "level-up") { context.Level = detail.LevelLearnedAt; } if (method.Name == "machine") { var machineRefs = moveEntry.Machines.SingleOrDefault(m => m.Id == versionGroupId)?.Data; if (machineRefs.Any()) { var machineItems = new List <ItemEntry>(); foreach (var m in machineRefs) { var machineEntry = await MachineService.Upsert(m.Id); var machineItem = await ItemService.Upsert(machineEntry.Item.Id); machineItems.Add(machineItem); } context.LearnMachines = machineItems; } } methodList.Add(method); } context.Methods = methodList; moveContexts.Add(context); } return(moveContexts.ToArray()); }