/// <summary> /// Returns the types of the given Pokemon in past version groups, if any. /// </summary> private async Task <List <WithId <Type[]> > > GetTypes(Pokemon pokemon) { var typesList = new List <WithId <Type[]> >(); if (pokemon.PastTypes.Any()) { // determine which version groups need entries var versionGroups = await VersionGroupService.GetAll(); var generationNames = pokemon.PastTypes.Select(pt => pt.Generation.Name); var relevantVersionGroups = versionGroups.Where(vg => generationNames.Contains(vg.Generation.Name)); // ensure we create an entry for only the last version group in the generation var necessaryVersionGroups = relevantVersionGroups.OrderBy(vg => vg.Id) .GroupBy(vg => vg.Generation.Name) .Select(gr => gr.Last()); foreach (var vg in necessaryVersionGroups) { var types = pokemon.PastTypes.Single(t => t.Generation.Name == vg.Generation.Name); var typeEntries = await MinimiseTypes(types.Types); typesList.Add(new WithId <Type[]>(vg.VersionGroupId, typeEntries.ToArray())); } } // always include the newest types var newestId = await VersionGroupService.GetNewestVersionGroupId(); var newestTypeEntries = await MinimiseTypes(pokemon.Types); typesList.Add(new WithId <Type[]>(newestId, newestTypeEntries.ToArray())); return(typesList); }
/// <summary> /// Returns the given Pokemon form's types. /// </summary> private async Task <IEnumerable <WithId <Type[]> > > GetTypes(PokemonForm form) { var typesList = new List <WithId <Type[]> >(); // always include the newest types var newestId = await VersionGroupService.GetNewestVersionGroupId(); var newestTypeEntries = await MinimiseTypes(form.Types); typesList.Add(new WithId <Type[]>(newestId, newestTypeEntries.ToArray())); return(typesList); }
/// <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); }