mirror of
https://github.com/PokeAPI/pokeapi
synced 2024-11-10 14:14:17 +00:00
Merge remote-tracking branch 'upstream/master' into feature/past-type-efficacy
This commit is contained in:
commit
8b9e4f171c
242 changed files with 8041 additions and 251 deletions
|
@ -1,14 +1,27 @@
|
|||
.git
|
||||
.gitignore
|
||||
.gitmodules
|
||||
CONTRIBUTORS.txt
|
||||
LICENSE.rst
|
||||
README.md
|
||||
|
||||
*.pyc
|
||||
**/*.pyc
|
||||
*media/*
|
||||
*static/*
|
||||
*build/*
|
||||
*.DS_STORE
|
||||
**/*.DS_STORE
|
||||
db.*
|
||||
venv*
|
||||
node_modules
|
||||
Resources
|
||||
graphql
|
||||
.vscode
|
||||
.github
|
||||
.circleci
|
||||
docker-compose.yml
|
||||
.dockerignore
|
||||
/*.md
|
||||
/*.js
|
||||
.env
|
||||
*pycache*
|
||||
target
|
55
.github/workflows/docker-image.yml
vendored
Normal file
55
.github/workflows/docker-image.yml
vendored
Normal file
|
@ -0,0 +1,55 @@
|
|||
name: Build and Push Docker image
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'master'
|
||||
- 'staging'
|
||||
tags:
|
||||
- '*.*.*'
|
||||
|
||||
jobs:
|
||||
docker:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Docker meta
|
||||
id: meta
|
||||
uses: docker/metadata-action@v3
|
||||
with:
|
||||
# list of Docker images to use as base name for tags
|
||||
images: |
|
||||
pokeapi/pokeapi
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v1
|
||||
- name: Set up Docker Buildx
|
||||
id: buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Login to DockerHub
|
||||
if: github.event_name != 'pull_request'
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME_NARAMSIM }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN_NARAMSIM }}
|
||||
- name: Inspect builder
|
||||
run: |
|
||||
echo "Name: ${{ steps.buildx.outputs.name }}"
|
||||
echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}"
|
||||
echo "Status: ${{ steps.buildx.outputs.status }}"
|
||||
echo "Flags: ${{ steps.buildx.outputs.flags }}"
|
||||
echo "Platforms: ${{ steps.buildx.outputs.platforms }}"
|
||||
- name: Build and push
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ./Resources/docker/app/Dockerfile
|
||||
push: true
|
||||
platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/arm/v7,linux/arm/v6
|
||||
tags: ${{ steps.meta.outputs.tags }}
|
||||
labels: ${{ steps.meta.outputs.labels }}
|
||||
- name: Image digest
|
||||
run: echo ${{ steps.docker_build.outputs.digest }}
|
50
.github/workflows/kustomize.yml
vendored
Normal file
50
.github/workflows/kustomize.yml
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
name: Deploy Kustomize k8s cluster
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["Build and Push Docker image"]
|
||||
branches: [master, staging]
|
||||
types:
|
||||
- completed
|
||||
schedule:
|
||||
- cron: '0 0 1 * *'
|
||||
|
||||
jobs:
|
||||
create-kustomize-cluster:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: Lint
|
||||
run: (cd Resources/k8s/kustomize && yamllint .)
|
||||
- name: Create k8s Kind Cluster
|
||||
uses: helm/kind-action@v1.1.0
|
||||
with:
|
||||
version: v0.11.1
|
||||
- name: Create deployment configuration
|
||||
run: |
|
||||
cp Resources/k8s/kustomize/base/secrets/postgres.env.sample Resources/k8s/kustomize/base/secrets/postgres.env
|
||||
cp Resources/k8s/kustomize/base/secrets/graphql.env.sample Resources/k8s/kustomize/base/secrets/graphql.env
|
||||
cp Resources/k8s/kustomize/base/config/pokeapi.env.sample Resources/k8s/kustomize/base/config/pokeapi.env
|
||||
- name: K8s Apply
|
||||
run: |
|
||||
if [ ${GITHUB_REF#refs/heads/} = 'master' ]; then make kustomize-apply; else make kustomize-staging-apply; fi
|
||||
kubectl proxy &
|
||||
kubectl describe deployment
|
||||
bash Resources/scripts/wait.sh http://localhost:8001/api/v1/namespaces/pokeapi/services/pokeapi/proxy/api/v2/
|
||||
- name: Set default namespace
|
||||
run: |
|
||||
kubectl config set-context --current --namespace pokeapi
|
||||
- name: Migrate and build data
|
||||
run: |
|
||||
make k8s-migrate
|
||||
make k8s-build-db
|
||||
bash Resources/scripts/wait.sh http://localhost:8001/api/v1/namespaces/pokeapi/services/pokeapi/proxy/api/v2/pal-park-area/5/
|
||||
- name: K8s Apply
|
||||
run: |
|
||||
kubectl wait --timeout=120s --for=condition=complete job/load-graphql
|
||||
last_command=$(kubectl get job -o jsonpath='{.status.succeeded}' load-graphql)
|
||||
test "$last_command" -eq 1
|
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -7,3 +7,7 @@ db.*
|
|||
venv*
|
||||
node_modules
|
||||
.vscode
|
||||
*.env
|
||||
Resources/nginx/ssl/*
|
||||
!Resources/nginx/ssl/*.sample.*
|
||||
.idea*
|
29
Makefile
29
Makefile
|
@ -1,8 +1,10 @@
|
|||
veekun_pokedex_repository = ../pokedex
|
||||
local_config = --settings=config.local
|
||||
docker_config = --settings=config.docker-compose
|
||||
HASURA_GRAPHQL_ADMIN_SECRET=pokemon
|
||||
|
||||
.PHONY: help
|
||||
.SILENT:
|
||||
|
||||
help:
|
||||
@grep -E '^[a-zA-Z_-]+:.*?# .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?# "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
||||
|
@ -86,3 +88,30 @@ sync-from-veekun: pull pull-veekun # Copy data from ../pokedex to this repositor
|
|||
|
||||
sync-to-veekun: pull pull-veekun # Copy data from this repository to ../pokedex
|
||||
cp -a ./data/v2/csv/. ${veekun_pokedex_repository}/pokedex/data/csv
|
||||
|
||||
# read-env-file: # Exports ./.env into shell environment variables
|
||||
# export `egrep -v '^#' .env | xargs`
|
||||
|
||||
hasura-export: # Export Hasura configuration
|
||||
hasura md export --project graphql --admin-secret ${HASURA_GRAPHQL_ADMIN_SECRET}
|
||||
|
||||
hasura-apply: # Apply local Hasura configuration
|
||||
hasura md apply --project graphql --admin-secret ${HASURA_GRAPHQL_ADMIN_SECRET}
|
||||
|
||||
hasura-get-anon-schema: # Dumps GraphQL schema
|
||||
gq http://localhost:8080/v1/graphql --introspect > graphql/schema.graphql
|
||||
|
||||
kustomize-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster
|
||||
kubectl apply -k Resources/k8s/kustomize/base/
|
||||
|
||||
kustomize-staging-apply: # (Kustomize) Run kubectl apply -k on the connected k8s cluster
|
||||
kubectl apply -k Resources/k8s/kustomize/staging/
|
||||
|
||||
k8s-migrate: # (k8s) Run any pending migrations
|
||||
kubectl exec --namespace pokeapi deployment/pokeapi -- python manage.py migrate --settings=config.docker-compose
|
||||
|
||||
k8s-build-db: # (k8s) Build the database
|
||||
kubectl exec --namespace pokeapi deployment/pokeapi -- sh -c 'echo "from data.v2.build import build_all; build_all()" | python manage.py shell --settings=config.docker-compose'
|
||||
|
||||
k8s-delete: # (k8s) Delete pokeapi namespace
|
||||
kubectl delete namespace pokeapi
|
102
README.md
102
README.md
|
@ -18,32 +18,9 @@
|
|||
|
||||
A RESTful API for Pokémon - [pokeapi.co](https://pokeapi.co)
|
||||
|
||||
## Join Us On Slack!
|
||||
> Beta GraphQL support is rolling out! Check out the [GraphQL paragraph](#graphql) for more info.
|
||||
|
||||
Have a question or just want to discuss new ideas and improvements? Hit us up on slack. Consider talking with us here before creating new issue.
|
||||
This way we can keep issues here a bit more organized and helpful in the long run. Be excellent to each other :smile:
|
||||
|
||||
[Sign up](https://pokeapi-slack-invite.herokuapp.com/) easily!
|
||||
|
||||
Once you've signed up visit [PokéAPI on Slack](https://pokeapi.slack.com)
|
||||
|
||||
## Official Wrappers
|
||||
|
||||
* Node server-side [PokeAPI/pokedex-promise-v2](https://github.com/PokeAPI/pokedex-promise-v2) | _Auto caching_
|
||||
* Browser client-side [PokeAPI/pokeapi-js-wrapper](https://github.com/PokeAPI/pokeapi-js-wrapper) | _Auto caching_
|
||||
* Java/Kotlin [PokeAPI/pokekotlin](https://github.com/PokeAPI/pokekotlin)
|
||||
* Python 3 [GregHilmes/pokebase](https://github.com/GregHilmes/pokebase) | _Auto caching_
|
||||
* Python 2/3 [PokeAPI/pokepy](https://github.com/PokeAPI/pokepy) | _Auto caching_
|
||||
* PHP [lmerotta/phpokeapi](https://github.com/lmerotta/phpokeapi) | _Auto caching, lazy loading_
|
||||
* Ruby [rdavid1099/poke-api-v2](https://github.com/rdavid1099/poke-api-v2)
|
||||
* .Net Standard [mtrdp642/PokeApiNet](https://github.com/mtrdp642/PokeApiNet) | _Auto caching_
|
||||
* Go [mtslzr/pokeapi-go](https://github.com/mtslzr/pokeapi-go) | _Auto caching_
|
||||
* Dart [prathanbomb/pokedart](https://github.com/prathanbomb/pokedart)
|
||||
* Rust [lunik1/pokerust](https://gitlab.com/lunik1/pokerust) | _Auto caching_
|
||||
* Spring Boot [dlfigueira/spring-pokeapi](https://github.com/dlfigueira/spring-pokeapi) | _Auto caching_
|
||||
* Swift [kinkofer/PokemonAPI](https://github.com/kinkofer/PokemonAPI)
|
||||
|
||||
## Setup [![pyVersion37](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/download/releases/3.7/)
|
||||
## Setup [![pyVersion37](https://img.shields.io/badge/python-3.7-blue.svg)](https://www.python.org/download/releases/3.7/)
|
||||
|
||||
- Download this source code into a working directory, be sure to use the flag `--recurse-submodules` to clone also our submodules.
|
||||
|
||||
|
@ -81,7 +58,7 @@ from data.v2.build import build_all
|
|||
build_all()
|
||||
```
|
||||
|
||||
Visit [localhost:8000/api/v2/](localhost:8000/api/v2/) to see the running API!
|
||||
Visit [localhost:80/api/v2/](localhost:80/api/v2/) to see the running API!
|
||||
|
||||
Each time the build script is run, it will iterate over each table in the database, wipe it, and rewrite each row using the data found in data/v2/csv.
|
||||
|
||||
|
@ -93,11 +70,11 @@ If you ever need to wipe the database use this command:
|
|||
make wipe_db
|
||||
```
|
||||
|
||||
## Docker and Compose
|
||||
## Docker and Compose [![docker hub](https://img.shields.io/docker/v/pokeapi/pokeapi?label=tag&sort=semver)](https://hub.docker.com/r/pokeapi/pokeapi)
|
||||
|
||||
There is also a multi-container setup, managed by [Docker Compose](https://docs.docker.com/compose/). This setup allow you to deploy a production-like environment, with separate containers for each services.
|
||||
There is also a multi-container setup, managed by [Docker Compose](https://docs.docker.com/compose/). This setup allows you to deploy a production-like environment, with separate containers for each services and is recommended if you need to simply spin up PokéAPI.
|
||||
|
||||
Start everything by simply
|
||||
Start everything by
|
||||
|
||||
```sh
|
||||
make docker-setup
|
||||
|
@ -113,14 +90,79 @@ docker-compose exec -T app sh -c 'echo "from data.v2.build import build_all; bui
|
|||
|
||||
Browse [localhost/api/v2/](http://localhost/api/v2/) or [localhost/api/v2/pokemon/bulbasaur/](http://localhost/api/v2/pokemon/bulbasaur/) on port `80`.
|
||||
|
||||
## GraphQL <a href="ttps://github.com/hasura/graphql-engine"><img height="29px" src="https://graphql-engine-cdn.hasura.io/img/powered_by_hasura_blue.svg"/></a>
|
||||
|
||||
When you start PokéAPI with the above docker-compose setup, an [Hasura Engine](https://github.com/hasura/graphql-engine) server is started as well. It's possible to track all the PokeAPI tables and foreign keys by simply
|
||||
|
||||
```sh
|
||||
# hasura cli needs to be installed and available in your $PATH: https://hasura.io/docs/latest/graphql/core/hasura-cli/install-hasura-cli.html
|
||||
# hasura cli's version has to be v2.0.0-alpha.5
|
||||
make hasura-apply
|
||||
```
|
||||
|
||||
When finished browse http://localhost:8080 and you will find the admin console. The GraphQL endpoint will be hosted at http://localhost:8080/v1/graphql.
|
||||
|
||||
A free public GraphiQL console is browsable at the address https://beta.pokeapi.co/graphql/console/. The relative GraphQL endpoint is accessible at https://beta.pokeapi.co/graphql/v1beta
|
||||
|
||||
A set of examples are provided in the directory [/graphql/examples](./graphql/examples) of this repository.
|
||||
|
||||
## Kubernetes [![k8s status](https://github.com/PokeAPI/pokeapi/actions/workflows/kustomize.yml/badge.svg?branch=master)](https://github.com/PokeAPI/pokeapi/actions/workflows/kustomize.yml)
|
||||
|
||||
[Kustomize](https://kubernetes.io/docs/tasks/manage-kubernetes-objects/kustomization/) files are provided in the folder https://github.com/PokeAPI/pokeapi/tree/master/Resources/k8s/kustomize/base/. Create and change your secrets:
|
||||
|
||||
```sh
|
||||
cp Resources/k8s/kustomize/base/secrets/postgres.env.sample Resources/k8s/kustomize/base/secrets/postgres.env
|
||||
cp Resources/k8s/kustomize/base/secrets/graphql.env.sample Resources/k8s/kustomize/base/secrets/graphql.env
|
||||
cp Resources/k8s/kustomize/base/config/pokeapi.env.sample Resources/k8s/kustomize/base/config/pokeapi.env
|
||||
# Edit the newly created files
|
||||
```
|
||||
|
||||
Configure `kubectl` to point to a cluster and then run the following commands to start a PokéAPI service.
|
||||
|
||||
```sh
|
||||
kubectl apply -k Resources/k8s/kustomize/base/
|
||||
kubectl config set-context --current --namespace pokeapi # (Optional) Set pokeapi ns as the working ns
|
||||
# Wait for the cluster to spin up
|
||||
kubectl exec --namespace pokeapi deployment/pokeapi -- python manage.py migrate --settings=config.docker-compose # Migrate the DB
|
||||
kubectl exec --namespace pokeapi deployment/pokeapi -- sh -c 'echo "from data.v2.build import build_all; build_all()" | python manage.py shell --settings=config.docker-compose' # Build the db
|
||||
kubectl wait --namespace pokeapi --timeout=120s --for=condition=complete job/load-graphql # Wait for Graphql configuration job to finish
|
||||
```
|
||||
|
||||
This k8s setup creates all k8s resources inside the _Namespace_ `pokeapi`, run `kubectl delete namespace pokeapi` to delete them. It also creates a _Service_ of type `LoadBalancer` which is exposed on port `80` and `443`. Data is persisted on `12Gi` of `ReadWriteOnce` volumes.
|
||||
|
||||
## Official REST Wrappers
|
||||
|
||||
* Node server-side [PokeAPI/pokedex-promise-v2](https://github.com/PokeAPI/pokedex-promise-v2) | _Auto caching_
|
||||
* Browser client-side [PokeAPI/pokeapi-js-wrapper](https://github.com/PokeAPI/pokeapi-js-wrapper) | _Auto caching_
|
||||
* Java/Kotlin [PokeAPI/pokekotlin](https://github.com/PokeAPI/pokekotlin)
|
||||
* Python 3 [GregHilmes/pokebase](https://github.com/GregHilmes/pokebase) | _Auto caching_
|
||||
* Python 2/3 [PokeAPI/pokepy](https://github.com/PokeAPI/pokepy) | _Auto caching_
|
||||
* PHP [lmerotta/phpokeapi](https://github.com/lmerotta/phpokeapi) | _Auto caching, lazy loading_
|
||||
* Ruby [rdavid1099/poke-api-v2](https://github.com/rdavid1099/poke-api-v2)
|
||||
* .Net Standard [mtrdp642/PokeApiNet](https://github.com/mtrdp642/PokeApiNet) | _Auto caching_
|
||||
* Go [mtslzr/pokeapi-go](https://github.com/mtslzr/pokeapi-go) | _Auto caching_
|
||||
* Dart [prathanbomb/pokedart](https://github.com/prathanbomb/pokedart)
|
||||
* Rust [lunik1/pokerust](https://gitlab.com/lunik1/pokerust) | _Auto caching_
|
||||
* Spring Boot [dlfigueira/spring-pokeapi](https://github.com/dlfigueira/spring-pokeapi) | _Auto caching_
|
||||
* Swift [kinkofer/PokemonAPI](https://github.com/kinkofer/PokemonAPI)
|
||||
|
||||
## Donations
|
||||
|
||||
Help to keep PokéAPI running! If you're using PokéAPI as a teaching resource or for a project, consider sending us a $10 donation to help keep the service up. We get almost 20 million requests a month!
|
||||
Help to keep PokéAPI running! If you're using PokéAPI as a teaching resource or for a project, consider sending us a $10 donation to help keep the service up. We get 60 million requests a month!
|
||||
|
||||
Thank you to all our backers! [Become a backer](https://opencollective.com/pokeapi#backer)
|
||||
|
||||
<a href="https://opencollective.com/pokeapi#backers" target="_blank"><img src="https://opencollective.com/pokeapi/backers.svg?width=890"></a>
|
||||
|
||||
## Join Us On Slack!
|
||||
|
||||
Have a question or just want to discuss new ideas and improvements? Hit us up on slack. Consider talking with us here before creating new issue.
|
||||
This way we can keep issues here a bit more organized and helpful in the long run. Be excellent to each other :smile:
|
||||
|
||||
[Sign up](https://pokeapi-slack-invite.herokuapp.com/) easily!
|
||||
|
||||
Once you've signed up visit [PokéAPI on Slack](https://pokeapi.slack.com)
|
||||
|
||||
## Contributing
|
||||
|
||||
This project exists thanks to all the people who [contribute](https://github.com/PokeAPI/pokeapi/blob/master/CONTRIBUTING.md)
|
||||
|
|
31
Resources/compose/docker-compose-prod-graphql.yml
Normal file
31
Resources/compose/docker-compose-prod-graphql.yml
Normal file
|
@ -0,0 +1,31 @@
|
|||
version: '2.4'
|
||||
services:
|
||||
db:
|
||||
environment:
|
||||
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
|
||||
POSTGRES_USER: "${POSTGRES_USER}"
|
||||
|
||||
app:
|
||||
env_file: .env
|
||||
|
||||
web:
|
||||
volumes:
|
||||
- graphiql:/public-console:ro
|
||||
|
||||
graphql-engine:
|
||||
environment:
|
||||
HASURA_GRAPHQL_DATABASE_URL: "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB:-pokeapi}"
|
||||
HASURA_GRAPHQL_ADMIN_SECRET: "${HASURA_GRAPHQL_ADMIN_SECRET}"
|
||||
|
||||
graphiql:
|
||||
image: pokeapi/graphiql:1.0.1
|
||||
command: sh -c 'cp -a /app/static/. /transfer/ && tail -f /etc/passwd'
|
||||
volumes:
|
||||
- graphiql:/transfer
|
||||
depends_on:
|
||||
- graphql-engine
|
||||
|
||||
volumes:
|
||||
graphiql:
|
||||
|
||||
# docker-compose -f docker-compose.yml -f Resources/compose/docker-compose-graphql.yml up
|
|
@ -2,11 +2,9 @@ FROM python:3.7-alpine
|
|||
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
ENV DJANGO_SETTINGS_MODULE 'config.docker-compose'
|
||||
ENV PYTHONHASHSEED 'random'
|
||||
|
||||
RUN mkdir /code
|
||||
WORKDIR /code
|
||||
VOLUME /code
|
||||
|
||||
ADD requirements.txt /code/
|
||||
RUN \
|
||||
|
@ -16,5 +14,9 @@ RUN \
|
|||
apk --purge del .build-deps
|
||||
ADD . /code/
|
||||
|
||||
CMD gunicorn config.wsgi:application -c gunicorn.py.ini
|
||||
EXPOSE 8000
|
||||
RUN addgroup -g 1000 -S pokeapi && \
|
||||
adduser -u 1000 -S pokeapi -G pokeapi
|
||||
|
||||
USER pokeapi
|
||||
CMD gunicorn config.wsgi:application -c gunicorn.conf.py
|
||||
EXPOSE 80
|
||||
|
|
52
Resources/docker/app/README.md
Normal file
52
Resources/docker/app/README.md
Normal file
|
@ -0,0 +1,52 @@
|
|||
# Quick reference
|
||||
|
||||
- **Maintained by**:
|
||||
[the PokeAPI Contributors](https://github.com/PokeAPI/pokeapi/graphs/contributors)
|
||||
|
||||
- **Where to get help**:
|
||||
[PokeAPI Slack](http://pokeapi.slack.com/).
|
||||
|
||||
- **Where to file issues**:
|
||||
[https://github.com/PokeAPI/pokeapi/issues](https://github.com/PokeAPI/pokeapi/issues)
|
||||
|
||||
- **Source of this description**:
|
||||
[pokeapi repo's `Resources/docker/app/` directory](https://github.com/PokeAPI/pokeapi/blob/master/Resources/docker/app/README.md)
|
||||
|
||||
## Supported tags and respective `Dockerfile` links
|
||||
|
||||
- [`latest`](https://github.com/PokeAPI/pokeapi/blob/master/Resources/docker/app/Dockerfile)
|
||||
- [`master`](https://github.com/PokeAPI/pokeapi/blob/master/Resources/docker/app/Dockerfile)
|
||||
- [`staging`](https://github.com/PokeAPI/pokeapi/blob/staging/Resources/docker/app/Dockerfile)
|
||||
|
||||
> `pokeapi` uses `python:3.7-alpine` as base image.
|
||||
|
||||
## What is PokeAPI?
|
||||
|
||||
PokeAPI is a full RESTful API linked to an extensive database detailing everything about the Pokémon main game series.
|
||||
|
||||
> [pokeapi.co](https://pokeapi.co/)
|
||||
|
||||
![logo](https://raw.githubusercontent.com/PokeAPI/media/master/logo/pokeapi_256.png)
|
||||
|
||||
## How to use this image
|
||||
|
||||
This container connects to a Postgres database via the environment variables `POSTGRES_DB`, `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_HOST`, `POSTGRES_PORT`.
|
||||
|
||||
The container connects to a Redis cache via the environment variable `REDIS_CONNECTION_STRING`.
|
||||
|
||||
### Run the container
|
||||
|
||||
The container exposes port `80`. It needs a PostgreSQL and a Redis instance to connect to. Refer to the section [How to use this image](./how-to-use-this-image) for mapping the environment variables.
|
||||
|
||||
It's recommended to use the provided [docker-compose.yml](https://github.com/PokeAPI/pokeapi/blob/master/docker-compose.yml) to start a container from this image.
|
||||
|
||||
### Build the data
|
||||
|
||||
Pokémon data isn't automatically present in this image. All Pokémon data is persisted in a PostgreSQL database and thus needs to be built.
|
||||
|
||||
When the container is up and running, run the following shell commands:
|
||||
|
||||
```sh
|
||||
docker exec pokeapi python manage.py migrate --settings=config.docker-compose
|
||||
docker exec pokeapi sh -c 'echo "from data.v2.build import build_all; build_all()" | python manage.py shell --settings=config.docker-compose'
|
||||
```
|
|
@ -1,2 +0,0 @@
|
|||
FROM nginx:alpine
|
||||
COPY ./nginx/nginx.conf /etc/nginx/nginx.conf
|
7
Resources/k8s/kustomize/.yamllint.yaml
Normal file
7
Resources/k8s/kustomize/.yamllint.yaml
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
|
||||
extends: default
|
||||
|
||||
rules:
|
||||
document-start: disable
|
||||
line-length: disable
|
|
@ -0,0 +1,9 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: haproxy-ingress-configmap
|
||||
data:
|
||||
dynamic-scaling: "true"
|
||||
ssl-redirect: "false"
|
||||
app-root: "/"
|
||||
stats-auth: pokeapi:pokeapi
|
2
Resources/k8s/kustomize/base/config/pokeapi.env.sample
Normal file
2
Resources/k8s/kustomize/base/config/pokeapi.env.sample
Normal file
|
@ -0,0 +1,2 @@
|
|||
ADMINS=PokeAPI,change.me@pokeapi.co
|
||||
BASE_URL=http://localhost/
|
|
@ -0,0 +1,25 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: default-backend
|
||||
labels:
|
||||
component: default-backend
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels:
|
||||
component: default-backend
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
component: default-backend
|
||||
spec:
|
||||
containers:
|
||||
- name: default-backend
|
||||
image: gcr.io/google_containers/defaultbackend:1.4
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
resources:
|
||||
limits:
|
||||
memory: "64Mi"
|
||||
cpu: "50m"
|
|
@ -0,0 +1,54 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: graphql
|
||||
labels:
|
||||
component: graphql
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
component: graphql
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
component: graphql
|
||||
spec:
|
||||
initContainers:
|
||||
- name: pokeapi-connection-checker
|
||||
image: curlimages/curl:latest
|
||||
command: ["sh", "-c"]
|
||||
args:
|
||||
- until curl -f -s --output /dev/null http://pokeapi:80/api/v2/; do
|
||||
echo waiting for pokeapi;
|
||||
sleep 2;
|
||||
done;
|
||||
containers:
|
||||
- name: graphql-engine
|
||||
image: hasura/graphql-engine:v2.0.0-alpha.5
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
env:
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postgres-env-secret
|
||||
key: POSTGRES_PASSWORD
|
||||
- name: HASURA_GRAPHQL_ADMIN_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: graphql-env-secret
|
||||
key: HASURA_GRAPHQL_ADMIN_SECRET
|
||||
- name: HASURA_GRAPHQL_DATABASE_URL
|
||||
value: postgres://ash:$(POSTGRES_PASSWORD)@postgresql:5432/pokeapi
|
||||
- name: HASURA_GRAPHQL_ENABLE_CONSOLE
|
||||
value: "true"
|
||||
- name: HASURA_GRAPHQL_DEV_MODE
|
||||
value: "false"
|
||||
- name: HASURA_GRAPHQL_ENABLED_LOG_TYPES
|
||||
value: startup, http-log, webhook-log, websocket-log, query-log
|
||||
- name: HASURA_GRAPHQL_UNAUTHORIZED_ROLE
|
||||
value: anon
|
||||
- name: HASURA_GRAPHQL_ENABLE_TELEMETRY
|
||||
value: "false"
|
||||
resources: {}
|
|
@ -0,0 +1,47 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: haproxy-ingress-controller
|
||||
labels:
|
||||
component: haproxy-ingress
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
component: haproxy-ingress
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
component: haproxy-ingress
|
||||
spec:
|
||||
serviceAccountName: ingress-controller
|
||||
containers:
|
||||
- name: haproxy-ingress-controller
|
||||
image: quay.io/jcmoraisjr/haproxy-ingress:v0.12.3
|
||||
resources:
|
||||
limits:
|
||||
memory: "256Mi"
|
||||
cpu: "500m"
|
||||
args:
|
||||
- --default-ssl-certificate=$(POD_NAMESPACE)/tls-secret
|
||||
- --configmap=$(POD_NAMESPACE)/haproxy-ingress-configmap
|
||||
- --reload-strategy=native
|
||||
ports:
|
||||
- name: http
|
||||
containerPort: 80
|
||||
- name: https
|
||||
containerPort: 443
|
||||
- name: stat
|
||||
containerPort: 1936
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /healthz
|
||||
port: 10253
|
||||
env:
|
||||
- name: POD_NAME
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.name
|
||||
- name: POD_NAMESPACE
|
||||
valueFrom:
|
||||
fieldRef:
|
||||
fieldPath: metadata.namespace
|
|
@ -0,0 +1,65 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: pokeapi
|
||||
labels:
|
||||
component: pokeapi
|
||||
spec:
|
||||
replicas: 2
|
||||
selector:
|
||||
matchLabels:
|
||||
component: pokeapi
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
component: pokeapi
|
||||
spec:
|
||||
initContainers:
|
||||
- name: postgres-connection-checker
|
||||
image: postgres:13.3-alpine
|
||||
command: ['sh', '-c']
|
||||
args:
|
||||
- until pg_isready -h postgresql -p 5432; do
|
||||
echo waiting for database;
|
||||
sleep 2;
|
||||
done;
|
||||
containers:
|
||||
- name: pokeapi
|
||||
image: pokeapi/pokeapi:master
|
||||
ports:
|
||||
- containerPort: 8080
|
||||
securityContext: # CI: Github Actions kills this container if not run with root. Otherwise, it's safe to use the default pokeapi/pokeapi user and remove these lines.
|
||||
allowPrivilegeEscalation: false
|
||||
runAsUser: 0
|
||||
env:
|
||||
- name: SERVER_PORT
|
||||
value: "8080"
|
||||
- name: POSTGRES_HOST
|
||||
value: postgresql
|
||||
- name: POSTGRES_USER
|
||||
value: ash
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postgres-env-secret
|
||||
key: POSTGRES_PASSWORD
|
||||
- name: POSTGRES_DB
|
||||
value: pokeapi
|
||||
- name: REDIS_CONNECTION_STRING
|
||||
value: redis://redis:6379/1
|
||||
envFrom:
|
||||
- configMapRef:
|
||||
name: pokeapi-configmap
|
||||
resources: {}
|
||||
readinessProbe:
|
||||
periodSeconds: 5
|
||||
initialDelaySeconds: 5
|
||||
httpGet:
|
||||
path: /api/v2/
|
||||
port: 8080
|
||||
livenessProbe:
|
||||
periodSeconds: 5
|
||||
initialDelaySeconds: 5
|
||||
httpGet:
|
||||
path: /api/v2/
|
||||
port: 8080
|
|
@ -0,0 +1,41 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: postgresql
|
||||
labels:
|
||||
component: postgresql
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
component: postgresql
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
component: postgresql
|
||||
spec:
|
||||
containers:
|
||||
- name: postgresql
|
||||
image: postgres:13.3-alpine
|
||||
ports:
|
||||
- containerPort: 5432
|
||||
env:
|
||||
- name: POSTGRES_USER
|
||||
value: ash
|
||||
- name: POSTGRES_PASSWORD
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: postgres-env-secret
|
||||
key: POSTGRES_PASSWORD
|
||||
- name: PGDATA
|
||||
value: /var/lib/postgresql/data/pgdata
|
||||
- name: POSTGRES_DB
|
||||
value: pokeapi
|
||||
resources: {}
|
||||
volumeMounts:
|
||||
- mountPath: /var/lib/postgresql/data
|
||||
name: postgres-claim0
|
||||
volumes:
|
||||
- name: postgres-claim0
|
||||
persistentVolumeClaim:
|
||||
claimName: postgres-claim0
|
|
@ -0,0 +1,29 @@
|
|||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: redis
|
||||
labels:
|
||||
component: redis
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
component: redis
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
component: redis
|
||||
spec:
|
||||
containers:
|
||||
- name: redis
|
||||
image: redis:6.2.3-alpine
|
||||
ports:
|
||||
- containerPort: 6379
|
||||
resources: {}
|
||||
volumeMounts:
|
||||
- mountPath: /data
|
||||
name: redis-claim0
|
||||
volumes:
|
||||
- name: redis-claim0
|
||||
persistentVolumeClaim:
|
||||
claimName: redis-claim0
|
37
Resources/k8s/kustomize/base/jobs/load-graphql.yaml
Normal file
37
Resources/k8s/kustomize/base/jobs/load-graphql.yaml
Normal file
|
@ -0,0 +1,37 @@
|
|||
apiVersion: batch/v1
|
||||
kind: Job
|
||||
metadata:
|
||||
name: load-graphql
|
||||
spec:
|
||||
ttlSecondsAfterFinished: 200
|
||||
template:
|
||||
spec:
|
||||
restartPolicy: Never
|
||||
initContainers:
|
||||
- name: pokeapi-last-built-resource-connection-checker
|
||||
image: curlimages/curl:latest
|
||||
command: ['sh', '-c']
|
||||
args:
|
||||
- until curl -f -s --output /dev/null http://pokeapi:80/api/v2/pal-park-area/5/;
|
||||
do echo waiting for pokeapi;
|
||||
sleep 2;
|
||||
done;
|
||||
containers:
|
||||
- name: load-graphql
|
||||
image: debian:buster
|
||||
env:
|
||||
- name: HASURA_GRAPHQL_ADMIN_SECRET
|
||||
valueFrom:
|
||||
secretKeyRef:
|
||||
name: graphql-env-secret
|
||||
key: HASURA_GRAPHQL_ADMIN_SECRET
|
||||
command: ["sh", "-c"]
|
||||
args:
|
||||
- apt-get update &&
|
||||
apt-get install -y git curl &&
|
||||
curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash &&
|
||||
hasura update-cli --version v2.0.0-alpha.5 &&
|
||||
git clone https://github.com/PokeAPI/pokeapi.git &&
|
||||
cd pokeapi &&
|
||||
git checkout staging &&
|
||||
hasura md apply --endpoint http://graphql:8080 --project graphql --admin-secret $(HASURA_GRAPHQL_ADMIN_SECRET)
|
38
Resources/k8s/kustomize/base/kustomization.yaml
Normal file
38
Resources/k8s/kustomize/base/kustomization.yaml
Normal file
|
@ -0,0 +1,38 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
namespace: pokeapi
|
||||
|
||||
configMapGenerator:
|
||||
- name: pokeapi-configmap
|
||||
files:
|
||||
- config/pokeapi.env
|
||||
|
||||
secretGenerator:
|
||||
- name: postgres-env-secret
|
||||
env: secrets/postgres.env
|
||||
type: Opaque
|
||||
- name: graphql-env-secret
|
||||
env: secrets/graphql.env
|
||||
type: Opaque
|
||||
|
||||
resources:
|
||||
- other/namespace.yaml
|
||||
- other/ingress-controller-rbac.yaml
|
||||
- config/haproxy-ingress-configmap.yaml
|
||||
- services/default-service.yaml
|
||||
- services/pokeapi-service.yaml
|
||||
- services/postgres-service.yaml
|
||||
- services/redis-service.yaml
|
||||
- services/graphql-service.yaml
|
||||
- services/cloud.yaml
|
||||
- volumes/postgres-persistentvolumeclaim.yaml
|
||||
- volumes/redis-persistentvolumeclaim.yaml
|
||||
- deployments/default-deployment.yaml
|
||||
- deployments/postgres-deployment.yaml
|
||||
- deployments/redis-deployment.yaml
|
||||
- deployments/pokeapi-deployment.yaml
|
||||
- deployments/graphql-deployment.yaml
|
||||
- deployments/haproxy-ingress-controller.yaml
|
||||
- other/ingress.yaml
|
||||
- jobs/load-graphql.yaml
|
125
Resources/k8s/kustomize/base/other/ingress-controller-rbac.yaml
Normal file
125
Resources/k8s/kustomize/base/other/ingress-controller-rbac.yaml
Normal file
|
@ -0,0 +1,125 @@
|
|||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: ingress-controller
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRole
|
||||
metadata:
|
||||
name: ingress-controller
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
- endpoints
|
||||
- nodes
|
||||
- pods
|
||||
- secrets
|
||||
verbs:
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- nodes
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- services
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- extensions
|
||||
- networking.k8s.io
|
||||
resources:
|
||||
- ingresses
|
||||
- ingressclasses
|
||||
verbs:
|
||||
- get
|
||||
- list
|
||||
- watch
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- events
|
||||
verbs:
|
||||
- create
|
||||
- patch
|
||||
- apiGroups:
|
||||
- "extensions"
|
||||
resources:
|
||||
- ingresses/status
|
||||
verbs:
|
||||
- update
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: Role
|
||||
metadata:
|
||||
name: ingress-controller
|
||||
rules:
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
- pods
|
||||
- secrets
|
||||
- namespaces
|
||||
verbs:
|
||||
- get
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
verbs:
|
||||
- get
|
||||
- update
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- configmaps
|
||||
verbs:
|
||||
- create
|
||||
- apiGroups:
|
||||
- ""
|
||||
resources:
|
||||
- endpoints
|
||||
verbs:
|
||||
- get
|
||||
- create
|
||||
- update
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: ClusterRoleBinding
|
||||
metadata:
|
||||
name: ingress-controller
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: ClusterRole
|
||||
name: ingress-controller
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: ingress-controller
|
||||
- apiGroup: rbac.authorization.k8s.io
|
||||
kind: User
|
||||
name: ingress-controller
|
||||
---
|
||||
apiVersion: rbac.authorization.k8s.io/v1
|
||||
kind: RoleBinding
|
||||
metadata:
|
||||
name: ingress-controller
|
||||
roleRef:
|
||||
apiGroup: rbac.authorization.k8s.io
|
||||
kind: Role
|
||||
name: ingress-controller
|
||||
subjects:
|
||||
- kind: ServiceAccount
|
||||
name: ingress-controller
|
||||
- apiGroup: rbac.authorization.k8s.io
|
||||
kind: User
|
||||
name: ingress-controller
|
50
Resources/k8s/kustomize/base/other/ingress.yaml
Normal file
50
Resources/k8s/kustomize/base/other/ingress.yaml
Normal file
|
@ -0,0 +1,50 @@
|
|||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: pokeapi-ingress
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: "haproxy"
|
||||
ingress.kubernetes.io/config-backend: |
|
||||
compression algo gzip
|
||||
compression type application/json
|
||||
spec:
|
||||
defaultBackend:
|
||||
service:
|
||||
name: default-backend
|
||||
port:
|
||||
number: 8080
|
||||
rules:
|
||||
- http:
|
||||
paths:
|
||||
- path: /api/v2
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: pokeapi
|
||||
port:
|
||||
number: 80
|
||||
---
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: graphql-ingress
|
||||
annotations:
|
||||
kubernetes.io/ingress.class: "haproxy"
|
||||
ingress.kubernetes.io/config-backend: |
|
||||
http-request replace-path /graphql(.*) \1
|
||||
spec:
|
||||
defaultBackend:
|
||||
service:
|
||||
name: default-backend
|
||||
port:
|
||||
number: 8080
|
||||
rules:
|
||||
- http:
|
||||
paths:
|
||||
- path: /graphql
|
||||
pathType: Prefix
|
||||
backend:
|
||||
service:
|
||||
name: graphql
|
||||
port:
|
||||
number: 8080
|
6
Resources/k8s/kustomize/base/other/namespace.yaml
Normal file
6
Resources/k8s/kustomize/base/other/namespace.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: pokeapi
|
||||
labels:
|
||||
name: pokeapi
|
1
Resources/k8s/kustomize/base/secrets/graphql.env.sample
Normal file
1
Resources/k8s/kustomize/base/secrets/graphql.env.sample
Normal file
|
@ -0,0 +1 @@
|
|||
HASURA_GRAPHQL_ADMIN_SECRET=pokeapi-change-me
|
1
Resources/k8s/kustomize/base/secrets/postgres.env.sample
Normal file
1
Resources/k8s/kustomize/base/secrets/postgres.env.sample
Normal file
|
@ -0,0 +1 @@
|
|||
POSTGRES_PASSWORD=pokeapi-change-me
|
21
Resources/k8s/kustomize/base/services/cloud.yaml
Normal file
21
Resources/k8s/kustomize/base/services/cloud.yaml
Normal file
|
@ -0,0 +1,21 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: haproxy-ingress
|
||||
labels:
|
||||
component: haproxy-ingress
|
||||
spec:
|
||||
type: LoadBalancer # TODO: Change to `LoadBalancer`
|
||||
externalTrafficPolicy: Local
|
||||
ports:
|
||||
- name: public-http
|
||||
port: 80
|
||||
targetPort: http
|
||||
- name: public-https
|
||||
port: 443
|
||||
targetPort: http
|
||||
- name: public-stat
|
||||
port: 1936
|
||||
targetPort: stat
|
||||
selector:
|
||||
component: haproxy-ingress
|
12
Resources/k8s/kustomize/base/services/default-service.yaml
Normal file
12
Resources/k8s/kustomize/base/services/default-service.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: default-backend
|
||||
labels:
|
||||
component: default-backend
|
||||
spec:
|
||||
selector:
|
||||
component: default-backend
|
||||
ports:
|
||||
- port: 8080
|
||||
targetPort: 8080
|
12
Resources/k8s/kustomize/base/services/graphql-service.yaml
Normal file
12
Resources/k8s/kustomize/base/services/graphql-service.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: graphql
|
||||
labels:
|
||||
component: graphql
|
||||
spec:
|
||||
selector:
|
||||
component: graphql
|
||||
ports:
|
||||
- port: 8080
|
||||
targetPort: 8080
|
14
Resources/k8s/kustomize/base/services/pokeapi-service.yaml
Normal file
14
Resources/k8s/kustomize/base/services/pokeapi-service.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: pokeapi
|
||||
labels:
|
||||
component: pokeapi
|
||||
annotations:
|
||||
ingress.kubernetes.io/balance-algorithm: leastconn
|
||||
spec:
|
||||
selector:
|
||||
component: pokeapi
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 8080
|
12
Resources/k8s/kustomize/base/services/postgres-service.yaml
Normal file
12
Resources/k8s/kustomize/base/services/postgres-service.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: postgresql
|
||||
labels:
|
||||
component: postgresql
|
||||
spec:
|
||||
selector:
|
||||
component: postgresql
|
||||
ports:
|
||||
- port: 5432
|
||||
targetPort: 5432
|
12
Resources/k8s/kustomize/base/services/redis-service.yaml
Normal file
12
Resources/k8s/kustomize/base/services/redis-service.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: redis
|
||||
labels:
|
||||
component: redis
|
||||
spec:
|
||||
selector:
|
||||
component: redis
|
||||
ports:
|
||||
- port: 6379
|
||||
targetPort: 6379
|
|
@ -0,0 +1,27 @@
|
|||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: postgres-volume0
|
||||
labels:
|
||||
type: local
|
||||
component: postgres
|
||||
spec:
|
||||
capacity:
|
||||
storage: 10Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
hostPath: # TODO: change to a cloud-solution
|
||||
path: "/mnt/data"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: postgres-claim0
|
||||
labels:
|
||||
component: postgres
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 10Gi
|
|
@ -0,0 +1,27 @@
|
|||
apiVersion: v1
|
||||
kind: PersistentVolume
|
||||
metadata:
|
||||
name: redis-volume0
|
||||
labels:
|
||||
type: local
|
||||
component: redis
|
||||
spec:
|
||||
capacity:
|
||||
storage: 2Gi
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
hostPath: # TODO: change to a cloud-solution
|
||||
path: "/mnt/data"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: PersistentVolumeClaim
|
||||
metadata:
|
||||
name: redis-claim0
|
||||
labels:
|
||||
component: redis
|
||||
spec:
|
||||
accessModes:
|
||||
- ReadWriteOnce
|
||||
resources:
|
||||
requests:
|
||||
storage: 2Gi
|
9
Resources/k8s/kustomize/staging/kustomization.yaml
Normal file
9
Resources/k8s/kustomize/staging/kustomization.yaml
Normal file
|
@ -0,0 +1,9 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
bases:
|
||||
- ../base
|
||||
|
||||
images:
|
||||
- name: pokeapi/pokeapi
|
||||
newTag: staging
|
|
@ -1,7 +1,7 @@
|
|||
worker_processes 4; # 80$ droplet, so 4 core enabled
|
||||
worker_processes 2;
|
||||
|
||||
events {
|
||||
worker_connections 8096; # accepted incoming connections*2
|
||||
worker_connections 4096;
|
||||
multi_accept on; # accept each connection as soon as you can
|
||||
accept_mutex off;
|
||||
use epoll;
|
||||
|
@ -17,7 +17,7 @@ http {
|
|||
|
||||
client_body_buffer_size 10K; # raise the threshold by which requests are written to HDD instead of RAM
|
||||
client_header_buffer_size 2k;
|
||||
client_max_body_size 8m; # we dont accept requests larger that 8mb, probably you are DoSing us
|
||||
client_max_body_size 8m; # we dont accept requests larger that 8mb
|
||||
|
||||
sendfile on;
|
||||
tcp_nopush on;
|
||||
|
@ -25,57 +25,95 @@ http {
|
|||
|
||||
keepalive_timeout 5;
|
||||
|
||||
gzip on; # enable zipping files
|
||||
gzip_vary on;
|
||||
gzip_min_length 5120; # enable it only for medium-big files (slowbro size is 7000)
|
||||
gzip_proxied expired no-cache no-store private auth;
|
||||
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml application/json;
|
||||
gzip on;
|
||||
gzip_disable "msi6";
|
||||
gzip_vary on;
|
||||
gzip_proxied any;
|
||||
gzip_comp_level 6;
|
||||
gzip_buffers 16 8k;
|
||||
gzip_http_version 1.1;
|
||||
gzip_min_length 256;
|
||||
gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml text/css text/javascript text/plain text/xml;
|
||||
|
||||
upstream pokeapi_upstream {
|
||||
# 'app' is the Django container name in Docker
|
||||
# DO NOT EDIT IT ALONE or it'll break docker-compose
|
||||
server app:8000 fail_timeout=0;
|
||||
server app:80 fail_timeout=0;
|
||||
}
|
||||
|
||||
upstream graphql_upstream {
|
||||
server graphql-engine:8080 fail_timeout=0;
|
||||
}
|
||||
|
||||
geo $limit {
|
||||
default 1;
|
||||
10.0.0.0/8 0;
|
||||
192.168.0.0/24 0;
|
||||
}
|
||||
|
||||
map $limit $limit_key {
|
||||
0 "";
|
||||
1 $binary_remote_addr;
|
||||
}
|
||||
|
||||
limit_req_zone $limit_key zone=graphqlDefaultLimit:50m rate=1r/m;
|
||||
limit_conn_zone $binary_remote_addr zone=addr:20m;
|
||||
|
||||
server {
|
||||
listen 80 deferred;
|
||||
server_name _;
|
||||
root /code;
|
||||
|
||||
include /ssl/ssl.conf*;
|
||||
|
||||
client_body_timeout 5s;
|
||||
client_header_timeout 5s;
|
||||
limit_conn addr 10;
|
||||
|
||||
root /code;
|
||||
|
||||
location /media/ {
|
||||
root /code;
|
||||
autoindex off;
|
||||
}
|
||||
|
||||
location /static/ {
|
||||
alias /code/assets/;
|
||||
autoindex off;
|
||||
}
|
||||
|
||||
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { # cache all these extensions for 5 days, disable logging
|
||||
access_log off;
|
||||
log_not_found off;
|
||||
expires 5d;
|
||||
# Admin console
|
||||
location /graphql/admin/ {
|
||||
expires 1m; # client-side caching, one minute for each API resource
|
||||
add_header Cache-Control "public";
|
||||
add_header Pragma public;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_redirect off;
|
||||
proxy_pass http://graphql_upstream/;
|
||||
}
|
||||
|
||||
location /graphql/console {
|
||||
alias /public-console/;
|
||||
index index.html;
|
||||
try_files $uri $uri/ /index.html =405;
|
||||
}
|
||||
|
||||
location /graphql/v1beta {
|
||||
limit_req zone=graphqlDefaultLimit burst=100 nodelay;
|
||||
limit_req_status 429;
|
||||
expires 1m; # client-side caching, one minute for each API resource
|
||||
add_header Cache-Control "public";
|
||||
add_header Pragma public;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
proxy_redirect off;
|
||||
proxy_pass http://graphql_upstream/v1/graphql;
|
||||
}
|
||||
|
||||
location /api/ {
|
||||
expires 1m; # client-side caching, one minute for each API resource
|
||||
add_header Cache-Control "public";
|
||||
add_header Pragma public;
|
||||
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
|
||||
proxy_redirect off;
|
||||
|
||||
proxy_pass http://pokeapi_upstream;
|
||||
}
|
||||
|
||||
|
@ -83,9 +121,7 @@ http {
|
|||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header Host $http_host;
|
||||
|
||||
proxy_redirect off;
|
||||
|
||||
proxy_pass http://pokeapi_upstream;
|
||||
}
|
||||
}
|
||||
|
|
14
Resources/nginx/ssl/ssh.sample.conf
Normal file
14
Resources/nginx/ssl/ssh.sample.conf
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Copy this file to ssl.conf, add certificate and private key to enable ssl
|
||||
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
|
||||
ssl_certificate /ssl/cert.cer;
|
||||
ssl_certificate_key /ssl/key.key;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:MozSSL:10m;
|
||||
ssl_session_tickets off;
|
||||
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
|
@ -154,7 +154,8 @@ EOF
|
|||
|
||||
# If the job was started by a Pull Request and not by a cron job, add a comment to notify the users
|
||||
notify_engine_pr() {
|
||||
if [[ $1 == "start" || $1 == "end_failed" || $1 == "end_success" || $1 == "end_no_deploy" || $1 == "end_no_new_data" ]]; then
|
||||
local -r allowed_events='start end_failed end_success end_no_deploy end_no_new_data'
|
||||
if [[ "$allowed_events" == *"$1"* ]] && [[ "$CIRCLE_BRANCH" == 'master' ]]; then
|
||||
engine_repo_pr_number=$(get_invokator_pr_number)
|
||||
if [ "$engine_repo_pr_number" != "null" ] && [ -n "$CIRCLE_USERNAME" ]; then
|
||||
curl -f -H "$auth_header" -X POST --data "$(pr_input_updater_$1)" "https://api.github.com/repos/$org/$engine_repo/issues/$engine_repo_pr_number/comments"
|
||||
|
@ -175,7 +176,7 @@ run_updater() {
|
|||
fi
|
||||
|
||||
# Run the updater
|
||||
docker run --privileged -e REPO_POKEAPI_CHECKOUT_OBJECT="$CIRCLE_SHA1" -e COMMIT_EMAIL="$email" -e COMMIT_NAME="$username" -e BRANCH_NAME="$branch_name" -e REPO_POKEAPI="https://github.com/$org/$engine_repo.git" -e REPO_DATA="https://$MACHINE_USER_GITHUB_API_TOKEN@github.com/$org/$data_repo.git" pokeapi-updater
|
||||
docker run --privileged -e REPO_POKEAPI_CHECKOUT_OBJECT="$CIRCLE_SHA1" -e COMMIT_EMAIL="$email" -e COMMIT_NAME="$username" -e BRANCH_NAME="$branch_name" -e REPO_POKEAPI="https://github.com/$org/$engine_repo.git" -e REPO_DATA="https://$MACHINE_USER_GITHUB_API_TOKEN@github.com/$org/$data_repo.git" -e RUN_AS='root' pokeapi-updater
|
||||
return_code=$?
|
||||
if [ "$return_code" -eq 2 ]; then
|
||||
cleanexit 'no-new-data' "Generated data is the same as old data, skipping deploy"
|
||||
|
|
23
Resources/scripts/wait.sh
Normal file
23
Resources/scripts/wait.sh
Normal file
|
@ -0,0 +1,23 @@
|
|||
#!/bin/bash
|
||||
|
||||
wait_for_http() {
|
||||
local url="$1"
|
||||
local max_seconds=1000
|
||||
local end_time=$(( $(date +%s) + max_seconds ))
|
||||
local success='false'
|
||||
echo "Waiting for $url"
|
||||
while [ "$(date +%s)" -lt "$end_time" ]; do # Loop until interval has elapsed.
|
||||
sleep 2
|
||||
if [ "$(curl -s -o /dev/null -L -w '%{http_code}' "$url")" == "200" ]; then
|
||||
success='true'
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ "$success" = 'true' ]; then
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
wait_for_http "${1:-http://localhost/api/v2/}"
|
11
apollo.config.js
Normal file
11
apollo.config.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
module.exports = {
|
||||
client: {
|
||||
service: {
|
||||
name: "pokeapi",
|
||||
url: "http://localhost:8080/v1/graphql",
|
||||
headers: {
|
||||
"x-hasura-admin-secret": "pokemon",
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
|
@ -1,22 +1,22 @@
|
|||
# Docker settings
|
||||
import os
|
||||
from .settings import *
|
||||
|
||||
DATABASES = {
|
||||
"default": {
|
||||
"ENGINE": "django.db.backends.postgresql_psycopg2",
|
||||
"NAME": "pokeapi",
|
||||
"USER": "ash",
|
||||
"PASSWORD": "pokemon",
|
||||
"HOST": "db",
|
||||
"PORT": 5432,
|
||||
"NAME": os.environ.get("POSTGRES_DB", "pokeapi"),
|
||||
"USER": os.environ.get("POSTGRES_USER", "ash"),
|
||||
"PASSWORD": os.environ.get("POSTGRES_PASSWORD", "pokemon"),
|
||||
"HOST": os.environ.get("POSTGRES_HOST", "db"),
|
||||
"PORT": os.environ.get("POSTGRES_PORT", 5432),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
CACHES = {
|
||||
"default": {
|
||||
"BACKEND": "django_redis.cache.RedisCache",
|
||||
"LOCATION": "redis://cache:6379/1",
|
||||
"LOCATION": os.environ.get("REDIS_CONNECTION_STRING", "redis://cache:6379/1"),
|
||||
"OPTIONS": {
|
||||
"CLIENT_CLASS": "django_redis.client.DefaultClient",
|
||||
},
|
||||
|
@ -25,3 +25,5 @@ CACHES = {
|
|||
|
||||
DEBUG = False
|
||||
TASTYPIE_FULL_DEBUG = False
|
||||
|
||||
ALLOWED_HOSTS = ["*"]
|
||||
|
|
|
@ -8,21 +8,27 @@ DEBUG = False
|
|||
|
||||
TEMPLATE_DEBUG = DEBUG
|
||||
|
||||
ADMINS = (("Paul Hallett", "paulandrewhallett@gmail.com"),)
|
||||
ADMINS = (
|
||||
os.environ.get("ADMINS", "Paul Hallett,paulandrewhallett@gmail.com").split(","),
|
||||
)
|
||||
|
||||
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
|
||||
|
||||
MANAGERS = ADMINS
|
||||
|
||||
BASE_URL = "http://pokeapi.co"
|
||||
BASE_URL = os.environ.get("BASE_URL", "http://pokeapi.co")
|
||||
|
||||
# Hosts/domain names that are valid for this site; required if DEBUG is False
|
||||
# See https://docs.djangoproject.com/en/1.5/ref/settings/#allowed-hosts
|
||||
ALLOWED_HOSTS = [".pokeapi.co", "localhost", "127.0.0.1"]
|
||||
ALLOWED_HOSTS = [
|
||||
os.environ.get("ALLOWED_HOSTS", ".pokeapi.co"),
|
||||
"localhost",
|
||||
"127.0.0.1",
|
||||
]
|
||||
|
||||
TIME_ZONE = "Europe/London"
|
||||
TIME_ZONE = os.environ.get("TIME_ZONE", "Europe/London")
|
||||
|
||||
LANGUAGE_CODE = "en-gb"
|
||||
LANGUAGE_CODE = os.environ.get("LANGUAGE_CODE", "en-gb")
|
||||
|
||||
SITE_ID = 1
|
||||
|
||||
|
@ -40,8 +46,6 @@ USE_TZ = True
|
|||
# Explicitly define test runner to avoid warning messages on test execution
|
||||
TEST_RUNNER = "django.test.runner.DiscoverRunner"
|
||||
|
||||
SECRET_KEY = "4nksdock439320df*(^x2_scm-o$*py3e@-awu-n^hipkm%2l$sw$&2l#"
|
||||
|
||||
MIDDLEWARE = [
|
||||
"corsheaders.middleware.CorsMiddleware",
|
||||
"django.middleware.common.CommonMiddleware",
|
||||
|
|
|
@ -353,7 +353,7 @@ ability_id,local_language_id,name
|
|||
36,3,트레이스
|
||||
36,4,複製
|
||||
36,5,Calque
|
||||
36,6,Fährte
|
||||
36,6,Erfassen
|
||||
36,7,Rastro
|
||||
36,8,Traccia
|
||||
36,9,Trace
|
||||
|
@ -593,7 +593,7 @@ ability_id,local_language_id,name
|
|||
60,3,점착
|
||||
60,4,黏著
|
||||
60,5,Glu
|
||||
60,6,Wertehalter
|
||||
60,6,Klebekörper
|
||||
60,7,Viscosidad
|
||||
60,8,Antifurto
|
||||
60,9,Sticky Hold
|
||||
|
@ -1354,7 +1354,7 @@ ability_id,local_language_id,name
|
|||
136,4,多重鱗片
|
||||
136,5,Multiécaille
|
||||
136,6,Multischuppe
|
||||
136,7,Compensación
|
||||
136,7,Multiescamas
|
||||
136,8,Multisquame
|
||||
136,9,Multiscale
|
||||
136,11,マルチスケイル
|
||||
|
@ -1413,7 +1413,7 @@ ability_id,local_language_id,name
|
|||
142,3,방진
|
||||
142,4,防塵
|
||||
142,5,Envelocape
|
||||
142,6,Wetterfest
|
||||
142,6,Partikelschutz
|
||||
142,7,Funda
|
||||
142,8,Copricapo
|
||||
142,9,Overcoat
|
||||
|
@ -2329,6 +2329,7 @@ ability_id,local_language_id,name
|
|||
233,9,Neuroforce
|
||||
233,11,ブレインフォース
|
||||
233,12,脑核之力
|
||||
234,1,ふとうのけん
|
||||
234,3,불요의검
|
||||
234,4,不撓之劍
|
||||
234,5,Lame Indomptable
|
||||
|
@ -2336,8 +2337,9 @@ ability_id,local_language_id,name
|
|||
234,7,Espada Indómita
|
||||
234,8,Spada Indomita
|
||||
234,9,Intrepid Sword
|
||||
234,11,ふとうのけん
|
||||
234,12,不挠之剑
|
||||
234,13,Espada Intrépida
|
||||
235,1,ふくつのたて
|
||||
235,3,불굴의방패
|
||||
235,4,不屈之盾
|
||||
235,5,Égide Inflexible
|
||||
|
@ -2345,7 +2347,9 @@ ability_id,local_language_id,name
|
|||
235,7,Escudo Recio
|
||||
235,8,Scudo Saldo
|
||||
235,9,Dauntless Shield
|
||||
235,13,Escudo Destemido
|
||||
235,11,ふくつのたて
|
||||
235,12,不屈之盾
|
||||
236,1,リベロ
|
||||
236,3,리베로
|
||||
236,4,自由者
|
||||
236,5,Libéro
|
||||
|
@ -2353,7 +2357,9 @@ ability_id,local_language_id,name
|
|||
236,7,Líbero
|
||||
236,8,Libero
|
||||
236,9,Libero
|
||||
236,13,Líbero
|
||||
236,11,リベロ
|
||||
236,12,自由者
|
||||
237,1,たまひろい
|
||||
237,3,볼줍기
|
||||
237,4,撿球
|
||||
237,5,Ramasse Ball
|
||||
|
@ -2361,7 +2367,9 @@ ability_id,local_language_id,name
|
|||
237,7,Recogebolas
|
||||
237,8,Raccattapalle
|
||||
237,9,Ball Fetch
|
||||
237,11,たまひろい
|
||||
237,12,捡球
|
||||
238,1,わたげ
|
||||
238,3,솜털
|
||||
238,4,棉絮
|
||||
238,5,Effilochage
|
||||
|
@ -2369,6 +2377,9 @@ ability_id,local_language_id,name
|
|||
238,7,Pelusa
|
||||
238,8,Lanugine
|
||||
238,9,Cotton Down
|
||||
238,11,わたげ
|
||||
238,12,棉絮
|
||||
239,1,スクリューおびれ
|
||||
239,3,스크루지느러미
|
||||
239,4,螺旋尾鰭
|
||||
239,5,Propulseur
|
||||
|
@ -2376,7 +2387,9 @@ ability_id,local_language_id,name
|
|||
239,7,Hélice Caudal
|
||||
239,8,Elicopinna
|
||||
239,9,Propeller Tail
|
||||
239,11,スクリューおびれ
|
||||
239,12,螺旋尾鳍
|
||||
240,1,ミラーアーマー
|
||||
240,3,미러아머
|
||||
240,4,鏡甲
|
||||
240,5,Armure Miroir
|
||||
|
@ -2384,23 +2397,29 @@ ability_id,local_language_id,name
|
|||
240,7,Coraza Reflejo
|
||||
240,8,Blindospecchio
|
||||
240,9,Mirror Armor
|
||||
240,11,ミラーアーマー
|
||||
240,12,镜甲
|
||||
241,1,うのミサイル
|
||||
241,3,그대로꿀꺽미사일
|
||||
241,4,口飛彈
|
||||
241,4,一口飛彈
|
||||
241,5,Dégobage
|
||||
241,6,Würggeschoss
|
||||
241,7,Tragamisil
|
||||
241,8,Inghiottimissile
|
||||
241,9,Gulp Missile
|
||||
241,12,口导弹
|
||||
241,11,うのミサイル
|
||||
241,12,一口导弹
|
||||
242,1,すじがねいり
|
||||
242,3,굳건한신념
|
||||
242,4,堅毅
|
||||
242,5,Nerfs d'Acier
|
||||
242,5,Nerfs d’Acier
|
||||
242,6,Stahlrückgrat
|
||||
242,7,Acérrimo
|
||||
242,8,Volontà di Ferro
|
||||
242,9,Stalwart
|
||||
242,11,すじがねいり
|
||||
242,12,坚毅
|
||||
243,1,じょうききかん
|
||||
243,3,증기기관
|
||||
243,4,蒸汽機
|
||||
243,5,Turbine
|
||||
|
@ -2408,7 +2427,9 @@ ability_id,local_language_id,name
|
|||
243,7,Combustible
|
||||
243,8,Vapormacchina
|
||||
243,9,Steam Engine
|
||||
243,11,じょうききかん
|
||||
243,12,蒸汽机
|
||||
244,1,パンクロック
|
||||
244,3,펑크록
|
||||
244,4,龐克搖滾
|
||||
244,5,Punk Rock
|
||||
|
@ -2416,7 +2437,9 @@ ability_id,local_language_id,name
|
|||
244,7,Punk Rock
|
||||
244,8,Punk Rock
|
||||
244,9,Punk Rock
|
||||
244,11,パンクロック
|
||||
244,12,庞克摇滚
|
||||
245,1,すなはき
|
||||
245,3,모래뿜기
|
||||
245,4,吐沙
|
||||
245,5,Expul’Sable
|
||||
|
@ -2424,6 +2447,9 @@ ability_id,local_language_id,name
|
|||
245,7,Expulsarena
|
||||
245,8,Sputasabbia
|
||||
245,9,Sand Spit
|
||||
245,11,すなはき
|
||||
245,12,吐沙
|
||||
246,1,こおりのりんぷん
|
||||
246,3,얼음인분
|
||||
246,4,冰鱗粉
|
||||
246,5,Écailles Glacées
|
||||
|
@ -2431,7 +2457,9 @@ ability_id,local_language_id,name
|
|||
246,7,Escama de Hielo
|
||||
246,8,Geloscaglie
|
||||
246,9,Ice Scales
|
||||
246,11,こおりのりんぷん
|
||||
246,12,冰鳞粉
|
||||
247,1,じゅくせい
|
||||
247,3,숙성
|
||||
247,4,熟成
|
||||
247,5,Mûrissement
|
||||
|
@ -2439,6 +2467,9 @@ ability_id,local_language_id,name
|
|||
247,7,Maduración
|
||||
247,8,Maturazione
|
||||
247,9,Ripen
|
||||
247,11,じゅくせい
|
||||
247,12,熟成
|
||||
248,1,アイスフェイス
|
||||
248,3,아이스페이스
|
||||
248,4,結凍頭
|
||||
248,5,Tête de Gel
|
||||
|
@ -2446,15 +2477,19 @@ ability_id,local_language_id,name
|
|||
248,7,Cara de Hielo
|
||||
248,8,Gelofaccia
|
||||
248,9,Ice Face
|
||||
248,11,アイスフェイス
|
||||
248,12,结冻头
|
||||
249,1,パワースポット
|
||||
249,3,파워스폿
|
||||
249,4,能量點
|
||||
249,5,Cercle d'Énergie
|
||||
249,5,Cercle d’Énergie
|
||||
249,6,Kraftquelle
|
||||
249,7,Fuente Energía
|
||||
249,8,Fonte Energetica
|
||||
249,9,Power Spot
|
||||
249,11,パワースポット
|
||||
249,12,能量点
|
||||
250,1,ぎたい
|
||||
250,3,의태
|
||||
250,4,擬態
|
||||
250,5,Mimétisme
|
||||
|
@ -2462,7 +2497,9 @@ ability_id,local_language_id,name
|
|||
250,7,Mimetismo
|
||||
250,8,Mimetismo
|
||||
250,9,Mimicry
|
||||
250,11,ぎたい
|
||||
250,12,拟态
|
||||
251,1,バリアフリー
|
||||
251,3,배리어프리
|
||||
251,4,除障
|
||||
251,5,Brise-Barrière
|
||||
|
@ -2470,7 +2507,9 @@ ability_id,local_language_id,name
|
|||
251,7,Antibarrera
|
||||
251,8,Annullabarriere
|
||||
251,9,Screen Cleaner
|
||||
251,13,Limpa-vidro
|
||||
251,11,バリアフリー
|
||||
251,12,除障
|
||||
252,1,はがねのせいしん
|
||||
252,3,강철정신
|
||||
252,4,鋼之意志
|
||||
252,5,Boost Acier
|
||||
|
@ -2478,8 +2517,9 @@ ability_id,local_language_id,name
|
|||
252,7,Alma Acerada
|
||||
252,8,Spiritoferreo
|
||||
252,9,Steely Spirit
|
||||
252,11,はがねのせいしん
|
||||
252,12,钢之意志
|
||||
252,13,Espírito Férreo
|
||||
253,1,ほろびのボディ
|
||||
253,3,멸망의바디
|
||||
253,4,滅亡之軀
|
||||
253,5,Corps Condamné
|
||||
|
@ -2487,8 +2527,9 @@ ability_id,local_language_id,name
|
|||
253,7,Cuerpo Mortal
|
||||
253,8,Ultimotocco
|
||||
253,9,Perish Body
|
||||
253,11,ほろびのボディ
|
||||
253,12,灭亡之躯
|
||||
253,13,Corpo Perecido
|
||||
254,1,さまようたましい
|
||||
254,3,떠도는영혼
|
||||
254,4,遊魂
|
||||
254,5,Âme Vagabonde
|
||||
|
@ -2496,15 +2537,19 @@ ability_id,local_language_id,name
|
|||
254,7,Alma Errante
|
||||
254,8,Anima Errante
|
||||
254,9,Wandering Spirit
|
||||
254,11,さまようたましい
|
||||
254,12,游魂
|
||||
255,1,ごりむちゅう
|
||||
255,3,무아지경
|
||||
255,4,猩
|
||||
255,4,一猩一意
|
||||
255,5,Entêtement
|
||||
255,6,Affenfokus
|
||||
255,7,Monotema
|
||||
255,8,Vigorilla
|
||||
255,9,Gorilla Tactics
|
||||
255,12,意
|
||||
255,11,ごりむちゅう
|
||||
255,12,一猩一意
|
||||
256,1,かがくへんかガス
|
||||
256,3,화학변화가스
|
||||
256,4,化學變化氣體
|
||||
256,5,Gaz Inhibiteur
|
||||
|
@ -2512,8 +2557,9 @@ ability_id,local_language_id,name
|
|||
256,7,Gas Reactivo
|
||||
256,8,Gas Reagente
|
||||
256,9,Neutralizing Gas
|
||||
256,13,化学变化气体
|
||||
256,13,Gás Neutralizador
|
||||
256,11,かがくへんかガス
|
||||
256,12,化学变化气体
|
||||
257,1,パステルベール
|
||||
257,3,파스텔베일
|
||||
257,4,粉彩護幕
|
||||
257,5,Voile Pastel
|
||||
|
@ -2521,8 +2567,9 @@ ability_id,local_language_id,name
|
|||
257,7,Velo Pastel
|
||||
257,8,Pastelvelo
|
||||
257,9,Pastel Veil
|
||||
257,11,パステルベール
|
||||
257,12,粉彩护幕
|
||||
257,13,Véu de Tons Pastéis
|
||||
258,1,はらぺこスイッチ
|
||||
258,3,꼬르륵스위치
|
||||
258,4,飽了又餓
|
||||
258,5,Déclic Fringale
|
||||
|
@ -2530,7 +2577,9 @@ ability_id,local_language_id,name
|
|||
258,7,Mutapetito
|
||||
258,8,Pancialterna
|
||||
258,9,Hunger Switch
|
||||
258,11,はらぺこスイッチ
|
||||
258,12,饱了又饿
|
||||
259,1,クイックドロウ
|
||||
259,3,퀵드로
|
||||
259,4,速擊
|
||||
259,5,Tir Vif
|
||||
|
@ -2538,7 +2587,9 @@ ability_id,local_language_id,name
|
|||
259,7,Mano Rápida
|
||||
259,8,Colpolesto
|
||||
259,9,Quick Draw
|
||||
259,11,クイックドロウ
|
||||
259,12,速击
|
||||
260,1,ふかしのこぶし
|
||||
260,3,보이지않는주먹
|
||||
260,4,無形拳
|
||||
260,5,Poing Invisible
|
||||
|
@ -2546,7 +2597,9 @@ ability_id,local_language_id,name
|
|||
260,7,Puño Invisible
|
||||
260,8,Pugni Invisibili
|
||||
260,9,Unseen Fist
|
||||
260,11,ふかしのこぶし
|
||||
260,12,无形拳
|
||||
261,1,きみょうなくすり
|
||||
261,3,기묘한약
|
||||
261,4,怪藥
|
||||
261,5,Breuvage Suspect
|
||||
|
@ -2554,7 +2607,9 @@ ability_id,local_language_id,name
|
|||
261,7,Medicina Extraña
|
||||
261,8,Stranofarmaco
|
||||
261,9,Curious Medicine
|
||||
261,11,きみょうなくすり
|
||||
261,12,怪药
|
||||
262,1,トランジスタ
|
||||
262,3,트랜지스터
|
||||
262,4,電晶體
|
||||
262,5,Transistor
|
||||
|
@ -2562,15 +2617,19 @@ ability_id,local_language_id,name
|
|||
262,7,Transistor
|
||||
262,8,Transistor
|
||||
262,9,Transistor
|
||||
262,11,トランジスタ
|
||||
262,12,电晶体
|
||||
263,1,りゅうのあぎと
|
||||
263,3,용의턱
|
||||
263,4,龍顎
|
||||
263,5,Dent de Dragon
|
||||
263,6,Drachenkiefer
|
||||
263,7,Mandíbula Dragón
|
||||
263,8,Dragomascelle
|
||||
263,9,Dragon's Maw
|
||||
263,9,Dragon’s Maw
|
||||
263,11,りゅうのあぎと
|
||||
263,12,龙颚
|
||||
264,1,しろのいななき
|
||||
264,3,백의울음
|
||||
264,4,蒼白嘶鳴
|
||||
264,5,Blanche Ruade
|
||||
|
@ -2578,7 +2637,9 @@ ability_id,local_language_id,name
|
|||
264,7,Relincho Blanco
|
||||
264,8,Nitrito Bianco
|
||||
264,9,Chilling Neigh
|
||||
264,11,しろのいななき
|
||||
264,12,苍白嘶鸣
|
||||
265,1,くろのいななき
|
||||
265,3,흑의울음
|
||||
265,4,漆黑嘶鳴
|
||||
265,5,Sombre Ruade
|
||||
|
@ -2586,7 +2647,9 @@ ability_id,local_language_id,name
|
|||
265,7,Relincho Negro
|
||||
265,8,Nitrito Nero
|
||||
265,9,Grim Neigh
|
||||
265,11,くろのいななき
|
||||
265,12,漆黑嘶鸣
|
||||
266,1,じんばいったい
|
||||
266,3,혼연일체
|
||||
266,4,人馬一體
|
||||
266,5,Osmose Équine
|
||||
|
@ -2594,7 +2657,9 @@ ability_id,local_language_id,name
|
|||
266,7,Unidad Ecuestre
|
||||
266,8,Sintonia Equina
|
||||
266,9,As One
|
||||
266,11,じんばいったい
|
||||
266,12,人马一体
|
||||
267,1,じんばいったい
|
||||
267,3,혼연일체
|
||||
267,4,人馬一體
|
||||
267,5,Osmose Équine
|
||||
|
@ -2602,6 +2667,7 @@ ability_id,local_language_id,name
|
|||
267,7,Unidad Ecuestre
|
||||
267,8,Sintonia Equina
|
||||
267,9,As One
|
||||
267,11,じんばいったい
|
||||
267,12,人马一体
|
||||
10001,9,Mountaineer
|
||||
10002,9,Wave Rider
|
||||
|
|
|
|
@ -17,3 +17,7 @@ encounter_condition_id,local_language_id,name
|
|||
6,5,Saison
|
||||
6,6,Jahreszeit
|
||||
6,9,Season
|
||||
7,9,Chosen Starter
|
||||
8,9,Chosen dialogue at the news report
|
||||
9,9,Story Progress
|
||||
10,9,Miscellaneous
|
||||
|
|
|
|
@ -16939,3 +16939,37 @@ encounter_id,encounter_condition_value_id
|
|||
57870,5
|
||||
57871,5
|
||||
57872,5
|
||||
58117,29
|
||||
58118,29
|
||||
58119,29
|
||||
58120,29
|
||||
58121,29
|
||||
58122,29
|
||||
58123,29
|
||||
58124,29
|
||||
58125,34
|
||||
58126,34
|
||||
58127,34
|
||||
58128,34
|
||||
58129,34
|
||||
58130,34
|
||||
58131,29
|
||||
58132,29
|
||||
58133,29
|
||||
58134,29
|
||||
58135,32
|
||||
58136,32
|
||||
58125,22
|
||||
58126,22
|
||||
58127,21
|
||||
58128,21
|
||||
58129,23
|
||||
58130,23
|
||||
58137,35
|
||||
58138,35
|
||||
58139,35
|
||||
58140,35
|
||||
58138,28
|
||||
58140,27
|
||||
59280,39
|
||||
59281,39
|
||||
|
|
|
|
@ -39,3 +39,22 @@ encounter_condition_value_id,local_language_id,name
|
|||
19,9,During Autumn
|
||||
20,6,Im Winter
|
||||
20,9,During Winter
|
||||
21,9,Bulbasaur as starter
|
||||
22,9,Squirtle as starter
|
||||
23,9,Charmander as starter
|
||||
24,9,Chespin as starter
|
||||
25,9,Fennekin as starter
|
||||
26,9,Froakie as starter
|
||||
27,9,Chose ‘Blue’ on the TV news report
|
||||
28,9,Chose ‘Red’ on the TV news report
|
||||
29,9,Awakened the legendary beasts at Burned Tower
|
||||
30,9,Visited Lake Verity after defeating Team Galactic at Mt. Coronet
|
||||
31,9,Talked to Professor Oak at Eterna City
|
||||
32,9,Visited the Pokémon Fan Club with Copycat’s doll
|
||||
33,9,Met Tornadus or Thundurus in a cutscene
|
||||
34,9,Beat the Elite 4 for the second time
|
||||
35,9,Enter the Hall of Fame
|
||||
36,9,None
|
||||
37,9,Acquired National Pokédex
|
||||
38,9,None
|
||||
39,9,Beat the Pokémon league after knocking out Snorlax at Route 11
|
||||
|
|
|
|
@ -19,3 +19,22 @@ id,encounter_condition_id,identifier,is_default
|
|||
18,6,season-summer,0
|
||||
19,6,season-autumn,0
|
||||
20,6,season-winter,0
|
||||
21,7,starter-bulbasaur,0
|
||||
22,7,starter-squirtle,0
|
||||
23,7,starter-charmander,0
|
||||
24,7,starter-chespin,0
|
||||
25,7,starter-fennekin,0
|
||||
26,7,starter-froakie,0
|
||||
27,8,tv-option-blue,1
|
||||
28,8,tv-option-red,0
|
||||
29,9,story-progress-awakened-beasts,0
|
||||
30,9,story-progress-beat-galactic-coronet,0
|
||||
31,9,story-progress-oak-eterna-city,0
|
||||
32,9,story-progress-vermilion-copycat,0
|
||||
33,9,story-progress-met-tornadus-thundurus,0
|
||||
34,9,story-progress-beat-elite-four-round-two,0
|
||||
35,9,story-progress-hall-of-fame,0
|
||||
36,9,story-progress-none,1
|
||||
37,9,story-progress-national-dex,0
|
||||
38,10,other-none,1
|
||||
39,10,other-snorlax-11-beat-league,0
|
||||
|
|
|
|
@ -5,3 +5,7 @@ id,identifier
|
|||
4,slot2
|
||||
5,radio
|
||||
6,season
|
||||
7,starter
|
||||
8,tv-option
|
||||
9,story-progress
|
||||
10,other
|
||||
|
|
|
|
@ -35,3 +35,11 @@ encounter_method_id,local_language_id,name
|
|||
17,9,Walking on rough terrain
|
||||
18,9,Receive as a gift
|
||||
19,9,Receive egg as a gift
|
||||
20,9,"Static encounter, only one chance"
|
||||
21,9,Playing Pokéflute
|
||||
22,9,Headbutting a low encounter rate tree
|
||||
23,9,Headbutting a normal encounter rate tree
|
||||
24,9,Headbutting a high encounter rate tree
|
||||
25,9,Using the Squirt Bottle on a Sudowoodo
|
||||
26,9,Using the Wailmer Pail on a Sudowoodo
|
||||
27,9,Surfing on seaweed
|
||||
|
|
|
|
@ -18,3 +18,11 @@ id,identifier,order
|
|||
17,rough-terrain,9
|
||||
18,gift,18
|
||||
19,gift-egg,19
|
||||
20,only-one,20
|
||||
21,pokeflute,21
|
||||
22,headbutt-low,22
|
||||
23,headbutt-normal,23
|
||||
24,headbutt-high,24
|
||||
25,squirt-bottle,25
|
||||
26,wailmer-pail,26
|
||||
27,seaweed,27
|
||||
|
|
|
|
@ -559,3 +559,89 @@ id,version_group_id,encounter_method_id,slot,rarity
|
|||
558,4,5,3,10
|
||||
559,4,6,1,90
|
||||
560,4,6,2,10
|
||||
561,1,20,,100
|
||||
562,2,20,,100
|
||||
563,3,20,,100
|
||||
564,4,20,,100
|
||||
565,5,20,,100
|
||||
566,6,20,,100
|
||||
567,7,20,,100
|
||||
568,8,20,,100
|
||||
569,9,20,,100
|
||||
570,10,20,,100
|
||||
571,11,20,,100
|
||||
572,14,20,,100
|
||||
573,15,20,,100
|
||||
574,16,20,,100
|
||||
575,17,20,,100
|
||||
576,18,20,,100
|
||||
577,19,20,,100
|
||||
578,20,20,,100
|
||||
579,1,21,,100
|
||||
580,2,21,,100
|
||||
581,3,21,,100
|
||||
582,4,21,,100
|
||||
583,7,21,,100
|
||||
584,10,21,,100
|
||||
585,15,21,,100
|
||||
586,19,21,,100
|
||||
587,3,22,1,50
|
||||
588,3,22,2,15
|
||||
589,3,22,3,15
|
||||
590,3,22,4,10
|
||||
591,3,22,5,5
|
||||
592,3,22,6,5
|
||||
593,3,23,1,50
|
||||
594,3,23,2,15
|
||||
595,3,23,3,15
|
||||
596,3,23,4,10
|
||||
597,3,23,5,5
|
||||
598,3,23,6,5
|
||||
599,3,22,1,50
|
||||
600,3,22,2,30
|
||||
601,3,22,3,10
|
||||
602,3,22,4,5
|
||||
603,3,22,5,5
|
||||
604,3,23,1,50
|
||||
605,3,23,2,30
|
||||
606,3,23,3,10
|
||||
607,3,23,4,5
|
||||
608,3,23,5,5
|
||||
609,3,24,1,50
|
||||
610,3,24,2,15
|
||||
611,3,24,3,15
|
||||
612,3,24,4,10
|
||||
613,3,24,5,5
|
||||
614,3,24,6,5
|
||||
615,4,22,1,50
|
||||
616,4,22,2,15
|
||||
617,4,22,3,15
|
||||
618,4,22,4,10
|
||||
619,4,22,5,5
|
||||
620,4,22,6,5
|
||||
621,4,23,1,50
|
||||
622,4,23,2,15
|
||||
623,4,23,3,15
|
||||
624,4,23,4,10
|
||||
625,4,23,5,5
|
||||
626,4,23,6,5
|
||||
627,4,24,1,50
|
||||
628,4,24,2,15
|
||||
629,4,24,3,15
|
||||
630,4,24,4,10
|
||||
631,4,24,5,5
|
||||
632,4,24,6,5
|
||||
633,3,25,,100
|
||||
634,4,25,,100
|
||||
635,10,25,,100
|
||||
636,6,26,,100
|
||||
637,5,27,1,60
|
||||
638,5,27,2,30
|
||||
639,5,27,3,5
|
||||
640,5,27,4,4
|
||||
641,5,27,5,1
|
||||
642,6,27,1,60
|
||||
643,6,27,2,30
|
||||
644,6,27,3,5
|
||||
645,6,27,4,4
|
||||
646,6,27,5,1
|
||||
|
|
|
File diff suppressed because it is too large
Load diff
|
@ -650,3 +650,22 @@ location_area_id,local_language_id,name
|
|||
790,9,Poke Mart
|
||||
791,9,Pokemon Center
|
||||
792,9,West Gate
|
||||
793,9,Bell Tower Roof
|
||||
794,9,Roaming Kanto
|
||||
795,9,Roaming Johto
|
||||
796,9,Roaming Hoenn
|
||||
797,9,Roaming Sinnoh
|
||||
798,9,Azalea Town
|
||||
800,9,Mahogany City
|
||||
801,9,Cave of Origin B4F
|
||||
802,9,Terra Cave
|
||||
803,9,Marine Cave
|
||||
804,9,Sky Pillar Apex
|
||||
805,9,Bell Tower 1F
|
||||
806,9,Birth Island
|
||||
807,9,Navel Rock
|
||||
808,9,Faraway Island
|
||||
809,9,Hoenn Battle Frontier
|
||||
810,9,Desert Ruins
|
||||
811,9,Island Cave
|
||||
812,9,Ancient Tomb
|
||||
|
|
|
|
@ -682,3 +682,22 @@ id,location_id,game_index,identifier
|
|||
790,153,0,poke-mart
|
||||
791,153,0,pokemon-center
|
||||
792,349,0,west-gate
|
||||
793,139,0,roof
|
||||
794,799,0,area
|
||||
795,800,0,area
|
||||
796,801,0,area
|
||||
797,802,0,area
|
||||
798,228,0,area
|
||||
800,230,0,area
|
||||
801,443,0,b4f
|
||||
802,803,0,area
|
||||
803,804,0,area
|
||||
804,448,0,apex
|
||||
805,139,0,1f
|
||||
806,810,0,area
|
||||
807,811,0,area
|
||||
808,812,0,area
|
||||
809,813,0,area
|
||||
810,582,0,area
|
||||
811,581,0,area
|
||||
812,583,0,area
|
||||
|
|
|
|
@ -3576,3 +3576,18 @@ location_id,local_language_id,name,subtitle
|
|||
798,9,Malie City,Outer Cape
|
||||
798,11,マリエシティ,はずれの岬
|
||||
798,12,马利埃静市,市郊海角
|
||||
799,9,Roaming Kanto,
|
||||
800,9,Roaming Johto,
|
||||
801,9,Roaming Hoenn,
|
||||
802,9,Roaming Sinnoh,
|
||||
803,9,Terra Cave,
|
||||
804,9,Marine Cave,
|
||||
805,9,Two Island,
|
||||
806,9,Three Island,
|
||||
80,9,Three Isle Path,
|
||||
808,9,Six Island,
|
||||
809,9,Seven Island,
|
||||
810,9,Birth Island,
|
||||
811,9,Navel Rock,
|
||||
812,9,Faraway Island,
|
||||
813,9,Hoenn Battle Frontier,
|
||||
|
|
|
|
@ -780,3 +780,18 @@ id,region_id,identifier
|
|||
796,7,aether-paradise
|
||||
797,7,ultra-space
|
||||
798,7,malie-city--outer-cape
|
||||
799,1,roaming-kanto
|
||||
800,2,roaming-johto
|
||||
801,3,roaming-hoenn
|
||||
802,4,roaming-sinnoh
|
||||
803,3,terra-cave
|
||||
804,3,marine-cave
|
||||
805,1,two-island
|
||||
806,1,three-island
|
||||
807,1,three-isle-path
|
||||
808,1,six-island
|
||||
809,1,seven-island
|
||||
810,1,birth-island
|
||||
811,1,navel-rock
|
||||
812,3,faraway-island
|
||||
813,3,hoenn-battle-frontier
|
||||
|
|
|
|
@ -40,7 +40,6 @@ move_id,stat_id,change
|
|||
231,3,-1
|
||||
232,2,1
|
||||
242,3,-1
|
||||
246,1,1
|
||||
246,2,1
|
||||
246,3,1
|
||||
246,4,1
|
||||
|
@ -61,7 +60,6 @@ move_id,stat_id,change
|
|||
313,5,-2
|
||||
315,4,-2
|
||||
317,6,-1
|
||||
318,1,1
|
||||
318,2,1
|
||||
318,3,1
|
||||
318,4,1
|
||||
|
@ -102,7 +100,6 @@ move_id,stat_id,change
|
|||
455,3,1
|
||||
455,5,1
|
||||
465,5,-2
|
||||
466,1,1
|
||||
466,2,1
|
||||
466,3,1
|
||||
466,4,1
|
||||
|
|
|
|
@ -3,7 +3,7 @@ move_id,local_language_id,name
|
|||
1,3,막치기
|
||||
1,4,拍擊
|
||||
1,5,Écras’Face
|
||||
1,6,Pfund
|
||||
1,6,Klaps
|
||||
1,7,Destructor
|
||||
1,8,Botta
|
||||
1,9,Pound
|
||||
|
@ -106,7 +106,7 @@ move_id,local_language_id,name
|
|||
11,6,Klammer
|
||||
11,7,Agarre
|
||||
11,8,Presa
|
||||
11,9,Vice Grip
|
||||
11,9,Vise Grip
|
||||
11,11,はさむ
|
||||
11,12,夹住
|
||||
12,1,ハサミギロチン
|
||||
|
@ -394,7 +394,7 @@ move_id,local_language_id,name
|
|||
40,4,毒針
|
||||
40,5,Dard-Venin
|
||||
40,6,Giftstachel
|
||||
40,7,Picotazo Ven
|
||||
40,7,Picotazo Veneno
|
||||
40,8,Velenospina
|
||||
40,9,Poison Sting
|
||||
40,11,どくばり
|
||||
|
@ -633,7 +633,7 @@ move_id,local_language_id,name
|
|||
64,3,쪼기
|
||||
64,4,啄
|
||||
64,5,Picpic
|
||||
64,6,Schnabel
|
||||
64,6,Pikser
|
||||
64,7,Picotazo
|
||||
64,8,Beccata
|
||||
64,9,Peck
|
||||
|
@ -684,7 +684,7 @@ move_id,local_language_id,name
|
|||
69,4,地球上投
|
||||
69,5,Frappe Atlas
|
||||
69,6,Geowurf
|
||||
69,7,Mov. Sísmico
|
||||
69,7,Sísmico
|
||||
69,8,Movim. Sismico
|
||||
69,9,Seismic Toss
|
||||
69,11,ちきゅうなげ
|
||||
|
@ -1083,7 +1083,7 @@ move_id,local_language_id,name
|
|||
109,3,이상한빛
|
||||
109,4,奇異之光
|
||||
109,5,Onde Folie
|
||||
109,6,Konfustrahl
|
||||
109,6,Konfusstrahl
|
||||
109,7,Rayo Confuso
|
||||
109,8,Stordiraggio
|
||||
109,9,Confuse Ray
|
||||
|
@ -1184,7 +1184,7 @@ move_id,local_language_id,name
|
|||
119,4,鸚鵡學舌
|
||||
119,5,Mimique
|
||||
119,6,Spiegeltrick
|
||||
119,7,Mov. Espejo
|
||||
119,7,Espejo
|
||||
119,8,Speculmossa
|
||||
119,9,Mirror Move
|
||||
119,11,オウムがえし
|
||||
|
@ -1363,7 +1363,7 @@ move_id,local_language_id,name
|
|||
137,3,뱀눈초리
|
||||
137,4,大蛇瞪眼
|
||||
137,5,Regard Médusant
|
||||
137,6,Giftblick
|
||||
137,6,Schlangenblick
|
||||
137,7,Deslumbrar
|
||||
137,8,Sguardo Feroce
|
||||
137,9,Glare
|
||||
|
@ -1394,7 +1394,7 @@ move_id,local_language_id,name
|
|||
140,4,投球
|
||||
140,5,Pilonnage
|
||||
140,6,Stakkato
|
||||
140,7,Presa
|
||||
140,7,Bombardeo
|
||||
140,8,Attacco Pioggia
|
||||
140,9,Barrage
|
||||
140,11,たまなげ
|
||||
|
@ -1923,7 +1923,7 @@ move_id,local_language_id,name
|
|||
193,3,꿰뚫어보기
|
||||
193,4,識破
|
||||
193,5,Clairvoyance
|
||||
193,6,Gesichte
|
||||
193,6,Scharfblick
|
||||
193,7,Profecía
|
||||
193,8,Preveggenza
|
||||
193,9,Foresight
|
||||
|
@ -2044,7 +2044,7 @@ move_id,local_language_id,name
|
|||
205,4,滾動
|
||||
205,5,Roulade
|
||||
205,6,Walzer
|
||||
205,7,Desenrollar
|
||||
205,7,Rodar
|
||||
205,8,Rotolamento
|
||||
205,9,Rollout
|
||||
205,11,ころがる
|
||||
|
@ -2054,7 +2054,7 @@ move_id,local_language_id,name
|
|||
206,4,點到為止
|
||||
206,5,Faux-Chage
|
||||
206,6,Trugschlag
|
||||
206,7,Falsotortazo
|
||||
206,7,Falso Tortazo
|
||||
206,8,Falsofinale
|
||||
206,9,False Swipe
|
||||
206,11,みねうち
|
||||
|
@ -2713,7 +2713,7 @@ move_id,local_language_id,name
|
|||
272,3,역할
|
||||
272,4,扮演
|
||||
272,5,Imitation
|
||||
272,6,Rollentausch
|
||||
272,6,Rollenspiel
|
||||
272,7,Imitación
|
||||
272,8,Giocodiruolo
|
||||
272,9,Role Play
|
||||
|
@ -2843,7 +2843,7 @@ move_id,local_language_id,name
|
|||
285,3,스킬스웹
|
||||
285,4,特性互換
|
||||
285,5,Échange
|
||||
285,6,Wertewechsel
|
||||
285,6,Fähigkeitstausch
|
||||
285,7,Intercambio
|
||||
285,8,Baratto
|
||||
285,9,Skill Swap
|
||||
|
@ -2854,7 +2854,7 @@ move_id,local_language_id,name
|
|||
286,4,封印
|
||||
286,5,Possessif
|
||||
286,6,Begrenzer
|
||||
286,7,Cerca
|
||||
286,7,Sellar
|
||||
286,8,Esclusiva
|
||||
286,9,Imprison
|
||||
286,11,ふういん
|
||||
|
@ -3044,7 +3044,7 @@ move_id,local_language_id,name
|
|||
305,4,劇毒牙
|
||||
305,5,Crochet Venin
|
||||
305,6,Giftzahn
|
||||
305,7,Colmillo Ven
|
||||
305,7,Colmillo Veneno
|
||||
305,8,Velenodenti
|
||||
305,9,Poison Fang
|
||||
305,11,どくどくのキバ
|
||||
|
@ -3304,7 +3304,7 @@ move_id,local_language_id,name
|
|||
331,4,種子機關槍
|
||||
331,5,Balle Graine
|
||||
331,6,Kugelsaat
|
||||
331,7,Recurrente
|
||||
331,7,Semilladora
|
||||
331,8,Semitraglia
|
||||
331,9,Bullet Seed
|
||||
331,11,タネマシンガン
|
||||
|
@ -3745,7 +3745,7 @@ move_id,local_language_id,name
|
|||
375,5,Échange Psy
|
||||
375,6,Psybann
|
||||
375,7,Psicocambio
|
||||
375,8,Psicotrasfer
|
||||
375,8,Psicotransfer
|
||||
375,9,Psycho Shift
|
||||
375,11,サイコシフト
|
||||
375,12,精神转移
|
||||
|
@ -3844,7 +3844,7 @@ move_id,local_language_id,name
|
|||
385,4,防守互換
|
||||
385,5,Permugarde
|
||||
385,6,Schutztausch
|
||||
385,7,Cambia Defensa
|
||||
385,7,Cambiadefensa
|
||||
385,8,Barattoscudo
|
||||
385,9,Guard Swap
|
||||
385,11,ガードスワップ
|
||||
|
@ -5014,7 +5014,7 @@ move_id,local_language_id,name
|
|||
502,4,交換場地
|
||||
502,5,Interversion
|
||||
502,6,Seitentausch
|
||||
502,7,Cambio Banda
|
||||
502,7,Cambio de Banda
|
||||
502,8,Cambiaposto
|
||||
502,9,Ally Switch
|
||||
502,11,サイドチェンジ
|
||||
|
@ -5078,7 +5078,7 @@ move_id,local_language_id,name
|
|||
508,8,Cambiomarcia
|
||||
508,9,Shift Gear
|
||||
508,11,ギアチェンジ
|
||||
508,12,换挡
|
||||
508,12,换档
|
||||
509,1,ともえなげ
|
||||
509,3,배대뒤치기
|
||||
509,4,巴投
|
||||
|
@ -7288,6 +7288,7 @@ move_id,local_language_id,name
|
|||
729,8,Sprintaboom
|
||||
729,9,Zippy Zap
|
||||
729,11,ばちばちアクセル
|
||||
729,12,电电加速
|
||||
730,1,ざぶざぶサーフ
|
||||
730,3,참방참방서핑
|
||||
730,4,滔滔衝浪
|
||||
|
@ -7297,6 +7298,7 @@ move_id,local_language_id,name
|
|||
730,8,Surfasplash
|
||||
730,9,Splishy Splash
|
||||
730,11,ざぶざぶサーフ
|
||||
730,12,滔滔冲浪
|
||||
731,1,ふわふわフォール
|
||||
731,3,둥실둥실폴
|
||||
731,4,飄飄墜落
|
||||
|
@ -7306,6 +7308,7 @@ move_id,local_language_id,name
|
|||
731,8,Piombaflap
|
||||
731,9,Floaty Fall
|
||||
731,11,ふわふわフォール
|
||||
731,12,飘飘坠落
|
||||
732,1,ピカピカサンダー
|
||||
732,3,피카피카썬더
|
||||
732,4,閃閃雷光
|
||||
|
@ -7315,6 +7318,7 @@ move_id,local_language_id,name
|
|||
732,8,Pikasaetta
|
||||
732,9,Pika Papow
|
||||
732,11,ピカピカサンダー
|
||||
732,12,闪闪雷光
|
||||
733,1,いきいきバブル
|
||||
733,3,생생버블
|
||||
733,4,活活氣泡
|
||||
|
@ -7324,6 +7328,7 @@ move_id,local_language_id,name
|
|||
733,8,Bollaslurp
|
||||
733,9,Bouncy Bubble
|
||||
733,11,いきいきバブル
|
||||
733,12,活活气泡
|
||||
734,1,びりびりエレキ
|
||||
734,3,찌릿찌릿일렉
|
||||
734,4,麻麻電擊
|
||||
|
@ -7333,6 +7338,7 @@ move_id,local_language_id,name
|
|||
734,8,Elettrozap
|
||||
734,9,Buzzy Buzz
|
||||
734,11,びりびりエレキ
|
||||
734,12,麻麻电击
|
||||
735,1,めらめらバーン
|
||||
735,3,이글이글번
|
||||
735,4,熊熊火爆
|
||||
|
@ -7342,6 +7348,7 @@ move_id,local_language_id,name
|
|||
735,8,Fiammabam
|
||||
735,9,Sizzly Slide
|
||||
735,11,めらめらバーン
|
||||
735,12,熊熊火爆
|
||||
736,1,どばどばオーラ
|
||||
736,3,콸콸오라
|
||||
736,4,嘩嘩氣場
|
||||
|
@ -7349,8 +7356,9 @@ move_id,local_language_id,name
|
|||
736,6,Pulsieraura
|
||||
736,7,Espeaura
|
||||
736,8,Auraswoosh
|
||||
736,9,Sizzly Slide
|
||||
736,9,Glitzy Glow
|
||||
736,11,どばどばオーラ
|
||||
736,12,哗哗气场
|
||||
737,1,わるわるゾーン
|
||||
737,3,아그아그존
|
||||
737,4,壞壞領域
|
||||
|
@ -7360,6 +7368,7 @@ move_id,local_language_id,name
|
|||
737,8,Zona Buiabuia
|
||||
737,9,Baddy Bad
|
||||
737,11,わるわるゾーン
|
||||
737,12,坏坏领域
|
||||
738,1,すくすくボンバー
|
||||
738,3,쑥쑥봄버
|
||||
738,4,茁茁轟炸
|
||||
|
@ -7369,6 +7378,7 @@ move_id,local_language_id,name
|
|||
738,8,Bombafrush
|
||||
738,9,Sappy Seed
|
||||
738,11,すくすくボンバー
|
||||
738,12,茁茁轰炸
|
||||
739,1,こちこちフロスト
|
||||
739,3,꽁꽁프로스트
|
||||
739,4,冰冰霜凍
|
||||
|
@ -7378,6 +7388,7 @@ move_id,local_language_id,name
|
|||
739,8,Scricchiagelo
|
||||
739,9,Freezy Frost
|
||||
739,11,こちこちフロスト
|
||||
739,12,冰冰霜冻
|
||||
740,1,きらきらストーム
|
||||
740,3,반짝반짝스톰
|
||||
740,4,亮亮風暴
|
||||
|
@ -7387,24 +7398,27 @@ move_id,local_language_id,name
|
|||
740,8,Sbrilluccibufera
|
||||
740,9,Sparkly Swirl
|
||||
740,11,きらきらストーム
|
||||
740,12,亮亮风暴
|
||||
741,1,ブイブイブレイク
|
||||
741,3,브이브이브레이크
|
||||
741,4,砰砰撃破
|
||||
741,4,砰砰擊破
|
||||
741,5,Évo-Chardasso
|
||||
741,6,Evo-Crash
|
||||
741,7,Eevimpacto
|
||||
741,8,Eeveempatto
|
||||
741,9,Veevee Volley
|
||||
741,11,ブイブイブレイク
|
||||
741,12,砰砰击破
|
||||
742,1,ダブルパンツァー
|
||||
742,3,더블펀처
|
||||
742,4,鋼拳雙擊
|
||||
742,5,Écrous d'Poing
|
||||
742,5,Écrous d’Poing
|
||||
742,6,Panzerfäuste
|
||||
742,7,Ferropuño Doble
|
||||
742,8,Pugni Corazzati
|
||||
742,9,Double Iron Bash
|
||||
742,11,ダブルパンツァー
|
||||
742,12,钢拳双击
|
||||
743,1,ダイウォール
|
||||
743,3,다이월
|
||||
743,4,極巨防壁
|
||||
|
@ -7414,8 +7428,8 @@ move_id,local_language_id,name
|
|||
743,8,Dynabarriera
|
||||
743,9,Max Guard
|
||||
743,11,ダイウォール
|
||||
743,12,極巨防壁
|
||||
744,1,ダイマックス
|
||||
743,12,极巨防壁
|
||||
744,1,ダイマックスほう
|
||||
744,3,다이맥스포
|
||||
744,4,極巨炮
|
||||
744,5,Canon Dynamax
|
||||
|
@ -7423,8 +7437,8 @@ move_id,local_language_id,name
|
|||
744,7,Cañón Dinamax
|
||||
744,8,Cannone Dynamax
|
||||
744,9,Dynamax Cannon
|
||||
744,11,ダイマックス
|
||||
744,12,極巨炮
|
||||
744,11,ダイマックスほう
|
||||
744,12,极巨炮
|
||||
745,1,ねらいうち
|
||||
745,3,노려맞히기
|
||||
745,4,狙擊
|
||||
|
@ -7434,7 +7448,7 @@ move_id,local_language_id,name
|
|||
745,8,Tiromirato
|
||||
745,9,Snipe Shot
|
||||
745,11,ねらいうち
|
||||
745,12,狙擊
|
||||
745,12,狙击
|
||||
746,1,くらいつく
|
||||
746,3,물고버티기
|
||||
746,4,緊咬不放
|
||||
|
@ -7444,7 +7458,7 @@ move_id,local_language_id,name
|
|||
746,8,Morsostretto
|
||||
746,9,Jaw Lock
|
||||
746,11,くらいつく
|
||||
746,12,緊咬不放
|
||||
746,12,紧咬不放
|
||||
747,1,ほおばる
|
||||
747,3,볼가득넣기
|
||||
747,4,大快朵頤
|
||||
|
@ -7454,7 +7468,7 @@ move_id,local_language_id,name
|
|||
747,8,Riempiguance
|
||||
747,9,Stuff Cheeks
|
||||
747,11,ほおばる
|
||||
747,12,大快朵頤
|
||||
747,12,大快朵颐
|
||||
748,1,はいすいのじん
|
||||
748,3,배수의진
|
||||
748,4,背水一戰
|
||||
|
@ -7464,7 +7478,7 @@ move_id,local_language_id,name
|
|||
748,8,Spalle al Muro
|
||||
748,9,No Retreat
|
||||
748,11,はいすいのじん
|
||||
748,12,背水一戰
|
||||
748,12,背水一战
|
||||
749,1,タールショット
|
||||
749,3,타르숏
|
||||
749,4,瀝青射擊
|
||||
|
@ -7474,7 +7488,7 @@ move_id,local_language_id,name
|
|||
749,8,Colpocatrame
|
||||
749,9,Tar Shot
|
||||
749,11,タールショット
|
||||
749,12,瀝青射擊
|
||||
749,12,沥青射击
|
||||
750,1,まほうのこな
|
||||
750,3,마법가루
|
||||
750,4,魔法粉
|
||||
|
@ -7494,7 +7508,7 @@ move_id,local_language_id,name
|
|||
751,8,Dragofrecce
|
||||
751,9,Dragon Darts
|
||||
751,11,ドラゴンアロー
|
||||
751,12,龍箭
|
||||
751,12,龙箭
|
||||
752,1,おちゃかい
|
||||
752,3,다과회
|
||||
752,4,茶會
|
||||
|
@ -7504,7 +7518,7 @@ move_id,local_language_id,name
|
|||
752,8,Ora del Tè
|
||||
752,9,Teatime
|
||||
752,11,おちゃかい
|
||||
752,12,茶會
|
||||
752,12,茶会
|
||||
753,1,たこがため
|
||||
753,3,문어굳히기
|
||||
753,4,蛸固
|
||||
|
@ -7524,8 +7538,8 @@ move_id,local_language_id,name
|
|||
754,8,Beccoshock
|
||||
754,9,Bolt Beak
|
||||
754,11,でんげきくちばし
|
||||
754,12,電喙
|
||||
755,1,エラ
|
||||
754,12,电喙
|
||||
755,1,エラがみ
|
||||
755,3,아가미물기
|
||||
755,4,鰓咬
|
||||
755,5,Branchicrok
|
||||
|
@ -7533,8 +7547,8 @@ move_id,local_language_id,name
|
|||
755,7,Branquibocado
|
||||
755,8,Branchiomorso
|
||||
755,9,Fishious Rend
|
||||
755,11,エラ
|
||||
755,12,鰓咬
|
||||
755,11,エラがみ
|
||||
755,12,鳃咬
|
||||
756,1,コートチェンジ
|
||||
756,3,코트체인지
|
||||
756,4,換場
|
||||
|
@ -7544,7 +7558,7 @@ move_id,local_language_id,name
|
|||
756,8,Cambiocampo
|
||||
756,9,Court Change
|
||||
756,11,コートチェンジ
|
||||
756,12,換場
|
||||
756,12,换场
|
||||
757,1,ダイバーン
|
||||
757,3,다이번
|
||||
757,4,極巨火爆
|
||||
|
@ -7554,7 +7568,7 @@ move_id,local_language_id,name
|
|||
757,8,Dynafiammata
|
||||
757,9,Max Flare
|
||||
757,11,ダイバーン
|
||||
757,12,極巨火爆
|
||||
757,12,极巨火爆
|
||||
758,1,ダイワーム
|
||||
758,3,다이웜
|
||||
758,4,極巨蟲蠱
|
||||
|
@ -7564,7 +7578,7 @@ move_id,local_language_id,name
|
|||
758,8,Dynainsetto
|
||||
758,9,Max Flutterby
|
||||
758,11,ダイワーム
|
||||
758,12,極巨蟲蠱
|
||||
758,12,极巨虫蛊
|
||||
759,1,ダイサンダー
|
||||
759,3,다이썬더
|
||||
759,4,極巨閃電
|
||||
|
@ -7574,7 +7588,7 @@ move_id,local_language_id,name
|
|||
759,8,Dynasaetta
|
||||
759,9,Max Lightning
|
||||
759,11,ダイサンダー
|
||||
759,12,極巨閃電
|
||||
759,12,极巨闪电
|
||||
760,1,ダイアタック
|
||||
760,3,다이어택
|
||||
760,4,極巨攻擊
|
||||
|
@ -7584,7 +7598,7 @@ move_id,local_language_id,name
|
|||
760,8,Dynattacco
|
||||
760,9,Max Strike
|
||||
760,11,ダイアタック
|
||||
760,12,極巨攻擊
|
||||
760,12,极巨攻击
|
||||
761,1,ダイナックル
|
||||
761,3,다이너클
|
||||
761,4,極巨拳鬥
|
||||
|
@ -7594,7 +7608,7 @@ move_id,local_language_id,name
|
|||
761,8,Dynapugno
|
||||
761,9,Max Knuckle
|
||||
761,11,ダイナックル
|
||||
761,12,極巨拳鬥
|
||||
761,12,极巨拳斗
|
||||
762,1,ダイホロウ
|
||||
762,3,다이할로우
|
||||
762,4,極巨幽魂
|
||||
|
@ -7604,7 +7618,7 @@ move_id,local_language_id,name
|
|||
762,8,Dynavuoto
|
||||
762,9,Max Phantasm
|
||||
762,11,ダイホロウ
|
||||
762,12,極巨幽魂
|
||||
762,12,极巨幽魂
|
||||
763,1,ダイアイス
|
||||
763,3,다이아이스
|
||||
763,4,極巨寒冰
|
||||
|
@ -7614,7 +7628,7 @@ move_id,local_language_id,name
|
|||
763,8,Dynagelo
|
||||
763,9,Max Hailstorm
|
||||
763,11,ダイアイス
|
||||
763,12,極巨寒冰
|
||||
763,12,极巨寒冰
|
||||
764,1,ダイアシッド
|
||||
764,3,다이애시드
|
||||
764,4,極巨酸毒
|
||||
|
@ -7624,7 +7638,7 @@ move_id,local_language_id,name
|
|||
764,8,Dynacorrosione
|
||||
764,9,Max Ooze
|
||||
764,11,ダイアシッド
|
||||
764,12,極巨酸毒
|
||||
764,12,极巨酸毒
|
||||
765,1,ダイストリーム
|
||||
765,3,다이스트림
|
||||
765,4,極巨水流
|
||||
|
@ -7634,7 +7648,7 @@ move_id,local_language_id,name
|
|||
765,8,Dynaflusso
|
||||
765,9,Max Geyser
|
||||
765,11,ダイストリーム
|
||||
765,12,極巨水流
|
||||
765,12,极巨水流
|
||||
766,1,ダイジェット
|
||||
766,3,다이제트
|
||||
766,4,極巨飛衝
|
||||
|
@ -7644,7 +7658,7 @@ move_id,local_language_id,name
|
|||
766,8,Dynajet
|
||||
766,9,Max Airstream
|
||||
766,11,ダイジェット
|
||||
766,12,極巨飛衝
|
||||
766,12,极巨飞冲
|
||||
767,1,ダイフェアリー
|
||||
767,3,다이페어리
|
||||
767,4,極巨妖精
|
||||
|
@ -7654,7 +7668,7 @@ move_id,local_language_id,name
|
|||
767,8,Dynafata
|
||||
767,9,Max Starfall
|
||||
767,11,ダイフェアリー
|
||||
767,12,極巨妖精
|
||||
767,12,极巨妖精
|
||||
768,1,ダイドラグーン
|
||||
768,3,다이드라군
|
||||
768,4,極巨龍騎
|
||||
|
@ -7664,7 +7678,7 @@ move_id,local_language_id,name
|
|||
768,8,Dynadragone
|
||||
768,9,Max Wyrmwind
|
||||
768,11,ダイドラグーン
|
||||
768,12,極巨龍騎
|
||||
768,12,极巨龙骑
|
||||
769,1,ダイサイコ
|
||||
769,3,다이사이코
|
||||
769,4,極巨超能
|
||||
|
@ -7674,7 +7688,7 @@ move_id,local_language_id,name
|
|||
769,8,Dynapsiche
|
||||
769,9,Max Mindstorm
|
||||
769,11,ダイサイコ
|
||||
769,12,極巨超能
|
||||
769,12,极巨超能
|
||||
770,1,ダイロック
|
||||
770,3,다이록
|
||||
770,4,極巨岩石
|
||||
|
@ -7684,7 +7698,7 @@ move_id,local_language_id,name
|
|||
770,8,Dynamacigno
|
||||
770,9,Max Rockfall
|
||||
770,11,ダイロック
|
||||
770,12,極巨岩石
|
||||
770,12,极巨岩石
|
||||
771,1,ダイアース
|
||||
771,3,다이어스
|
||||
771,4,極巨大地
|
||||
|
@ -7694,7 +7708,7 @@ move_id,local_language_id,name
|
|||
771,8,Dynasisma
|
||||
771,9,Max Quake
|
||||
771,11,ダイアース
|
||||
771,12,極巨大地
|
||||
771,12,极巨大地
|
||||
772,1,ダイアーク
|
||||
772,3,다이아크
|
||||
772,4,極巨惡霸
|
||||
|
@ -7704,7 +7718,7 @@ move_id,local_language_id,name
|
|||
772,8,Dynatenebre
|
||||
772,9,Max Darkness
|
||||
772,11,ダイアーク
|
||||
772,12,極巨惡霸
|
||||
772,12,极巨恶霸
|
||||
773,1,ダイソウゲン
|
||||
773,3,다이그래스
|
||||
773,4,極巨草原
|
||||
|
@ -7714,7 +7728,7 @@ move_id,local_language_id,name
|
|||
773,8,Dynaflora
|
||||
773,9,Max Overgrowth
|
||||
773,11,ダイソウゲン
|
||||
773,12,極巨草原
|
||||
773,12,极巨草原
|
||||
774,1,ダイスチル
|
||||
774,3,다이스틸
|
||||
774,4,極巨鋼鐵
|
||||
|
@ -7724,7 +7738,7 @@ move_id,local_language_id,name
|
|||
774,8,Dynametallo
|
||||
774,9,Max Steelspike
|
||||
774,11,ダイスチル
|
||||
774,12,極巨鋼鐵
|
||||
774,12,极巨钢铁
|
||||
775,1,ソウルビート
|
||||
775,3,소울비트
|
||||
775,4,魂舞烈音爆
|
||||
|
@ -7744,7 +7758,7 @@ move_id,local_language_id,name
|
|||
776,8,Schiacciacorpo
|
||||
776,9,Body Press
|
||||
776,11,ボディプレス
|
||||
776,12,撲擊
|
||||
776,12,扑击
|
||||
777,1,デコレーション
|
||||
777,3,데코레이션
|
||||
777,4,裝飾
|
||||
|
@ -7754,7 +7768,7 @@ move_id,local_language_id,name
|
|||
777,8,Decorazione
|
||||
777,9,Decorate
|
||||
777,11,デコレーション
|
||||
777,12,裝飾
|
||||
777,12,装饰
|
||||
778,1,ドラムアタック
|
||||
778,3,드럼어택
|
||||
778,4,鼓擊
|
||||
|
@ -7764,7 +7778,7 @@ move_id,local_language_id,name
|
|||
778,8,Tamburattacco
|
||||
778,9,Drum Beating
|
||||
778,11,ドラムアタック
|
||||
778,12,鼓擊
|
||||
778,12,鼓击
|
||||
779,1,トラバサミ
|
||||
779,3,집게덫
|
||||
779,4,捕獸夾
|
||||
|
@ -7774,8 +7788,8 @@ move_id,local_language_id,name
|
|||
779,8,Tagliola
|
||||
779,9,Snap Trap
|
||||
779,11,トラバサミ
|
||||
779,12,捕獸夾
|
||||
780,1,かえん
|
||||
779,12,捕兽夹
|
||||
780,1,かえんボール
|
||||
780,3,화염볼
|
||||
780,4,火焰球
|
||||
780,5,Ballon Brûlant
|
||||
|
@ -7783,7 +7797,7 @@ move_id,local_language_id,name
|
|||
780,7,Balón Ígneo
|
||||
780,8,Palla Infuocata
|
||||
780,9,Pyro Ball
|
||||
780,11,かえん
|
||||
780,11,かえんボール
|
||||
780,12,火焰球
|
||||
781,1,きょじゅうざん
|
||||
781,3,거수참
|
||||
|
@ -7794,7 +7808,7 @@ move_id,local_language_id,name
|
|||
781,8,Taglio Maestoso
|
||||
781,9,Behemoth Blade
|
||||
781,11,きょじゅうざん
|
||||
781,12,巨獸斬
|
||||
781,12,巨兽斩
|
||||
782,1,きょじゅうだん
|
||||
782,3,거수탄
|
||||
782,4,巨獸彈
|
||||
|
@ -7804,17 +7818,17 @@ move_id,local_language_id,name
|
|||
782,8,Colpo Maestoso
|
||||
782,9,Behemoth Bash
|
||||
782,11,きょじゅうだん
|
||||
782,12,巨獸彈
|
||||
783,1,オーラ
|
||||
782,12,巨兽弹
|
||||
783,1,オーラぐるま
|
||||
783,3,오라휠
|
||||
783,4,氣場輪
|
||||
783,5,Roue Libre
|
||||
783,6,Aura-Rad
|
||||
783,7,Rueda Aural
|
||||
783,8,Ruota d'Aura
|
||||
783,8,Ruota d’Aura
|
||||
783,9,Aura Wheel
|
||||
783,11,オーラ
|
||||
783,12,氣場輪
|
||||
783,11,オーラぐるま
|
||||
783,12,气场轮
|
||||
784,1,ワイドブレイカー
|
||||
784,3,와이드브레이커
|
||||
784,4,廣域破壞
|
||||
|
@ -7824,7 +7838,17 @@ move_id,local_language_id,name
|
|||
784,8,Vastoimpatto
|
||||
784,9,Breaking Swipe
|
||||
784,11,ワイドブレイカー
|
||||
784,12,廣域破壞
|
||||
784,12,广域破坏
|
||||
785,1,えだづき
|
||||
785,3,가지찌르기
|
||||
785,4,木枝突刺
|
||||
785,5,Tapotige
|
||||
785,6,Zweigstoß
|
||||
785,7,Punzada Rama
|
||||
785,8,Ramostoccata
|
||||
785,9,Branch Poke
|
||||
785,11,えだづき
|
||||
785,12,木枝突刺
|
||||
786,1,オーバードライブ
|
||||
786,3,오버드라이브
|
||||
786,4,破音
|
||||
|
@ -7844,17 +7868,17 @@ move_id,local_language_id,name
|
|||
787,8,Acido Malico
|
||||
787,9,Apple Acid
|
||||
787,11,りんごさん
|
||||
787,12,蘋果酸
|
||||
788,1,
|
||||
788,3,
|
||||
787,12,苹果酸
|
||||
788,1,Gのちから
|
||||
788,3,G의힘
|
||||
788,4,萬有引力
|
||||
788,5,Force G
|
||||
788,6,Gravitation
|
||||
788,7,Fuerza G
|
||||
788,8,Forza G
|
||||
788,9,Grav Apple
|
||||
788,11,
|
||||
788,12,萬有引力
|
||||
788,11,Gのちから
|
||||
788,12,万有引力
|
||||
789,1,ソウルクラッシュ
|
||||
789,3,소울크래시
|
||||
789,4,靈魂衝擊
|
||||
|
@ -7864,7 +7888,7 @@ move_id,local_language_id,name
|
|||
789,8,Frantumanima
|
||||
789,9,Spirit Break
|
||||
789,11,ソウルクラッシュ
|
||||
789,12,靈魂衝擊
|
||||
789,12,灵魂冲击
|
||||
790,1,ワンダースチーム
|
||||
790,3,원더스팀
|
||||
790,4,神奇蒸汽
|
||||
|
@ -7894,7 +7918,7 @@ move_id,local_language_id,name
|
|||
792,8,Sbarramento
|
||||
792,9,Obstruct
|
||||
792,11,ブロッキング
|
||||
792,12,攔堵
|
||||
792,12,拦堵
|
||||
793,1,どげざつき
|
||||
793,3,사죄의찌르기
|
||||
793,4,假跪真撞
|
||||
|
@ -7914,7 +7938,7 @@ move_id,local_language_id,name
|
|||
794,8,Sfolgorassalto
|
||||
794,9,Meteor Assault
|
||||
794,11,スターアサルト
|
||||
794,12,流星突擊
|
||||
794,12,流星突击
|
||||
795,1,ムゲンダイビーム
|
||||
795,3,무한다이빔
|
||||
795,4,無極光束
|
||||
|
@ -7924,137 +7948,317 @@ move_id,local_language_id,name
|
|||
795,8,Raggio Infinito
|
||||
795,9,Eternabeam
|
||||
795,11,ムゲンダイビーム
|
||||
795,12,無極光束
|
||||
795,12,无极光束
|
||||
796,1,てっていこうせん
|
||||
796,3,철제광선
|
||||
796,4,鐵蹄光線
|
||||
796,5,Métalaser
|
||||
796,6,Stahlstrahl
|
||||
796,7,Metaláser
|
||||
796,8,Raggio d'Acciaio
|
||||
796,8,Raggio d’Acciaio
|
||||
796,9,Steel Beam
|
||||
796,11,てっていこうせん
|
||||
796,12,鐵蹄光線
|
||||
796,12,铁蹄光线
|
||||
797,1,ワイドフォース
|
||||
797,3,와이드포스
|
||||
797,4,廣域戰力
|
||||
797,5,Vaste Pouvoir
|
||||
797,6,Flächenmacht
|
||||
797,7,Vasta Fuerza
|
||||
797,8,Vastenergia
|
||||
797,9,Expanding Force
|
||||
797,11,ワイドフォース
|
||||
797,12,广域战力
|
||||
798,1,アイアンローラー
|
||||
798,3,아이언롤러
|
||||
798,4,鐵滾輪
|
||||
798,5,Métalliroue
|
||||
798,6,Eisenwalze
|
||||
798,7,Allanador Férreo
|
||||
798,8,Ferrorullo
|
||||
798,9,Steel Roller
|
||||
798,11,アイアンローラー
|
||||
798,12,铁滚轮
|
||||
799,1,スケイルショット
|
||||
799,3,스케일샷
|
||||
799,4,鱗射
|
||||
799,5,Rafale Écailles
|
||||
799,6,Schuppenschuss
|
||||
799,7,Ráfaga Escamas
|
||||
799,8,Squamacolpo
|
||||
799,9,Scale Shot
|
||||
799,11,スケイルショット
|
||||
799,12,鳞射
|
||||
800,1,メテオビーム
|
||||
800,3,메테오빔
|
||||
800,4,流星光束
|
||||
800,5,Laser Météore
|
||||
800,6,Meteorstrahl
|
||||
800,7,Rayo Meteórico
|
||||
800,8,Raggiometeora
|
||||
800,9,Meteor Beam
|
||||
800,11,メテオビーム
|
||||
800,12,流星光束
|
||||
801,1,シェルアームズ
|
||||
801,3,셸암즈
|
||||
801,4,臂貝武器
|
||||
801,5,Kokiyarme
|
||||
801,6,Muschelwaffe
|
||||
801,7,Moluscañón
|
||||
801,8,Armaguscio
|
||||
801,9,Shell Side Arm
|
||||
801,11,シェルアームズ
|
||||
801,12,臂贝武器
|
||||
802,1,ミストバースト
|
||||
802,3,미스트버스트
|
||||
802,4,薄霧炸裂
|
||||
802,5,Explo-Brume
|
||||
802,6,Nebelexplosion
|
||||
802,7,Bruma Explosiva
|
||||
802,8,Nebbioscoppio
|
||||
802,9,Misty Explosion
|
||||
803,3,그래스슬라이더
|
||||
803,5,Gliss'Herbe
|
||||
802,11,ミストバースト
|
||||
802,12,薄雾炸裂
|
||||
803,1,グラススライダー
|
||||
803,3,그래스슬라이더
|
||||
803,4,青草滑梯
|
||||
803,5,Gliss’Herbe
|
||||
803,6,Grasrutsche
|
||||
803,7,Fitoimpulso
|
||||
803,8,Erboscivolata
|
||||
803,9,Grassy Glide
|
||||
803,11,グラススライダー
|
||||
803,12,青草滑梯
|
||||
804,1,ライジングボルト
|
||||
804,3,라이징볼트
|
||||
804,4,電力上升
|
||||
804,5,Monte-Tension
|
||||
804,6,Hochspannung
|
||||
804,7,Alto Voltaje
|
||||
804,8,Elettroimpennata
|
||||
804,9,Rising Voltage
|
||||
804,11,ライジングボルト
|
||||
804,12,电力上升
|
||||
805,1,だいちのはどう
|
||||
805,3,대지의파동
|
||||
805,4,大地波動
|
||||
805,5,Champlification
|
||||
805,6,Feldimpuls
|
||||
805,7,Pulso de Campo
|
||||
805,8,Campopulsar
|
||||
805,9,Terrain Pulse
|
||||
805,11,だいちのはどう
|
||||
805,12,大地波动
|
||||
806,1,はいよるいちげき
|
||||
806,3,엄습하는일격
|
||||
806,4,爬擊
|
||||
806,5,Ravage Rampant
|
||||
806,6,Krabbelkracher
|
||||
806,7,Golpe Rastrero
|
||||
806,8,Strisciacolpo
|
||||
806,9,Skitter Smack
|
||||
806,11,はいよるいちげき
|
||||
806,12,爬击
|
||||
807,1,しっとのほのお
|
||||
807,3,질투의불꽃
|
||||
807,4,妒火
|
||||
807,5,Feu Envieux
|
||||
807,6,Neidflammen
|
||||
807,7,Envidia Ardiente
|
||||
807,8,Fiamminvidia
|
||||
807,9,Burning Jealousy
|
||||
807,11,しっとのほのお
|
||||
807,12,妒火
|
||||
808,1,うっぷんばらし
|
||||
808,3,분풀이
|
||||
808,4,洩憤
|
||||
808,5,Cent Rancunes
|
||||
808,6,Frustventil
|
||||
808,7,Desahogo
|
||||
808,8,Sfogarabbia
|
||||
808,9,Lash Out
|
||||
808,11,うっぷんばらし
|
||||
808,12,泄愤
|
||||
809,1,ポルターガイスト
|
||||
809,3,폴터가이스트
|
||||
809,4,靈騷
|
||||
809,5,Esprit Frappeur
|
||||
809,6,Poltergeist
|
||||
809,7,Poltergeist
|
||||
809,8,Poltergeist
|
||||
809,9,Poltergeist
|
||||
809,11,ポルターガイスト
|
||||
809,12,灵骚
|
||||
810,1,ふしょくガス
|
||||
810,3,부식가스
|
||||
810,4,腐蝕氣體
|
||||
810,5,Gaz Corrosif
|
||||
810,6,Korrosionsgas
|
||||
810,7,Gas Corrosivo
|
||||
810,8,Gas Corrosivo
|
||||
810,9,Corrosive Gas
|
||||
810,11,ふしょくガス
|
||||
810,12,腐蚀气体
|
||||
811,1,コーチング
|
||||
811,3,코칭
|
||||
811,4,指導
|
||||
811,5,Coaching
|
||||
811,6,Coaching
|
||||
811,7,Motivación
|
||||
811,8,Coaching
|
||||
811,9,Coaching
|
||||
811,11,コーチング
|
||||
811,12,指导
|
||||
812,1,クイックターン
|
||||
812,3,퀵턴
|
||||
812,4,快速折返
|
||||
812,5,Eau Revoir
|
||||
812,6,Rollwende
|
||||
812,7,Viraje
|
||||
812,8,Virata
|
||||
812,9,Flip Turn
|
||||
812,11,クイックターン
|
||||
812,12,快速折返
|
||||
813,1,トリプルアクセル
|
||||
813,3,트리플악셀
|
||||
813,4,三旋擊
|
||||
813,5,Triple Axel
|
||||
813,6,Dreifach-Axel
|
||||
813,7,Triple Axel
|
||||
813,8,Triplo Axel
|
||||
813,9,Triple Axel
|
||||
813,11,トリプルアクセル
|
||||
813,12,三旋击
|
||||
814,1,ダブルウイング
|
||||
814,3,더블윙
|
||||
814,4,雙翼
|
||||
814,5,Double Volée
|
||||
814,6,Doppelflügel
|
||||
814,7,Ala Bis
|
||||
814,8,Doppia Ala
|
||||
814,9,Dual Wingbeat
|
||||
815,3,열사의대지t
|
||||
814,11,ダブルウイング
|
||||
814,12,双翼
|
||||
815,1,ねっさのだいち
|
||||
815,3,열사의대지
|
||||
815,4,熱沙大地
|
||||
815,5,Sable Ardent
|
||||
815,6,Brandsand
|
||||
815,7,Arenas Ardientes
|
||||
815,8,Sabbiardente
|
||||
815,9,Scorching Sands
|
||||
815,11,ねっさのだいち
|
||||
815,12,热沙大地
|
||||
816,1,ジャングルヒール
|
||||
816,3,정글힐
|
||||
816,4,叢林治療
|
||||
816,5,Selve Salvatrice
|
||||
816,6,Dschungelheilung
|
||||
816,7,Cura Selvática
|
||||
816,8,Giunglacura
|
||||
816,9,Jungle Healing
|
||||
816,11,ジャングルヒール
|
||||
816,12,丛林治疗
|
||||
817,1,あんこくきょうだ
|
||||
817,3,암흑강타
|
||||
817,4,暗冥強擊
|
||||
817,5,Poing Obscur
|
||||
817,6,Finstertreffer
|
||||
817,7,Golpe Oscuro
|
||||
817,8,Pugnotenebra
|
||||
817,9,Wicked Blow
|
||||
817,11,あんこくきょうだ
|
||||
817,12,暗冥强击
|
||||
818,1,すいりゅうれんだ
|
||||
818,3,수류연타
|
||||
818,4,水流連打
|
||||
818,5,Torrent de Coups
|
||||
818,6,Trefferschwall
|
||||
818,7,Azote Torrencial
|
||||
818,8,Idroraffica
|
||||
818,9,Surging Strikes
|
||||
818,11,すいりゅうれんだ
|
||||
818,12,水流连打
|
||||
819,1,サンダープリズン
|
||||
819,3,썬더프리즌
|
||||
819,4,雷電囚籠
|
||||
819,5,Voltageôle
|
||||
819,6,Blitzgefängnis
|
||||
819,7,Electrojaula
|
||||
819,8,Elettrogabbia
|
||||
819,9,Thunder Cage
|
||||
819,11,サンダープリズン
|
||||
819,12,雷电囚笼
|
||||
820,1,ドラゴンエナジー
|
||||
820,3,드래곤에너지
|
||||
820,4,巨龍威能
|
||||
820,5,Draco-Énergie
|
||||
820,6,Drachenkräfte
|
||||
820,7,Dracoenergía
|
||||
820,8,Dragoenergia
|
||||
820,9,Dragon Energy
|
||||
820,11,ドラゴンエナジー
|
||||
820,12,巨龙威能
|
||||
821,1,いてつくしせん
|
||||
821,3,얼어붙는시선
|
||||
821,4,冰冷視線
|
||||
821,5,Regard Glaçant
|
||||
821,6,Eisiger Blick
|
||||
821,7,Mirada Heladora
|
||||
821,8,Sguardo Gelido
|
||||
821,9,Freezing Glare
|
||||
821,11,いてつくしせん
|
||||
821,12,冰冷视线
|
||||
822,1,もえあがるいかり
|
||||
822,3,타오르는분노
|
||||
822,4,怒火中燒
|
||||
822,5,Fureur Ardente
|
||||
822,6,Brennender Zorn
|
||||
822,7,Furia Candente
|
||||
822,8,Furia Ardente
|
||||
822,9,Fiery Wrath
|
||||
822,11,もえあがるいかり
|
||||
822,12,怒火中烧
|
||||
823,1,らいめいげり
|
||||
823,3,천둥차기
|
||||
823,4,雷鳴蹴擊
|
||||
823,5,Coup Fulgurant
|
||||
823,6,Donnernder Tritt
|
||||
823,7,Patada Relámpago
|
||||
823,8,Calcio Tonante
|
||||
823,9,Thunderous Kick
|
||||
823,11,らいめいげり
|
||||
823,12,雷鸣蹴击
|
||||
824,1,ブリザードランス
|
||||
824,3,블리자드랜스
|
||||
824,4,雪矛
|
||||
824,5,Lance de Glace
|
||||
824,6,Blizzardlanze
|
||||
824,7,Lanza Glacial
|
||||
824,8,Lancia Glaciale
|
||||
824,9,Glacial Lance
|
||||
824,11,ブリザードランス
|
||||
824,12,雪矛
|
||||
825,1,アストラルビット
|
||||
825,3,아스트랄비트
|
||||
825,4,星碎
|
||||
825,5,Éclat Spectral
|
||||
825,6,Astralfragmente
|
||||
825,7,Orbes Espectro
|
||||
825,8,Schegge Astrali
|
||||
825,9,Astral Barrage
|
||||
825,11,アストラルビット
|
||||
825,12,星碎
|
||||
826,1,ぶきみなじゅもん
|
||||
826,3,섬뜩한주문
|
||||
826,4,詭異咒語
|
||||
826,5,Sort Sinistre
|
||||
826,6,Schauderspruch
|
||||
826,7,Conjuro Funesto
|
||||
826,8,Inquietantesimo
|
||||
826,9,Eerie Spell
|
||||
826,11,ぶきみなじゅもん
|
||||
826,12,诡异咒语
|
||||
10001,1,ダークラッシュ
|
||||
10001,5,Charge Noire
|
||||
10001,6,Cryptoschlag
|
||||
|
|
|
|
@ -9,7 +9,7 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
|||
8,ice-punch,1,15,75,15,100,0,10,2,6,10,2,1,17
|
||||
9,thunder-punch,1,13,75,15,100,0,10,2,7,10,1,1,17
|
||||
10,scratch,1,1,40,35,100,0,10,2,1,,5,1,5
|
||||
11,vice-grip,1,1,55,30,100,0,10,2,1,,5,1,5
|
||||
11,vise-grip,1,1,55,30,100,0,10,2,1,,5,1,5
|
||||
12,guillotine,1,1,,5,30,0,10,2,39,,1,14,9
|
||||
13,razor-wind,1,1,80,10,100,0,11,3,40,,1,2,6
|
||||
14,swords-dance,1,1,,20,,0,7,1,51,,2,32,11
|
||||
|
@ -783,6 +783,7 @@ id,identifier,generation_id,type_id,power,pp,accuracy,priority,target_id,damage_
|
|||
782,behemoth-bash,8,9,100,5,100,0,10,2,,,,,
|
||||
783,aura-wheel,8,13,110,10,100,0,10,2,,,,,
|
||||
784,breaking-swipe,8,16,60,15,100,0,11,2,,,,,
|
||||
785,branch-poke,8,12,40,40,100,0,11,2,,,,,
|
||||
786,overdrive,8,13,80,10,100,0,11,3,,,,,
|
||||
787,apple-acid,8,12,80,10,100,0,10,3,,,,,
|
||||
788,grav-apple,8,12,80,10,100,0,10,2,,,,,
|
||||
|
|
|
|
@ -9375,7 +9375,7 @@ pokemon_species_id,local_language_id,name,genus
|
|||
889,1,ザマゼンタ,つわものポケモン
|
||||
889,3,자마젠타,강자포켓몬
|
||||
889,4,藏瑪然特,強者寶可夢
|
||||
889,5,Zamazent,Pokémon Valeureux
|
||||
889,5,Zamazenta,Pokémon Valeureux
|
||||
889,6,Zamazenta,Krieger
|
||||
889,7,Zamazenta,Pokémon Guerrero
|
||||
889,8,Zamazenta,Pokémon Guerriero
|
||||
|
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 5bdf22873dddb3829ebc2c05473ba19fb2b2e9ca
|
||||
Subproject commit d41c408f7e5be9848260f470e34069c264091a69
|
|
@ -4,20 +4,27 @@ services:
|
|||
image: redis:alpine
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
restart: always
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
environment:
|
||||
POSTGRES_PASSWORD: 'pokemon'
|
||||
POSTGRES_USER: 'ash'
|
||||
POSTGRES_DB: 'pokeapi'
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-pokemon}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-ash}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-pokeapi}
|
||||
volumes:
|
||||
- pg_data:/var/lib/postgresql/data
|
||||
restart: always
|
||||
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: ./Resources/docker/app/Dockerfile
|
||||
user: ${RUN_AS:-pokeapi}
|
||||
environment:
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-pokemon}
|
||||
POSTGRES_USER: ${POSTGRES_USER:-ash}
|
||||
POSTGRES_DB: ${POSTGRES_DB:-pokeapi}
|
||||
volumes:
|
||||
- .:/code
|
||||
links:
|
||||
|
@ -26,19 +33,40 @@ services:
|
|||
depends_on:
|
||||
- db
|
||||
- cache
|
||||
restart: always
|
||||
|
||||
web:
|
||||
build:
|
||||
context: ./Resources
|
||||
dockerfile: ./docker/web/Dockerfile
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
restart: always
|
||||
# command: [nginx-debug, '-g', 'daemon off;']
|
||||
volumes:
|
||||
- ./Resources/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- ./Resources/nginx/ssl:/ssl:ro
|
||||
volumes_from:
|
||||
- app:ro
|
||||
links:
|
||||
- app
|
||||
|
||||
graphql-engine:
|
||||
image: hasura/graphql-engine:v2.0.0-alpha.5
|
||||
ports:
|
||||
- "8080:8080"
|
||||
depends_on:
|
||||
- "db"
|
||||
restart: always
|
||||
environment:
|
||||
HASURA_GRAPHQL_DATABASE_URL: postgres://${POSTGRES_USER:-ash}:${POSTGRES_PASSWORD:-pokemon}@db:5432/${POSTGRES_DB:-pokeapi}
|
||||
HASURA_GRAPHQL_ENABLE_CONSOLE: "true"
|
||||
HASURA_GRAPHQL_DEV_MODE: "false"
|
||||
HASURA_GRAPHQL_ENABLED_LOG_TYPES: startup, http-log, webhook-log, websocket-log, query-log
|
||||
HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET:-pokemon}
|
||||
HASURA_GRAPHQL_UNAUTHORIZED_ROLE: anon
|
||||
HASURA_GRAPHQL_ENABLE_TELEMETRY: "false"
|
||||
# HASURA_GRAPHQL_CONSOLE_ASSETS_DIR: /srv/console-assets
|
||||
|
||||
volumes:
|
||||
pg_data:
|
||||
redis_data:
|
||||
|
|
6
graphql/config.yaml
Normal file
6
graphql/config.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
version: 3
|
||||
endpoint: http://localhost:8080
|
||||
metadata_directory: metadata
|
||||
actions:
|
||||
kind: synchronous
|
||||
handler_webhook_baseurl: http://localhost:3000
|
5
graphql/examples/README.md
Normal file
5
graphql/examples/README.md
Normal file
|
@ -0,0 +1,5 @@
|
|||
# GraphQL examples
|
||||
|
||||
You can use all the `.gql` examples in our console at https://beta.pokeapi.co/graphql/console/.
|
||||
|
||||
Inside the folders you find GraphQL queries implemented in different languages, frameworks and libraries.
|
26
graphql/examples/alola_road_encounters.gql
Normal file
26
graphql/examples/alola_road_encounters.gql
Normal file
|
@ -0,0 +1,26 @@
|
|||
"""
|
||||
Finds Pokemons in Alola that evolve when you are in a particular location.
|
||||
|
||||
Variables:
|
||||
{
|
||||
"region": "alola"
|
||||
}
|
||||
"""
|
||||
|
||||
query location_evolutions_in_alola($region: String) {
|
||||
region: pokemon_v2_region(where: {name: {_eq: $region}}) {
|
||||
name
|
||||
location: pokemon_v2_locations_aggregate(where: {pokemon_v2_pokemonevolutions: {id: {_is_null: false}}}) {
|
||||
nodes {
|
||||
name
|
||||
evolutions: pokemon_v2_pokemonevolutions_aggregate {
|
||||
nodes {
|
||||
species: pokemon_v2_pokemonspecy {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
35
graphql/examples/best_poison_grass_pokemon.gql
Normal file
35
graphql/examples/best_poison_grass_pokemon.gql
Normal file
|
@ -0,0 +1,35 @@
|
|||
"""
|
||||
Returns the strongest 3 grass and poison pokemon. It uses thier stats to compute their strenght.
|
||||
"""
|
||||
|
||||
query best_grass_poison_pokemons {
|
||||
pokemon: pokemon_v2_pokemon(
|
||||
where: {
|
||||
_and: [
|
||||
{
|
||||
pokemon_v2_pokemontypes: {
|
||||
pokemon_v2_type: { name: { _eq: "grass" } }
|
||||
}
|
||||
}
|
||||
{
|
||||
pokemon_v2_pokemontypes: {
|
||||
pokemon_v2_type: { name: { _eq: "poison" } }
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
order_by: {
|
||||
pokemon_v2_pokemonstats_aggregate: { sum: { base_stat: desc } }
|
||||
}
|
||||
limit: 3
|
||||
) {
|
||||
name
|
||||
stats: pokemon_v2_pokemonstats_aggregate(order_by: {}) {
|
||||
aggregate {
|
||||
sum {
|
||||
base_stat
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
17
graphql/examples/gen3_species.gql
Normal file
17
graphql/examples/gen3_species.gql
Normal file
|
@ -0,0 +1,17 @@
|
|||
query samplePokeAPIquery {
|
||||
# Gets all the pokemon belonging to generation 3
|
||||
gen3_species: pokemon_v2_pokemonspecies(where: {pokemon_v2_generation: {name: {_eq: "generation-iii"}}}, order_by: {id: asc}) {
|
||||
name
|
||||
id
|
||||
}
|
||||
# You can run multiple queries at the same time
|
||||
# Counts how many pokemon where release for each generation
|
||||
generations: pokemon_v2_generation {
|
||||
name
|
||||
pokemon_species: pokemon_v2_pokemonspecies_aggregate {
|
||||
aggregate {
|
||||
count
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
9
graphql/examples/go/README.md
Normal file
9
graphql/examples/go/README.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Go examples
|
||||
|
||||
## `pokemon.go`
|
||||
|
||||
Fetches details about a Pokémon and prints an unformatted JSON to the `stdout`. The name of the Pokémon is passed as a variable.
|
||||
|
||||
```sh
|
||||
go run pokemon.go # | jq
|
||||
```
|
110
graphql/examples/go/pokemon.go
Normal file
110
graphql/examples/go/pokemon.go
Normal file
|
@ -0,0 +1,110 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
type Operation struct {
|
||||
Query string `json:"query"`
|
||||
Variables map[string]interface{} `json:"variables"`
|
||||
OperationName string `json:"operationName"`
|
||||
}
|
||||
|
||||
var (
|
||||
pokemonDetails = Operation{
|
||||
OperationName: "pokemon_details",
|
||||
Variables: map[string]interface{}{
|
||||
"name": "staryu",
|
||||
},
|
||||
Query: `
|
||||
query pokemon_details($name: String) {
|
||||
species: pokemon_v2_pokemonspecies(where: {name: {_eq: $name}}) {
|
||||
name
|
||||
base_happiness
|
||||
is_legendary
|
||||
is_mythical
|
||||
generation: pokemon_v2_generation {
|
||||
name
|
||||
}
|
||||
habitat: pokemon_v2_pokemonhabitat {
|
||||
name
|
||||
}
|
||||
pokemon: pokemon_v2_pokemons_aggregate(limit: 1) {
|
||||
nodes {
|
||||
height
|
||||
name
|
||||
id
|
||||
weight
|
||||
abilities: pokemon_v2_pokemonabilities_aggregate {
|
||||
nodes {
|
||||
ability: pokemon_v2_ability {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
stats: pokemon_v2_pokemonstats {
|
||||
base_stat
|
||||
stat: pokemon_v2_stat {
|
||||
name
|
||||
}
|
||||
}
|
||||
types: pokemon_v2_pokemontypes {
|
||||
slot
|
||||
type: pokemon_v2_type {
|
||||
name
|
||||
}
|
||||
}
|
||||
levelUpMoves: pokemon_v2_pokemonmoves_aggregate(where: {pokemon_v2_movelearnmethod: {name: {_eq: "level-up"}}}, distinct_on: move_id) {
|
||||
nodes {
|
||||
move: pokemon_v2_move {
|
||||
name
|
||||
}
|
||||
level
|
||||
}
|
||||
}
|
||||
foundInAsManyPlaces: pokemon_v2_encounters_aggregate {
|
||||
aggregate {
|
||||
count
|
||||
}
|
||||
}
|
||||
fireRedItems: pokemon_v2_pokemonitems(where: {pokemon_v2_version: {name: {_eq: "firered"}}}) {
|
||||
pokemon_v2_item {
|
||||
name
|
||||
cost
|
||||
}
|
||||
rarity
|
||||
}
|
||||
}
|
||||
}
|
||||
flavorText: pokemon_v2_pokemonspeciesflavortexts(where: {pokemon_v2_language: {name: {_eq: "en"}}, pokemon_v2_version: {name: {_eq: "firered"}}}) {
|
||||
flavor_text
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
}
|
||||
)
|
||||
|
||||
func main() {
|
||||
url := "https://beta.pokeapi.co/graphql/v1beta"
|
||||
body, err := json.Marshal(pokemonDetails)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
resp, err := http.Post(url, "", bytes.NewReader(body))
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
body, err = ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
fmt.Println(string(body))
|
||||
}
|
27
graphql/examples/item_translations.gql
Normal file
27
graphql/examples/item_translations.gql
Normal file
|
@ -0,0 +1,27 @@
|
|||
# for each language, list all items and the relative English translation
|
||||
query getItemsTranslation1 {
|
||||
pokemon_v2_language {
|
||||
name
|
||||
iso639
|
||||
iso3166
|
||||
items: pokemon_v2_itemnames {
|
||||
name
|
||||
englishName: pokemon_v2_item {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# for each item, show the English name and get all its translations
|
||||
query getItemsTranslation2 {
|
||||
items: pokemon_v2_item {
|
||||
name
|
||||
translations: pokemon_v2_itemnames {
|
||||
foreignName: name
|
||||
language: pokemon_v2_language {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
10
graphql/examples/node/README.md
Normal file
10
graphql/examples/node/README.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
# Node examples
|
||||
|
||||
## `pokemon.js`
|
||||
|
||||
Fetches info about Staryu using `node-fetch`.
|
||||
|
||||
```sh
|
||||
npm i
|
||||
node pokemon.js
|
||||
```
|
13
graphql/examples/node/package-lock.json
generated
Normal file
13
graphql/examples/node/package-lock.json
generated
Normal file
|
@ -0,0 +1,13 @@
|
|||
{
|
||||
"name": "examples",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"node-fetch": {
|
||||
"version": "2.6.1",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz",
|
||||
"integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw=="
|
||||
}
|
||||
}
|
||||
}
|
14
graphql/examples/node/package.json
Normal file
14
graphql/examples/node/package.json
Normal file
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "examples",
|
||||
"version": "1.0.0",
|
||||
"description": "",
|
||||
"main": "''",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"node-fetch": "^2.6.1"
|
||||
}
|
||||
}
|
125
graphql/examples/node/pokemon.js
Normal file
125
graphql/examples/node/pokemon.js
Normal file
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
Get's many details about a pokemon passed as argument (starmie as default).
|
||||
|
||||
It gets:
|
||||
- happiness
|
||||
- if legendary/mythical
|
||||
- generation
|
||||
- habitat
|
||||
- height
|
||||
- weight
|
||||
- ID
|
||||
- abilities
|
||||
- stats
|
||||
- types
|
||||
- learnable moves by leveling up
|
||||
- in how many locations it can be found
|
||||
- holdable items in Fire Red
|
||||
- flavor text
|
||||
*/
|
||||
|
||||
const fetch = require("node-fetch")
|
||||
|
||||
async function fetchGraphQL(query, variables, operationName) {
|
||||
const result = await fetch(
|
||||
"https://beta.pokeapi.co/graphql/v1beta",
|
||||
{
|
||||
method: "POST",
|
||||
body: JSON.stringify({
|
||||
query: query,
|
||||
variables: variables,
|
||||
operationName: operationName
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
return await result.json()
|
||||
}
|
||||
|
||||
|
||||
|
||||
function fetchPokemon_details(name="starmie") {
|
||||
const query = `
|
||||
query pokemon_details($name: String) {
|
||||
species: pokemon_v2_pokemonspecies(where: {name: {_eq: $name}}) {
|
||||
name
|
||||
base_happiness
|
||||
is_legendary
|
||||
is_mythical
|
||||
generation: pokemon_v2_generation {
|
||||
name
|
||||
}
|
||||
habitat: pokemon_v2_pokemonhabitat {
|
||||
name
|
||||
}
|
||||
pokemon: pokemon_v2_pokemons_aggregate(limit: 1) {
|
||||
nodes {
|
||||
height
|
||||
name
|
||||
id
|
||||
weight
|
||||
abilities: pokemon_v2_pokemonabilities_aggregate {
|
||||
nodes {
|
||||
ability: pokemon_v2_ability {
|
||||
name
|
||||
}
|
||||
}
|
||||
}
|
||||
stats: pokemon_v2_pokemonstats {
|
||||
base_stat
|
||||
stat: pokemon_v2_stat {
|
||||
name
|
||||
}
|
||||
}
|
||||
types: pokemon_v2_pokemontypes {
|
||||
slot
|
||||
type: pokemon_v2_type {
|
||||
name
|
||||
}
|
||||
}
|
||||
levelUpMoves: pokemon_v2_pokemonmoves_aggregate(where: {pokemon_v2_movelearnmethod: {name: {_eq: "level-up"}}}, distinct_on: move_id) {
|
||||
nodes {
|
||||
move: pokemon_v2_move {
|
||||
name
|
||||
}
|
||||
level
|
||||
}
|
||||
}
|
||||
foundInAsManyPlaces: pokemon_v2_encounters_aggregate {
|
||||
aggregate {
|
||||
count
|
||||
}
|
||||
}
|
||||
fireRedItems: pokemon_v2_pokemonitems(where: {pokemon_v2_version: {name: {_eq: "firered"}}}) {
|
||||
pokemon_v2_item {
|
||||
name
|
||||
cost
|
||||
}
|
||||
rarity
|
||||
}
|
||||
}
|
||||
}
|
||||
flavorText: pokemon_v2_pokemonspeciesflavortexts(where: {pokemon_v2_language: {name: {_eq: "en"}}, pokemon_v2_version: {name: {_eq: "firered"}}}) {
|
||||
flavor_text
|
||||
}
|
||||
}
|
||||
}
|
||||
`
|
||||
|
||||
return fetchGraphQL(
|
||||
query,
|
||||
{"name": name},
|
||||
"pokemon_details"
|
||||
)
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const pokemon = process.argv.slice(2)[0];
|
||||
const { errors, data } = await fetchPokemon_details(pokemon)
|
||||
if (errors) {
|
||||
console.error(errors)
|
||||
}
|
||||
console.log(JSON.stringify(data, null, 2))
|
||||
}
|
||||
|
||||
main()
|
23
graphql/examples/pokemon_stats.gql
Normal file
23
graphql/examples/pokemon_stats.gql
Normal file
|
@ -0,0 +1,23 @@
|
|||
query tallest {
|
||||
pokemon: pokemon_v2_pokemon(order_by: {height: desc}, limit: 3, where: {is_default: {_eq: true}}) {
|
||||
name
|
||||
height
|
||||
}
|
||||
}
|
||||
|
||||
query fattest {
|
||||
pokemon: pokemon_v2_pokemon(order_by: {weight: desc}, limit: 3, where: {is_default: {_eq: true}}) {
|
||||
name
|
||||
weight
|
||||
}
|
||||
}
|
||||
|
||||
query avgHappiness {
|
||||
species: pokemon_v2_pokemonspecies_aggregate {
|
||||
aggregate {
|
||||
avg {
|
||||
base_happiness
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
2
graphql/metadata/actions.graphql
Normal file
2
graphql/metadata/actions.graphql
Normal file
|
@ -0,0 +1,2 @@
|
|||
|
||||
|
6
graphql/metadata/actions.yaml
Normal file
6
graphql/metadata/actions.yaml
Normal file
|
@ -0,0 +1,6 @@
|
|||
actions: []
|
||||
custom_types:
|
||||
enums: []
|
||||
input_objects: []
|
||||
objects: []
|
||||
scalars: []
|
1
graphql/metadata/allow_list.yaml
Normal file
1
graphql/metadata/allow_list.yaml
Normal file
|
@ -0,0 +1 @@
|
|||
[]
|
1
graphql/metadata/cron_triggers.yaml
Normal file
1
graphql/metadata/cron_triggers.yaml
Normal file
|
@ -0,0 +1 @@
|
|||
[]
|
12
graphql/metadata/databases/databases.yaml
Normal file
12
graphql/metadata/databases/databases.yaml
Normal file
|
@ -0,0 +1,12 @@
|
|||
- name: default
|
||||
kind: postgres
|
||||
configuration:
|
||||
connection_info:
|
||||
database_url:
|
||||
from_env: HASURA_GRAPHQL_DATABASE_URL
|
||||
pool_settings:
|
||||
idle_timeout: 180
|
||||
max_connections: 50
|
||||
retries: 1
|
||||
tables: "!include default/tables/tables.yaml"
|
||||
functions: "!include default/functions/functions.yaml"
|
|
@ -0,0 +1 @@
|
|||
[]
|
|
@ -0,0 +1,50 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_abilitychanges
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: ability_id
|
||||
table:
|
||||
name: pokemon_v2_abilitychange
|
||||
schema: public
|
||||
- name: pokemon_v2_abilityeffecttexts
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: ability_id
|
||||
table:
|
||||
name: pokemon_v2_abilityeffecttext
|
||||
schema: public
|
||||
- name: pokemon_v2_abilityflavortexts
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: ability_id
|
||||
table:
|
||||
name: pokemon_v2_abilityflavortext
|
||||
schema: public
|
||||
- name: pokemon_v2_abilitynames
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: ability_id
|
||||
table:
|
||||
name: pokemon_v2_abilityname
|
||||
schema: public
|
||||
- name: pokemon_v2_pokemonabilities
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: ability_id
|
||||
table:
|
||||
name: pokemon_v2_pokemonability
|
||||
schema: public
|
||||
object_relationships:
|
||||
- name: pokemon_v2_generation
|
||||
using:
|
||||
foreign_key_constraint_on: generation_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_ability
|
||||
schema: public
|
|
@ -0,0 +1,25 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_abilitychangeeffecttexts
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: ability_change_id
|
||||
table:
|
||||
name: pokemon_v2_abilitychangeeffecttext
|
||||
schema: public
|
||||
object_relationships:
|
||||
- name: pokemon_v2_ability
|
||||
using:
|
||||
foreign_key_constraint_on: ability_id
|
||||
- name: pokemon_v2_versiongroup
|
||||
using:
|
||||
foreign_key_constraint_on: version_group_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_abilitychange
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_abilitychange
|
||||
using:
|
||||
foreign_key_constraint_on: ability_change_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_abilitychangeeffecttext
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_ability
|
||||
using:
|
||||
foreign_key_constraint_on: ability_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_abilityeffecttext
|
||||
schema: public
|
|
@ -0,0 +1,20 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_ability
|
||||
using:
|
||||
foreign_key_constraint_on: ability_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
- name: pokemon_v2_versiongroup
|
||||
using:
|
||||
foreign_key_constraint_on: version_group_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_abilityflavortext
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_ability
|
||||
using:
|
||||
foreign_key_constraint_on: ability_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_abilityname
|
||||
schema: public
|
|
@ -0,0 +1,28 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_berryflavormaps
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: berry_id
|
||||
table:
|
||||
name: pokemon_v2_berryflavormap
|
||||
schema: public
|
||||
object_relationships:
|
||||
- name: pokemon_v2_berryfirmness
|
||||
using:
|
||||
foreign_key_constraint_on: berry_firmness_id
|
||||
- name: pokemon_v2_item
|
||||
using:
|
||||
foreign_key_constraint_on: item_id
|
||||
- name: pokemon_v2_type
|
||||
using:
|
||||
foreign_key_constraint_on: natural_gift_type_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_berry
|
||||
schema: public
|
|
@ -0,0 +1,25 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_berries
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: berry_firmness_id
|
||||
table:
|
||||
name: pokemon_v2_berry
|
||||
schema: public
|
||||
- name: pokemon_v2_berryfirmnessnames
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: berry_firmness_id
|
||||
table:
|
||||
name: pokemon_v2_berryfirmnessname
|
||||
schema: public
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_berryfirmness
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_berryfirmness
|
||||
using:
|
||||
foreign_key_constraint_on: berry_firmness_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_berryfirmnessname
|
||||
schema: public
|
|
@ -0,0 +1,43 @@
|
|||
array_relationships:
|
||||
- name: pokemonV2NaturesByLikesFlavorId
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: likes_flavor_id
|
||||
table:
|
||||
name: pokemon_v2_nature
|
||||
schema: public
|
||||
- name: pokemon_v2_berryflavormaps
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: berry_flavor_id
|
||||
table:
|
||||
name: pokemon_v2_berryflavormap
|
||||
schema: public
|
||||
- name: pokemon_v2_berryflavornames
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: berry_flavor_id
|
||||
table:
|
||||
name: pokemon_v2_berryflavorname
|
||||
schema: public
|
||||
- name: pokemon_v2_natures
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: hates_flavor_id
|
||||
table:
|
||||
name: pokemon_v2_nature
|
||||
schema: public
|
||||
object_relationships:
|
||||
- name: pokemon_v2_contesttype
|
||||
using:
|
||||
foreign_key_constraint_on: contest_type_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_berryflavor
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_berry
|
||||
using:
|
||||
foreign_key_constraint_on: berry_id
|
||||
- name: pokemon_v2_berryflavor
|
||||
using:
|
||||
foreign_key_constraint_on: berry_flavor_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_berryflavormap
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_berryflavor
|
||||
using:
|
||||
foreign_key_constraint_on: berry_flavor_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_berryflavorname
|
||||
schema: public
|
|
@ -0,0 +1,22 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_characteristicdescriptions
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: characteristic_id
|
||||
table:
|
||||
name: pokemon_v2_characteristicdescription
|
||||
schema: public
|
||||
object_relationships:
|
||||
- name: pokemon_v2_stat
|
||||
using:
|
||||
foreign_key_constraint_on: stat_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_characteristic
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_characteristic
|
||||
using:
|
||||
foreign_key_constraint_on: characteristic_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_characteristicdescription
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemonV2MoveBySecondMoveId
|
||||
using:
|
||||
foreign_key_constraint_on: second_move_id
|
||||
- name: pokemon_v2_move
|
||||
using:
|
||||
foreign_key_constraint_on: first_move_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_contestcombo
|
||||
schema: public
|
|
@ -0,0 +1,32 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_contesteffecteffecttexts
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: contest_effect_id
|
||||
table:
|
||||
name: pokemon_v2_contesteffecteffecttext
|
||||
schema: public
|
||||
- name: pokemon_v2_contesteffectflavortexts
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: contest_effect_id
|
||||
table:
|
||||
name: pokemon_v2_contesteffectflavortext
|
||||
schema: public
|
||||
- name: pokemon_v2_moves
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: contest_effect_id
|
||||
table:
|
||||
name: pokemon_v2_move
|
||||
schema: public
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_contesteffect
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_contesteffect
|
||||
using:
|
||||
foreign_key_constraint_on: contest_effect_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_contesteffecteffecttext
|
||||
schema: public
|
|
@ -0,0 +1,17 @@
|
|||
object_relationships:
|
||||
- name: pokemon_v2_contesteffect
|
||||
using:
|
||||
foreign_key_constraint_on: contest_effect_id
|
||||
- name: pokemon_v2_language
|
||||
using:
|
||||
foreign_key_constraint_on: language_id
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_contesteffectflavortext
|
||||
schema: public
|
|
@ -0,0 +1,32 @@
|
|||
array_relationships:
|
||||
- name: pokemon_v2_berryflavors
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: contest_type_id
|
||||
table:
|
||||
name: pokemon_v2_berryflavor
|
||||
schema: public
|
||||
- name: pokemon_v2_contesttypenames
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: contest_type_id
|
||||
table:
|
||||
name: pokemon_v2_contesttypename
|
||||
schema: public
|
||||
- name: pokemon_v2_moves
|
||||
using:
|
||||
foreign_key_constraint_on:
|
||||
column: contest_type_id
|
||||
table:
|
||||
name: pokemon_v2_move
|
||||
schema: public
|
||||
select_permissions:
|
||||
- permission:
|
||||
allow_aggregations: true
|
||||
columns: "*"
|
||||
filter: {}
|
||||
limit: 100000
|
||||
role: anon
|
||||
table:
|
||||
name: pokemon_v2_contesttype
|
||||
schema: public
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue