From 2de78488a9a17f03d0b2769b204433ee86494138 Mon Sep 17 00:00:00 2001 From: Kira Jiroux Date: Fri, 5 Dec 2025 13:13:23 -0500 Subject: [PATCH] Updated Pokemon Entity to Accept Skills, SleepStyles, configuring Types with Berries --- Portfolio.Domain/Features/Pokemon/Pokemon.cs | 5 +- .../Features/Pokemon/PokemonType.cs | 18 +++ ...emonAddBerry+Skill+SleepStyles.Designer.cs | 149 ++++++++++++++++++ ...updatePokemonAddBerry+Skill+SleepStyles.cs | 76 +++++++++ ...2848_updatePokemonRemovedBerry.Designer.cs | 146 +++++++++++++++++ ...0251205172848_updatePokemonRemovedBerry.cs | 28 ++++ .../ApplicationDbContextModelSnapshot.cs | 10 ++ .../Pokemon Components/PokemonForm.razor | 4 +- .../Pokemon Components/PokemonForm.razor.cs | 12 +- .../Pokemon Pages/PokemonCreate.razor.cs | 5 +- .../wwwroot/data/pkmn_type-and-berries.json | 90 ++++++----- 11 files changed, 501 insertions(+), 42 deletions(-) create mode 100644 Portfolio.Domain/Features/Pokemon/PokemonType.cs create mode 100644 Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.Designer.cs create mode 100644 Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.cs create mode 100644 Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.Designer.cs create mode 100644 Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.cs diff --git a/Portfolio.Domain/Features/Pokemon/Pokemon.cs b/Portfolio.Domain/Features/Pokemon/Pokemon.cs index 1eeacb3..6d23f2f 100644 --- a/Portfolio.Domain/Features/Pokemon/Pokemon.cs +++ b/Portfolio.Domain/Features/Pokemon/Pokemon.cs @@ -13,11 +13,14 @@ namespace Portfolio.Domain.Features.Pokemon public required string PokemonName { get; set; } public bool IsVariation { get; set; } = false; public string? VariationName { get; set; } - public string? PokemonType { get; set; } + public required string PokemonType { get; set; } public required string SleepType { get; set; } public required string Speciality { get; set; } + public string? Skill { get; set; } + public string? SkillDescription { get; set; } public string? PokemonImageUrl { get; set; } public string? PokemonShinyImageUrl { get; set; } + public string[]? PokemonSleepStyleImageUrls { get; set; } public string? FlavorText { get; set; } public string? Ingredient1 { get; set; } public string? Ingredient2 { get; set; } diff --git a/Portfolio.Domain/Features/Pokemon/PokemonType.cs b/Portfolio.Domain/Features/Pokemon/PokemonType.cs new file mode 100644 index 0000000..6aa58a1 --- /dev/null +++ b/Portfolio.Domain/Features/Pokemon/PokemonType.cs @@ -0,0 +1,18 @@ +using Portfolio.Domain.Features.Abstractions; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Portfolio.Domain.Features.Pokemon +{ + public class PokemonType : Entity + { + public string Type { get; set; } + public string TypeImageUrl { get; set; } + public string Berry { get; set; } + public string BerryDescription { get; set; } + public string BerryImageUrl { get; set; } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.Designer.cs b/Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.Designer.cs new file mode 100644 index 0000000..d589355 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.Designer.cs @@ -0,0 +1,149 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Portfolio.Infrastructure; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20251205171834_updatePokemonAddBerry+Skill+SleepStyles")] + partial class updatePokemonAddBerrySkillSleepStyles + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon.Pokemon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FlavorText") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient1") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient2") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient3") + .HasColumnType("nvarchar(max)"); + + b.Property("IsVariation") + .HasColumnType("bit"); + + b.Property("PokemonBerry") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonId") + .HasColumnType("int"); + + b.Property("PokemonImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonShinyImageUrl") + .HasColumnType("nvarchar(max)"); + + b.PrimitiveCollection("PokemonSleepStyleImageUrls") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Skill") + .HasColumnType("nvarchar(max)"); + + b.Property("SkillDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("SleepType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Speciality") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("VariationName") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Pokemons"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Natures.PokemonNature", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRating") + .HasColumnType("int"); + + b.Property("IngredientRating") + .HasColumnType("int"); + + b.Property("Nature") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SkillRating") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("PokemonNatures"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Subskills.PokemonSubskill", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRank") + .HasColumnType("int"); + + b.Property("IngredientRank") + .HasColumnType("int"); + + b.Property("SkillRank") + .HasColumnType("int"); + + b.Property("SubSkill") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("PokemonSubskills"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.cs b/Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.cs new file mode 100644 index 0000000..00ab243 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251205171834_updatePokemonAddBerry+Skill+SleepStyles.cs @@ -0,0 +1,76 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + /// + public partial class updatePokemonAddBerrySkillSleepStyles : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "PokemonType", + table: "Pokemons", + type: "nvarchar(max)", + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "nvarchar(max)", + oldNullable: true); + + migrationBuilder.AddColumn( + name: "PokemonBerry", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "PokemonSleepStyleImageUrls", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "Skill", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + + migrationBuilder.AddColumn( + name: "SkillDescription", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PokemonBerry", + table: "Pokemons"); + + migrationBuilder.DropColumn( + name: "PokemonSleepStyleImageUrls", + table: "Pokemons"); + + migrationBuilder.DropColumn( + name: "Skill", + table: "Pokemons"); + + migrationBuilder.DropColumn( + name: "SkillDescription", + table: "Pokemons"); + + migrationBuilder.AlterColumn( + name: "PokemonType", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(max)"); + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.Designer.cs b/Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.Designer.cs new file mode 100644 index 0000000..435d1b9 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.Designer.cs @@ -0,0 +1,146 @@ +// +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Portfolio.Infrastructure; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20251205172848_updatePokemonRemovedBerry")] + partial class updatePokemonRemovedBerry + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon.Pokemon", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("FlavorText") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient1") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient2") + .HasColumnType("nvarchar(max)"); + + b.Property("Ingredient3") + .HasColumnType("nvarchar(max)"); + + b.Property("IsVariation") + .HasColumnType("bit"); + + b.Property("PokemonId") + .HasColumnType("int"); + + b.Property("PokemonImageUrl") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonShinyImageUrl") + .HasColumnType("nvarchar(max)"); + + b.PrimitiveCollection("PokemonSleepStyleImageUrls") + .HasColumnType("nvarchar(max)"); + + b.Property("PokemonType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Skill") + .HasColumnType("nvarchar(max)"); + + b.Property("SkillDescription") + .HasColumnType("nvarchar(max)"); + + b.Property("SleepType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Speciality") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("VariationName") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Pokemons"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Natures.PokemonNature", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRating") + .HasColumnType("int"); + + b.Property("IngredientRating") + .HasColumnType("int"); + + b.Property("Nature") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SkillRating") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("PokemonNatures"); + }); + + modelBuilder.Entity("Portfolio.Domain.Features.Pokemon_Subskills.PokemonSubskill", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BerryRank") + .HasColumnType("int"); + + b.Property("IngredientRank") + .HasColumnType("int"); + + b.Property("SkillRank") + .HasColumnType("int"); + + b.Property("SubSkill") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("PokemonSubskills"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.cs b/Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.cs new file mode 100644 index 0000000..a10d992 --- /dev/null +++ b/Portfolio.Infrastructure/Migrations/20251205172848_updatePokemonRemovedBerry.cs @@ -0,0 +1,28 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Portfolio.Infrastructure.Migrations +{ + /// + public partial class updatePokemonRemovedBerry : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "PokemonBerry", + table: "Pokemons"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "PokemonBerry", + table: "Pokemons", + type: "nvarchar(max)", + nullable: true); + } + } +} diff --git a/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs b/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs index dba4d10..eb0231b 100644 --- a/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/Portfolio.Infrastructure/Migrations/ApplicationDbContextModelSnapshot.cs @@ -57,7 +57,17 @@ namespace Portfolio.Infrastructure.Migrations b.Property("PokemonShinyImageUrl") .HasColumnType("nvarchar(max)"); + b.PrimitiveCollection("PokemonSleepStyleImageUrls") + .HasColumnType("nvarchar(max)"); + b.Property("PokemonType") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Skill") + .HasColumnType("nvarchar(max)"); + + b.Property("SkillDescription") .HasColumnType("nvarchar(max)"); b.Property("SleepType") diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor index 89a65a9..135b998 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor @@ -59,9 +59,9 @@ else Pokemon Type - @foreach (var pt in PokemonTypes) + @foreach (var pt in PkmnTypes) { - + } diff --git a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs index 8c76bda..be395b9 100644 --- a/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs +++ b/Portfolio.WebUI.Server/Components/Component/Pokemon Components/PokemonForm.razor.cs @@ -27,6 +27,7 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components { PokemonId = 0, // Or any default ID logic PokemonName = string.Empty, // Required fields cannot be null + PokemonType = string.Empty, // Required fields cannot be null SleepType = string.Empty, Speciality = string.Empty, IsVariation = false @@ -49,7 +50,7 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components protected static readonly string[] Specialities = new[] { "Berries", "Ingredients", "Skills", "All" }; private List? Ingredients; - + private List? PkmnTypes; private bool HideLabel { get; set; } private bool showErrors { get; set; } = false; @@ -58,7 +59,14 @@ namespace Portfolio.WebUI.Server.Components.Component.Pokemon_Components { var http = ClientFactory.CreateClient("LocalClient"); Ingredients = await http.GetFromJsonAsync>("data/ingredients.json"); - + PkmnTypes = await http.GetFromJsonAsync>("data/pkmn_type-and-berries.json"); + var count = 0; + foreach (var t in PkmnTypes) + { + count++; + //if (count <= 9) { Console.WriteLine("0"+ count + ": | " + t.Type + "\t| " + t.Berry); } + //else { Console.WriteLine(count + ": | " + t.Type + "\t| " + t.Berry); } + } if (formUse == "EDIT") { if (PokemonToEdit.IsVariation == true) diff --git a/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.cs b/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.cs index 469c81b..b36d93f 100644 --- a/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.cs +++ b/Portfolio.WebUI.Server/Components/Pages/Pokemon Pages/PokemonCreate.razor.cs @@ -25,11 +25,12 @@ namespace Portfolio.WebUI.Server.Components.Pages.Pokemon_Pages TogglePokemon2FormView(); } - + // Create up to 3 Pokemon private Pokemon pokemon1 = new Pokemon { PokemonId = 0, // Or any default ID logic PokemonName = string.Empty, // Required fields cannot be null + PokemonType = string.Empty, SleepType = string.Empty, Speciality = string.Empty, IsVariation = false @@ -38,6 +39,7 @@ namespace Portfolio.WebUI.Server.Components.Pages.Pokemon_Pages { PokemonId = 0, // Or any default ID logic PokemonName = string.Empty, // Required fields cannot be null + PokemonType = string.Empty, SleepType = string.Empty, Speciality = string.Empty, IsVariation = false @@ -46,6 +48,7 @@ namespace Portfolio.WebUI.Server.Components.Pages.Pokemon_Pages { PokemonId = 0, // Or any default ID logic PokemonName = string.Empty, // Required fields cannot be null + PokemonType = string.Empty, SleepType = string.Empty, Speciality = string.Empty, IsVariation = false diff --git a/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json b/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json index 33145cd..10af12c 100644 --- a/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json +++ b/Portfolio.WebUI.Server/wwwroot/data/pkmn_type-and-berries.json @@ -1,111 +1,129 @@ [ { "type": "Grass", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/grass.png", "berry": "Durin", - "description": "This Berry is tremendously bitter. Just one bite is enough to instantly stop hiccups.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/durinberry.png" + "berryDescription": "This Berry is tremendously bitter. Just one bite is enough to instantly stop hiccups.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/durinberry.png" }, { "type": "Fire", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/fire.png", "berry": "Leppa", - "description": "It takes longer to grow than Berries such as Cheri. The smaller Berries taste better.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/leppaberry.png" + "berryDescription": "It takes longer to grow than Berries such as Cheri. The smaller Berries taste better.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/leppaberry.png" }, { "type": "Water", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/water.png", "berry": "Oran", - "description": "Nature's gifts came together as one in this Berry. It has a wondrous mix of flavors that spread in the mouth.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/oranberry.png" + "berryDescription": "Nature's gifts came together as one in this Berry. It has a wondrous mix of flavors that spread in the mouth.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/oranberry.png" }, { "type": "Normal", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/normal.png", "berry": "Persim", - "description": "The more this Berry absorbs energy from sunlight, the more vividly colorful it grows.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/persimberry.png" + "berryDaescription": "The more this Berry absorbs energy from sunlight, the more vividly colorful it grows.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/persimberry.png" }, { "type": "Flying", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/flying.png", "berry": "Pamtre", - "description": "This Berry drifted from a faraway sea. It can now be cultivated even on this island.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/pamtreberry.png" + "berryDescription": "This Berry drifted from a faraway sea. It can now be cultivated even on this island.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/pamtreberry.png" }, { "type": "Bug", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/bug.png", "berry": "Lum", - "description": "This Berry's gradual process of storing nutrients beneficial to Pok�mon health causes it to mature slowly.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/lumberry.png" + "berryDescription": "This Berry's gradual process of storing nutrients beneficial to Pok�mon health causes it to mature slowly.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/lumberry.png" }, { "type": "Poison", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/poison.png", "berry": "Chesto", - "description": "This Berry's thick skin and fruit are very tough and dry-tasting. However, every bit of it can be eaten.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/chestoberry.png" + "berryDescription": "This Berry's thick skin and fruit are very tough and dry-tasting. However, every bit of it can be eaten.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/chestoberry.png" }, { "type": "Electric", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/electric.png", "berry": "Grepa", - "description": "One bite of this very tender Berry fills the mouth with its sweet and tangy flavor.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/grepaberry.png" + "berryDescription": "One bite of this very tender Berry fills the mouth with its sweet and tangy flavor.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/grepaberry.png" }, { "type": "Ground", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/ground.png", "berry": "Figy", - "description": "This Berry is oddly shaped, appearing as if someone took a bite out of it. It's packed full of spicy substances.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/figyberry.png" + "berryDescription": "This Berry is oddly shaped, appearing as if someone took a bite out of it. It's packed full of spicy substances.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/figyberry.png" }, { "type": "Rock", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/rock.png", "berry": "Sitrus", - "description": "Sitrus came from the same family as Oran. It's larger and smoother- tasting than Oran.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/sitrusberry.png" + "berryDescription": "Sitrus came from the same family as Oran. It's larger and smoother- tasting than Oran.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/sitrusberry.png" }, { "type": "Ice", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/ice.png", "berry": "Rawst", - "description": "If the leaves grow longer and curlier than average, this Berry will have a somewhat bitter taste.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/rawstberry.png" + "berryDescription": "If the leaves grow longer and curlier than average, this Berry will have a somewhat bitter taste.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/rawstberry.png" }, { "type": "Steel", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/steel.png", "berry": "Belue", - "description": "This glossy and colorful Berry has a mouthwateringly delicious appearance. However, it's awfully sour.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/belueberry.png" + "berryDescription": "This glossy and colorful Berry has a mouthwateringly delicious appearance. However, it's awfully sour.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/belueberry.png" }, { "type": "Fighting", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/fighting.png", "berry": "Cheri", - "description": "This bright red Berry is very spicy and has a provocative flavor. It blooms with delicate, pretty flowers.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/cheriberry.png" + "berryDescription": "This bright red Berry is very spicy and has a provocative flavor. It blooms with delicate, pretty flowers.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/cheriberry.png" }, { "type": "Psychic", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/psychic.png", "berry": "Mago", - "description": "This Berry progressively curves as it grows. The curvier the Berry, the sweeter it tastes.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/magoberry.png" + "berryDescription": "This Berry progressively curves as it grows. The curvier the Berry, the sweeter it tastes.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/magoberry.png" }, { "type": "Dark", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/dark.png", "berry": "Wiki", - "description": "It's said that this Berry grew lumps to help Pok�mon grip it, allowing propagation farther afield.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/wikiberry.png" + "berryDescription": "It's said that this Berry grew lumps to help Pok�mon grip it, allowing propagation farther afield.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/wikiberry.png" }, { "type": "Fairy", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/fairy.png", "berry": "Pecha", - "description": "Because of its hollow inside pocket, there isn't a lot to eat. What can be eaten is very sweet and delicious.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/pechaberry.png" + "berryDescription": "Because of its hollow inside pocket, there isn't a lot to eat. What can be eaten is very sweet and delicious.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/pechaberry.png" }, { "type": "Ghost", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/ghost.png", "berry": "Bluk", - "description": "Though this small, delicately skinned Berry is blue in color, it dyes the mouth black when eaten.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/blukberry.png" + "berryDescription": "Though this small, delicately skinned Berry is blue in color, it dyes the mouth black when eaten.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/blukberry.png" }, { "type": "Dragon", + "typeImageUrl": "https://www.serebii.net/pokemonsleep/pokemon/type/dragon.png", "berry": "Yache", - "description": "This Berry has a refreshing flavor that strikes a good balance of dryness and sourness. It tastes better chilled.", - "imageURL": "https://www.serebii.net/pokemonsleep/berries/yacheberry.png" + "berryDescription": "This Berry has a refreshing flavor that strikes a good balance of dryness and sourness. It tastes better chilled.", + "berryImageURL": "https://www.serebii.net/pokemonsleep/berries/yacheberry.png" } ] \ No newline at end of file