diff --git a/data/v2/build.py b/data/v2/build.py index 4a75fe6e5..8aead5bb9 100644 --- a/data/v2/build.py +++ b/data/v2/build.py @@ -1937,6 +1937,20 @@ def csv_record_to_objects(info): build_generic((PokemonFormCondition,), "pokemon_form_conditions.csv", csv_record_to_objects) + def csv_record_to_objects(info): + yield PokemonFormFlavorText( + pokemon_form_id=int(info[0]), + version_id=int(info[1]), + language_id=int(info[2]), + flavor_text=info[3], + ) + + build_generic( + (PokemonFormFlavorText,), + "pokemon_form_flavor_text.csv", + csv_record_to_objects, + ) + def csv_record_to_objects(info): yield PokemonGameIndex(pokemon_id=int(info[0]), version_id=int(info[1]), game_index=int(info[2])) diff --git a/data/v2/csv/pokemon_form_flavor_text.csv b/data/v2/csv/pokemon_form_flavor_text.csv new file mode 100644 index 000000000..19c1104a0 --- /dev/null +++ b/data/v2/csv/pokemon_form_flavor_text.csv @@ -0,0 +1,19 @@ +pokemon_form_id,version_id,language_id,flavor_text +386,7,9,"The DNA of a space virus underwent a +sudden mutation upon exposure to a +laser beam and resulted in DEOXYS. The crystalline organ on this POKéMON’s +chest appears to be its brain." +386,8,9,"DEOXYS emerged from a virus that came +from space. It is highly intelligent and +wields psychokinetic powers. This POKéMON shoots lasers from the +crystalline organ on its chest." +10031,10,9,"This DEOXYS has transformed into its +aggressive guise. It can fool enemies by +altering its appearance." +10032,11,9,"When it changes form, an aurora appears. +It absorbs attacks by altering its +cellular structure." +10033,9,9,"A POKéMON that mutated from an +extraterrestrial virus exposed to a laser +beam. Its body is configured for superior +agility and speed." diff --git a/graphql/v1beta2/metadata/databases/default/tables/public_pokemon_v2_pokemonformflavortext.yaml b/graphql/v1beta2/metadata/databases/default/tables/public_pokemon_v2_pokemonformflavortext.yaml new file mode 100644 index 000000000..ae9a0eb09 --- /dev/null +++ b/graphql/v1beta2/metadata/databases/default/tables/public_pokemon_v2_pokemonformflavortext.yaml @@ -0,0 +1,29 @@ +table: + name: pokemon_v2_pokemonformflavortext + schema: public +configuration: + column_config: {} + custom_column_names: {} + custom_name: pokemonformflavortext + custom_root_fields: {} +object_relationships: + - name: language + using: + foreign_key_constraint_on: language_id + - name: pokemonform + using: + foreign_key_constraint_on: pokemon_form_id + - name: version + using: + foreign_key_constraint_on: version_id +select_permissions: + - role: anon + permission: + columns: '*' + filter: {} + limit: 100000 + allow_aggregations: true + query_root_fields: + - select + - select_aggregate + subscription_root_fields: [] diff --git a/graphql/v1beta2/metadata/databases/default/tables/tables.yaml b/graphql/v1beta2/metadata/databases/default/tables/tables.yaml index 4010b6b39..f5b5b86bd 100644 --- a/graphql/v1beta2/metadata/databases/default/tables/tables.yaml +++ b/graphql/v1beta2/metadata/databases/default/tables/tables.yaml @@ -119,6 +119,7 @@ - "!include public_pokemon_v2_pokemonevolution.yaml" - "!include public_pokemon_v2_pokemonform.yaml" - "!include public_pokemon_v2_pokemonformcondition.yaml" +- "!include public_pokemon_v2_pokemonformflavortext.yaml" - "!include public_pokemon_v2_pokemonformgeneration.yaml" - "!include public_pokemon_v2_pokemonformname.yaml" - "!include public_pokemon_v2_pokemonformsprites.yaml" diff --git a/openapi.yml b/openapi.yml index 9241f485b..8adb5c044 100644 --- a/openapi.yml +++ b/openapi.yml @@ -7355,7 +7355,13 @@ components: items: $ref: '#/components/schemas/PokemonFormTriggerCondition' readOnly: true + flavor_text_entries: + type: array + items: + $ref: '#/components/schemas/PokemonFormFlavorText' + readOnly: true required: + - flavor_text_entries - form_name - form_names - id @@ -7366,6 +7372,19 @@ components: - trigger_conditions - types - version_group + PokemonFormFlavorText: + type: object + properties: + flavor_text: + type: string + language: + $ref: '#/components/schemas/LanguageSummary' + version: + $ref: '#/components/schemas/VersionSummary' + required: + - flavor_text + - language + - version PokemonFormName: type: object properties: diff --git a/pokemon_v2/migrations/0035_pokemonformflavortext.py b/pokemon_v2/migrations/0035_pokemonformflavortext.py new file mode 100644 index 000000000..01c52bb58 --- /dev/null +++ b/pokemon_v2/migrations/0035_pokemonformflavortext.py @@ -0,0 +1,59 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("pokemon_v2", "0034_item_cost_and_time_of_day"), + ] + + operations = [ + migrations.CreateModel( + name="PokemonFormFlavorText", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("flavor_text", models.CharField(max_length=500)), + ( + "language", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="%(class)s_language", + to="pokemon_v2.language", + ), + ), + ( + "pokemon_form", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="%(class)s", + to="pokemon_v2.pokemonform", + ), + ), + ( + "version", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name="%(class)s", + to="pokemon_v2.version", + ), + ), + ], + options={ + "abstract": False, + }, + ), + ] diff --git a/pokemon_v2/models.py b/pokemon_v2/models.py index 7998e1a7c..cee732cbf 100644 --- a/pokemon_v2/models.py +++ b/pokemon_v2/models.py @@ -183,6 +183,7 @@ "PokemonEvolution", "PokemonForm", "PokemonFormCondition", + "PokemonFormFlavorText", "PokemonFormGeneration", "PokemonFormName", "PokemonFormSprites", @@ -1829,6 +1830,10 @@ class PokemonSpeciesFlavorText(IsFlavorText, HasPokemonSpecies, HasVersion): pass +class PokemonFormFlavorText(IsFlavorText, HasPokemonForm, HasVersion): + pass + + class Pokemon(HasName, HasPokemonSpecies, HasOrder): height = models.IntegerField(blank=True, null=True) diff --git a/pokemon_v2/serializers.py b/pokemon_v2/serializers.py index 430c1c385..f6ab2b581 100644 --- a/pokemon_v2/serializers.py +++ b/pokemon_v2/serializers.py @@ -2571,6 +2571,16 @@ class Meta: fields = ("awesome_name", "language") +class PokemonFormFlavorTextSerializer(serializers.ModelSerializer[PokemonFormFlavorText]): + flavor_text = serializers.CharField() + language = LanguageSummarySerializer() + version = VersionSummarySerializer() + + class Meta: + model = PokemonFormFlavorText + fields = ("flavor_text", "language", "version") + + class PokemonFormDetailSerializer(serializers.ModelSerializer[PokemonForm]): pokemon = PokemonSummarySerializer() version_group = VersionGroupSummarySerializer() @@ -2579,6 +2589,7 @@ class PokemonFormDetailSerializer(serializers.ModelSerializer[PokemonForm]): names = serializers.SerializerMethodField("get_pokemon_form_pokemon_names") types = serializers.SerializerMethodField("get_pokemon_form_types") trigger_conditions = serializers.SerializerMethodField("get_pokemon_form_triggers_conditions") + flavor_text_entries = PokemonFormFlavorTextSerializer(many=True, read_only=True, source="pokemonformflavortext") class Meta: model = PokemonForm @@ -2598,6 +2609,7 @@ class Meta: "names", "types", "trigger_conditions", + "flavor_text_entries", ) @extend_schema_field(PokemonFormNameSerializer(many=True))