1
0
mirror of https://github.com/tcgdex/cards-database.git synced 2025-08-15 01:41:59 +00:00

Compare commits

..

2 Commits

Author SHA1 Message Date
4908aeed8a feat: Start to add new decks
Signed-off-by: Avior <github@avior.me>
2024-01-03 03:55:57 +01:00
2d427e7ddf First deck added (still need to find a good ID)
Signed-off-by: Avior <github@avior.me>
2024-01-03 03:55:57 +01:00
16108 changed files with 2773 additions and 626988 deletions

View File

@@ -52,24 +52,6 @@
"contributions": [
"data"
]
},
{
"login": "spyworldxp",
"name": "Clement Yuan",
"avatar_url": "https://avatars.githubusercontent.com/u/1112701?v=4",
"profile": "http://imclement.com",
"contributions": [
"data"
]
},
{
"login": "Reloadaxe",
"name": "Benjamin Rousseliere",
"avatar_url": "https://avatars.githubusercontent.com/u/44167126?v=4",
"profile": "https://github.com/Reloadaxe",
"contributions": [
"data"
]
}
],
"contributorsPerLine": 7,
@@ -78,6 +60,5 @@
"repoType": "github",
"repoHost": "https://github.com",
"skipCi": true,
"commitConvention": "angular",
"commitType": "docs"
"commitConvention": "angular"
}

View File

@@ -1,8 +0,0 @@
{
"version": "1",
"name": "TCGdex",
"type": "collection",
"presets": {
"requestType": "http"
}
}

View File

@@ -1,25 +0,0 @@
meta {
name: Advanced Query
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/cards?name=eq:Pikachu&hp=gte:60&hp=lt:70&localId=5&localId=not:tg&id=neq:cel25-5
body: none
auth: none
}
params:query {
name: eq:Pikachu
hp: gte:60
hp: lt:70
localId: 5
localId: not:tg
id: neq:cel25-5
}
assert {
res.status: eq 200
res.body.length: gte 14
}

View File

@@ -1,28 +0,0 @@
meta {
name: Get the cards list
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/cards?sort:field=name&sort:order=DESC&pagination:page=1&pagination:itemsPerPage=4
body: none
auth: none
}
query {
sort:field: name
sort:order: DESC
pagination:page: 1
pagination:itemsPerPage: 4
~name: furret
}
assert {
res.status: eq 200
res.body.length: eq 4
}
docs {
Fully describe the card list request, it also has every parameters it can
}

View File

@@ -1,16 +0,0 @@
meta {
name: Get one card
type: http
seq: 2
}
get {
url: {{BASE_URL}}/v2/en/cards/swsh3-136
body: none
auth: none
}
assert {
res.status: eq 200
res.body.id: eq swsh3-136
}

View File

@@ -1,23 +0,0 @@
meta {
name: Multiple values
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/cards?name=eq:Pikachu|Pichu&hp=lt:70&localId=not:tg&id=neq:cel25-5
body: none
auth: none
}
params:query {
name: eq:Pikachu|Pichu
hp: lt:70
localId: not:tg
id: neq:cel25-5
}
assert {
res.status: eq 200
res.body.length: gt 85
}

View File

@@ -1,21 +0,0 @@
meta {
name: Get by Dex ID
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/dex-ids/{{ID}}
body: none
auth: none
}
vars:pre-request {
ID: 162
}
assert {
res.status: eq 200
res.body.cards.length: gte 8
res.body.name: eq {{ID}}
}

View File

@@ -1,3 +0,0 @@
vars {
BASE_URL: https://beta.api.tcgdex.net
}

View File

@@ -1,3 +0,0 @@
vars {
BASE_URL: http://127.0.0.1:3000
}

View File

@@ -1,3 +0,0 @@
vars {
BASE_URL: https://api.tcgdex.net
}

View File

@@ -1,20 +0,0 @@
meta {
name: End Star Pattern
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/cards?name=*chu
body: none
auth: inherit
}
params:query {
name: *chu
}
assert {
res.body.length: gt 3
res.body[1].name: neq Pikachu on the Ball
}

View File

@@ -1,19 +0,0 @@
meta {
name: dexId Search
type: http
seq: 3
}
get {
url: {{BASE_URL}}/v2/ja/cards?dexId=eq:357
body: none
auth: inherit
}
params:query {
dexId: eq:357
}
assert {
res.body.length: eq 3
}

View File

@@ -1,20 +0,0 @@
meta {
name: Start star Pattern
type: http
seq: 2
}
get {
url: {{BASE_URL}}/v2/en/cards?name=fu*
body: none
auth: inherit
}
params:query {
name: fu*
}
assert {
res.body.length: gt 3
res.body[1].name: neq Stufful
}

View File

@@ -1,22 +0,0 @@
meta {
name: 466 - Invalid Sorting
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/sets/swsh8/53
body: none
auth: none
}
assert {
res.body.id: eq swsh8-53
res.status: eq 200
}
docs {
Validate the issue seen in
https://github.com/tcgdex/cards-database/issues/466
}

View File

@@ -1,15 +0,0 @@
meta {
name: 467 - Validate that we can run OPTIONS
type: http
seq: 2
}
options {
url: {{BASE_URL}}/status
body: none
auth: none
}
assert {
res.status: eq 200
}

View File

@@ -1,22 +0,0 @@
meta {
name: 471 - Invalid Set Sorting
type: http
seq: 3
}
get {
url: {{BASE_URL}}/v2/en/sets/swsh12/10
body: none
auth: none
}
assert {
res.body.id: eq swsh12-010
res.status: eq 200
}
docs {
Validate the issue seen in
https://github.com/tcgdex/cards-database/issues/471
}

View File

@@ -1,25 +0,0 @@
meta {
name: 474 - Queries crashing the server
type: http
seq: 4
}
get {
url: {{BASE_URL}}/v2/en/cards?legal.standard=true
body: none
auth: none
}
query {
legal.standard: true
}
assert {
res.status: eq 200
}
docs {
Validate the issue seen in
https://github.com/tcgdex/cards-database/issues/474
}

View File

@@ -1,25 +0,0 @@
meta {
name: 475 - Ability to query subfileds
type: http
seq: 5
}
get {
url: {{BASE_URL}}/v2/en/cards?legal.standard=true
body: none
auth: none
}
query {
legal.standard: true
}
assert {
res.status: eq 200
}
docs {
Validate the issue seen in
https://github.com/tcgdex/cards-database/issues/474
}

View File

@@ -1,17 +0,0 @@
meta {
name: 489 - Crash When sorting with Null values
type: http
seq: 6
}
get {
url: {{BASE_URL}}/v2/en/cards?name=pikachu&sort:field=hp&sort:order=DESC
body: none
auth: none
}
query {
name: pikachu
sort:field: hp
sort:order: DESC
}

View File

@@ -1,29 +0,0 @@
meta {
name: 562 - GraphQL set request is not returning the correct value
type: graphql
seq: 7
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
set(id: "{{SET_ID}}") {
id
}
}
}
vars:pre-request {
SET_ID: swsh1
}
assert {
res.status: eq 200
res.body.data.set.id: eq {{SET_ID}}
}

View File

@@ -1,15 +0,0 @@
meta {
name: 566 - Specific request crash the request
type: http
seq: 7
}
get {
url: {{BASE_URL}}/v2/fr/cards?name=eq:Pikachu&name=eq:Pichu,Pikachu
body: none
auth: none
}
assert {
res.status: eq 200
}

View File

@@ -1,21 +0,0 @@
meta {
name: 567 - invalid data returned when filtering using set
type: http
seq: 9
}
get {
url: {{BASE_URL}}/v2/en/cards?name=umbreon&set=evolving skies
body: none
auth: none
}
params:query {
name: umbreon
set: evolving skies
}
assert {
res.status: eq 200
res.body.length: gte 6
}

View File

@@ -1,28 +0,0 @@
meta {
name: card
type: graphql
seq: 2
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
card(id: "{{ID}}") {
id
}
}
}
vars:pre-request {
ID: swsh1-136
}
assert {
res.status: eq 200
res.body.data.card.id: eq {{ID}}
}

View File

@@ -1,33 +0,0 @@
meta {
name: cards
type: graphql
seq: 1
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
cards {
id
localId
name
set {
id
name
serie {
id
name
}
}
}
}
}
assert {
res.status: eq 200
}

View File

@@ -1,29 +0,0 @@
meta {
name: serie
type: graphql
seq: 5
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
serie(id: "{{ID}}") {
id
}
}
}
vars:pre-request {
ID: swsh
}
assert {
res.status: eq 200
res.body.data.serie.id: eq {{ID}}
}

View File

@@ -1,24 +0,0 @@
meta {
name: series
type: graphql
seq: 6
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
series {
id
}
}
}
assert {
res.status: eq 200
}

View File

@@ -1,29 +0,0 @@
meta {
name: set
type: graphql
seq: 3
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
set(id: "{{SET_ID}}") {
id
}
}
}
vars:pre-request {
SET_ID: swsh1
}
assert {
res.status: eq 200
res.body.data.set.id: eq {{SET_ID}}
}

View File

@@ -1,24 +0,0 @@
meta {
name: sets
type: graphql
seq: 4
}
post {
url: {{BASE_URL}}/v2/graphql
body: graphql
auth: none
}
body:graphql {
query Pouet {
sets {
id
}
}
}
assert {
res.status: eq 200
}

View File

@@ -1,20 +0,0 @@
meta {
name: Random Card
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/random/card?name=furret
body: none
auth: none
}
query {
name: furret
}
assert {
res.status: eq 200
res.body.name: contains Furret
}

View File

@@ -1,19 +0,0 @@
meta {
name: Random Serie
type: http
seq: 3
}
get {
url: {{BASE_URL}}/v2/en/random/serie?name=p
body: none
auth: none
}
query {
name: p
}
assert {
res.status: eq 200
}

View File

@@ -1,20 +0,0 @@
meta {
name: Random Set
type: http
seq: 2
}
get {
url: {{BASE_URL}}/v2/en/random/set?name=sword
body: none
auth: none
}
query {
name: sword
}
assert {
res.status: eq 200
res.body.name: contains Sword
}

View File

@@ -1,21 +0,0 @@
meta {
name: Advanced Query
type: http
seq: 4
}
get {
url: {{BASE_URL}}/v2/en/sets?cardCount.official=gt:64&id=swsh
body: none
auth: none
}
params:query {
cardCount.official:gt: 64
id: swsh
}
assert {
res.status: eq 200
res.body: length 17
}

View File

@@ -1,16 +0,0 @@
meta {
name: Get a card by set name
type: http
seq: 6
}
get {
url: {{BASE_URL}}/v2/en/sets/Crystal%20Guardians/10
body: none
auth: none
}
assert {
res.status: eq 200
res.body.id: eq ex14-10
}

View File

@@ -1,16 +0,0 @@
meta {
name: Get a set by name
type: http
seq: 5
}
get {
url: {{BASE_URL}}/v2/en/sets/Crystal%20Guardians
body: none
auth: none
}
assert {
res.status: eq 200
res.body.id: eq ex14
}

View File

@@ -1,25 +0,0 @@
meta {
name: Get a list of sets
type: http
seq: 3
}
get {
url: {{BASE_URL}}/v2/en/sets?sort:field=name&sort:order=DESC&pagination:page=1&pagination:itemsPerPage=1&name=Dark
body: none
auth: none
}
query {
sort:field: name
sort:order: DESC
pagination:page: 1
pagination:itemsPerPage: 1
name: Dark
}
assert {
res.status: eq 200
res.body[0].id: eq swsh3
res.body.length: eq 1
}

View File

@@ -1,16 +0,0 @@
meta {
name: Get a set
type: http
seq: 2
}
get {
url: {{BASE_URL}}/v2/en/sets/swsh3
body: none
auth: none
}
assert {
res.status: eq 200
res.body.id: eq swsh3
}

View File

@@ -1,16 +0,0 @@
meta {
name: Get one card from a set
type: http
seq: 1
}
get {
url: {{BASE_URL}}/v2/en/sets/swsh3/136
body: none
auth: none
}
assert {
res.status: eq 200
res.body.id: eq swsh3-136
}

View File

@@ -19,3 +19,4 @@ dist/
# production
/server/dist
/server/generated

View File

@@ -1,5 +1,5 @@
<!--
Thanks for your Pull Request, Please provide the related Issue using "Fix #0" or describe the change(s) you made.
The issue title must follow Conventional Commit conventionalcommits.org.
The issue title must follow Conventional Commit (verified by Github Actions) conventionalcommits.org.
More informations at https://github.com/tcgdex/cards-database/blob/master/CONTRIBUTING.md
-->

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

View File

@@ -1,91 +1,59 @@
name: Build Docker image
on:
push:
branches:
- '*'
tags:
- v*
pull_request:
branches:
- master
env:
REGISTRY_IMAGE: |
ghcr.io/tcgdex/server
tcgdex/server
jobs:
build:
runs-on: ubuntu-latest
name: Build TCGdex Server
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Checkout
uses: actions/checkout@v4
with:
# fetch full history for `updated` support
fetch-depth: 0
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/tcgdex/server
tcgdex/server
tags: |
type=edge
type=ref,event=pr
type=ref,event=branch,prefix=branch-
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=semver,pattern=latest
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY_IMAGE }}
tags: |
type=edge
type=ref,event=pr
type=ref,event=branch,prefix=branch-
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=semver,pattern=latest
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
- name: Login to Github Packages
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Login to Github Packages
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.DOCKER_TOKEN }}
if: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Pre build server
run: |
bun install --frozen-lockfile
cd server
bun install --frozen-lockfile
bun run compile
rm -rf node_modules
cd ..
rm -rf node_modules
- name: Build and push
id: build
uses: docker/build-push-action@v6
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./Dockerfile.github-actions
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
push: ${{ !github.event.pull_request.head.repo.fork && github.actor != 'dependabot[bot]' }}
cache-to: type=gha,mode=max
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
file: ./Dockerfile
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -0,0 +1,14 @@
name: Conventionnal Commit
on: pull_request
jobs:
conventional:
name: Conventional PR
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
- uses: beemojs/conventional-pr-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
config-preset: angular

View File

@@ -13,30 +13,20 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v3
- name: Setup BunJS
uses: oven-sh/setup-bun@v2
uses: oven-sh/setup-bun@v1
- name: Install deps
run: |
bun install -g @usebruno/cli
bun install --frozen-lockfile
cd server
bun install --frozen-lockfile
bun run compile
- name: Validate the data & the server
run: |
bun run validate
cd server
bun run validate
- name: Validate some requests
run: |
cd server
bun run start &
sleep 10
cd ../.bruno
bru run --env Developpement

1
.gitignore vendored
View File

@@ -2,4 +2,3 @@
node_modules/
dist/
.idea

View File

@@ -6,8 +6,8 @@ We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, caste, color, religion, or sexual
identity and orientation.
nationality, personal appearance, race, religion, or sexual identity
and orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
@@ -22,17 +22,17 @@ community include:
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
* Focusing on what is best not just for us as individuals, but for the
overall community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances of
any kind
* The use of sexualized language or imagery, and sexual attention or
advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Publishing others' private information, such as a physical or email
address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
@@ -52,15 +52,15 @@ decisions when appropriate.
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official email address,
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at contact@tcgdex.net or
on Discord to Avior through the official server https://discord.gg/63mQvd3GVE.
reported to the community leaders responsible for enforcement at
the `contact@tcgdex.net` email or on Discord to `Avior#3872`.
All complaints will be reviewed and investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
@@ -82,15 +82,15 @@ behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Community Impact**: A violation through a single incident or series
of actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
like social media. Violating these terms may lead to a temporary or
permanent ban.
### 3. Temporary Ban
@@ -106,27 +106,23 @@ Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
community.
**Consequence**: A permanent ban from any sort of public interaction within
the community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.1, available at
[https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1].
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
[https://www.contributor-covenant.org/faq][FAQ]. Translations are available at
[https://www.contributor-covenant.org/translations][translations].
Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).
[homepage]: https://www.contributor-covenant.org
[v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
[Mozilla CoC]: https://github.com/mozilla/diversity
[FAQ]: https://www.contributor-covenant.org/faq
[translations]: https://www.contributor-covenant.org/translations
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

View File

@@ -1,37 +1,30 @@
FROM docker.io/oven/bun:1-alpine AS build
FROM docker.io/oven/bun:1-alpine as BUILD_IMAGE
# go to work folder
WORKDIR /usr/src/app
# Add git as it is used to fetch updated times
RUN apk add git\
&& git config --global safe.directory '*'\
&& chown -R bun:bun .
USER bun
ADD --chown=bun:bun package.json bun.lockb ./
ADD --chown=bun:bun server/package.json server/bun.lockb ./server/
# install dependencies
RUN bun install --frozen-lockfile && \
cd server && \
bun install --frozen-lockfile
cd server && \
bun install --frozen-lockfile
# Add project files
ADD --chown=bun:bun . .
# build
RUN cd server && \
bun run compile
bun run compile
# remove dev dependencies (bun do not yet support "prune")
RUN cd server && \
rm -rf node_modules && \
bun install --frozen-install --production
rm -rf node_modules && \
bun install --frozen-install --production
# go to another VM
FROM docker.io/oven/bun:1-alpine AS prod
FROM docker.io/oven/bun:1-alpine as PROD_IMAGE
# inform software to be in production
ENV NODE_ENV=production
@@ -43,11 +36,11 @@ USER bun
WORKDIR /usr/src/app
# copy from build image
COPY --chown=bun:bun --from=build /usr/src/app/server/generated ./generated
COPY --chown=bun:bun --from=build /usr/src/app/server/node_modules ./node_modules
COPY --chown=bun:bun --from=build /usr/src/app/server/src ./src
COPY --chown=bun:bun --from=build /usr/src/app/server/public ./public
COPY --chown=bun:bun --from=build /usr/src/app/server/package.json ./package.json
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/generated ./generated
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/node_modules ./node_modules
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/src ./src
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/public ./public
COPY --chown=bun:bun --from=BUILD_IMAGE /usr/src/app/server/package.json ./package.json
# Expose port
EXPOSE 3000

View File

@@ -1,40 +0,0 @@
FROM docker.io/oven/bun:1-alpine AS build
# go to work folder
WORKDIR /usr/src/app
# allow bun user to edit folder
RUN chown -R bun:bun .
USER bun
ADD --chown=bun:bun server/package.json server/bun.lockb ./server/
# install prod deps dependencies
RUN cd server && \
bun install --frozen-install --production
# go to another VM
FROM docker.io/oven/bun:1-alpine AS prod
# inform software to be in production
ENV NODE_ENV=production
# run as non root user
USER bun
# go to work folder
WORKDIR /usr/src/app
# copy from build image
COPY --chown=bun:bun ./server/public ./public
COPY --chown=bun:bun ./server/package.json ./package.json
COPY --chown=bun:bun --from=build /usr/src/app/server/node_modules ./node_modules
COPY --chown=bun:bun ./server/src ./src
COPY --chown=bun:bun ./server/generated ./generated
# Expose port
EXPOSE 3000
# run it !
CMD ["bun", "src/index.ts"]

View File

@@ -13,11 +13,11 @@
<a href="https://github.com/tcgdex/cards-database/stargazers">
<img src="https://img.shields.io/github/stars/tcgdex/cards-database?style=flat-square" alt="Github stars">
</a>
<a href="https://github.com/tcgdex/cards-database/actions">
<img src="https://img.shields.io/github/actions/workflow/status/TCGdex/cards-database/build.yml?style=flat-square" alt="Compiler build passing" />
<a href="https://github.com/tcgdex/compiler">
<img src="https://img.shields.io/github/workflow/status/tcgdex/cards-database/Compile?style=flat-square" alt="Compiler build passing" />
</a>
<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
<a href="#contributors-"><img src="https://img.shields.io/badge/all_contributors-7-orange.svg?style=flat-square" alt="All Contributors Badge" /></a>
<a href="#contributors-"><img src="https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square" alt="All Contributors Badge" /></a>
<!-- ALL-CONTRIBUTORS-BADGE:END -->
</p>
@@ -27,11 +27,15 @@ A Multilanguage Pokémon TCG Database with Cards Pictures and most of the inform
## Getting Started
A full documentation of the API is available at <https://tcgdex.dev>
_If you need help for using/editing the database, [join us on Discord](https://discord.gg/NehYTAhsZE)!_
### Using the Database
_The full documentation is available at <https://www.tcgdex.dev>_
- The easiest way to interact with the database is by using one of our SDKs listed below.
- You can also direcly use the endpoints at `api.tcgdex.net` (see the documentation).
- You can build the API yourself by using our `Dockerfile` and using it on the port 3000 (`docker-compose.yml` file included above)
- You can build the API yourself by using our `Dockerfile` and using it on the port 3000
#### SDKs / API Wrappers
@@ -41,6 +45,14 @@ We currently officially support theses SDKs
- [PHP SDK](https://github.com/tcgdex/php-sdk)
- [Java SDK](https://github.com/tcgdex/java-sdk)
### Editing the Database
There is three sub folders that will allow you to edit some faces of the database
- `/data`: Contains Cards Data architectured around `SerieName/SetName/CardLocalId` folders
- `/meta`: Contains informations for the project (definitions files, Translations for some fields)
- `/server`: The server that allow to communicate with the database
## Status
We are making sure to make every cards available for every languages they were available !
@@ -50,19 +62,18 @@ We are making sure to make every cards available for every languages they were a
_want to help translating? each object fields on cards that have at least en,fr,es,de,it or pt can have the others!,_
_Also we have another translation files located at `meta/translations`_
## Sponsors 💕
## Contributing
_[Support us as a sponsor](https://github.com/sponsors/tcgdex) and have your logo featured on our GitHub README, complete with a link to your website._
See [CONTRIBUTING.md](./CONTRIBUTING.md)
<p align="center">
<a href="https://dzeio.com" target="_blank" title="Dzeio">
<img height="128" width="32%" src="./.github/sponsors/dzeio.svg" alt="TCGdex Sponsor Dzeio" />
</a>
</p>
TL::DR
- Fork
- make your changes
- pull request
<p align="center">
<!-- <a href="https://dzeio.com" target="_blank" title="Dzeio"><img height="80" width="19%" src="./.github/sponsors/dzeio.svg" alt="TCGdex Sponsor Dzeio" /></a> -->
</p>
## Deprecation
As of February 2021, the v1 API is no longer supported.
## Contributors ✨
@@ -79,8 +90,6 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Kevin-Adrea"><img src="https://avatars.githubusercontent.com/u/36231620?v=4?s=100" width="100px;" alt="Kevin-Adrea"/><br /><sub><b>Kevin-Adrea</b></sub></a><br /><a href="https://github.com/tcgdex/cards-database/issues?q=author%3AKevin-Adrea" title="Bug reports">🐛</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Maxopoly"><img src="https://avatars.githubusercontent.com/u/12138136?v=4?s=100" width="100px;" alt="Maxopoly"/><br /><sub><b>Maxopoly</b></sub></a><br /><a href="#data-Maxopoly" title="Data">🔣</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/calli23"><img src="https://avatars.githubusercontent.com/u/24553863?v=4?s=100" width="100px;" alt="calli23"/><br /><sub><b>calli23</b></sub></a><br /><a href="#data-calli23" title="Data">🔣</a></td>
<td align="center" valign="top" width="14.28%"><a href="http://imclement.com"><img src="https://avatars.githubusercontent.com/u/1112701?v=4?s=100" width="100px;" alt="Clement Yuan"/><br /><sub><b>Clement Yuan</b></sub></a><br /><a href="#data-spyworldxp" title="Data">🔣</a></td>
<td align="center" valign="top" width="14.28%"><a href="https://github.com/Reloadaxe"><img src="https://avatars.githubusercontent.com/u/44167126?v=4?s=100" width="100px;" alt="Benjamin Rousseliere"/><br /><sub><b>Benjamin Rousseliere</b></sub></a><br /><a href="#data-Reloadaxe" title="Data">🔣</a></td>
</tr>
</tbody>
</table>
@@ -92,10 +101,6 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
## Deprecation
As of February 2021, the v1 API is no longer supported.
## Licenses
This database is not produced, endorsed, supported or affiliated with Nintendo or The Pokémon Company

BIN
bun.lockb Executable file → Normal file

Binary file not shown.

View File

@@ -1,10 +0,0 @@
import { Serie } from '../interfaces'
const serie: Serie = {
name: {
ja: 'ADV'
},
id: 'ADV'
}
export default serie

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../ADV'
const set: Set = {
id: 'ADV1',
name: {
ja: '拡張パック'
},
serie: serie,
cardCount: {
official: 55
},
releaseDate: '2003-01-31'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../ADV'
const set: Set = {
id: 'ADV2',
name: {
ja: '砂漠のきせき'
},
serie: serie,
cardCount: {
official: 53
},
releaseDate: '2003-04-18'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../ADV'
const set: Set = {
id: 'ADV3',
name: {
ja: '天空の覇者'
},
serie: serie,
cardCount: {
official: 54
},
releaseDate: '2003-06-25'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../ADV'
const set: Set = {
id: 'ADV4',
name: {
ja: '強化拡張パックex1マグマVSアクア ふたつの野望'
},
serie: serie,
cardCount: {
official: 80
},
releaseDate: '2003-10-24'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../ADV'
const set: Set = {
id: 'ADV5',
name: {
ja: 'とかれた封印'
},
serie: serie,
cardCount: {
official: 83
},
releaseDate: '2004-01-16'
}
export default set

View File

@@ -1,8 +0,0 @@
import { Serie } from '../interfaces'
const serie: Serie = {
name: {},
id: 'null'
}
export default serie

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW1a',
name: {
ja: 'ブラックコレクション',
ko: '블랙 컬렉션'
},
serie: serie,
cardCount: {
official: 53
},
releaseDate: '2010-12-17'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW1b',
name: {
ja: 'ホワイトコレクション',
ko: '화이트 컬렉션'
},
serie: serie,
cardCount: {
official: 53
},
releaseDate: '2010-12-17'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW2',
name: {
ja: 'レッドコレクション',
ko: '레드 컬렉션'
},
serie: serie,
cardCount: {
official: 66
},
releaseDate: '2011-07-15'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW3a',
name: {
ja: 'サイコドライブ',
ko: '사이코 드라이브'
},
serie: serie,
cardCount: {
official: 52
},
releaseDate: '2011-09-16'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW3a',
name: {
ja: 'ヘイルブリザード',
ko: '헤일 블리자드'
},
serie: serie,
cardCount: {
official: 52
},
releaseDate: '2011-09-16'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW4',
name: {
ja: 'ダークラッシュ',
ko: '다크러시'
},
serie: serie,
cardCount: {
official: 69
},
releaseDate: '2011-12-16'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW5a',
name: {
ja: 'リューズブラスト',
ko: '드래곤 블라스트'
},
serie: serie,
cardCount: {
official: 50
},
releaseDate: '2012-03-16'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW5b',
name: {
ja: 'リューノブレード',
ko: '드래곤 블레이드'
},
serie: serie,
cardCount: {
official: 50
},
releaseDate: '2012-03-16'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW6a',
name: {
ja: 'フリーズボルト',
ko: '프리즈볼트'
},
serie: serie,
cardCount: {
official: 59
},
releaseDate: '2012-07-13'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW6b',
name: {
ja: 'コールドフレア',
ko: '콜드플레어'
},
serie: serie,
cardCount: {
official: 59
},
releaseDate: '2012-07-13'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW7',
name: {
ja: 'プラズマゲイル',
ko: '플라스마게일'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2012-09-14'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW8a',
name: {
ja: 'ラセンフォース',
ko: '스파이럴포스'
},
serie: serie,
cardCount: {
official: 51
},
releaseDate: '2012-12-14'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW8a',
name: {
ja: 'ライデンナックル',
ko: '볼트너클'
},
serie: serie,
cardCount: {
official: 51
},
releaseDate: '2012-12-14'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'BW9',
name: {
ja: 'メガロキャノン',
ko: '메갈로캐논'
},
serie: serie,
cardCount: {
official: 76
},
releaseDate: '2013-03-15'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'DS',
name: {
ja: 'ドラゴンセレクション',
ko: '드래곤 컬렉션'
},
serie: serie,
cardCount: {
official: 20
},
releaseDate: '2012-01-27'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'EBB',
name: {
ja: 'EXバトルブースト',
ko: 'EX 배틀 부스트'
},
serie: serie,
cardCount: {
official: 96
},
releaseDate: '2013-07-13'
}
export default set

View File

@@ -1,19 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../BW'
const set: Set = {
id: 'SC',
name: {
ja: 'シャイニーコレクション',
ko: '샤이니 컬렉션'
},
serie: serie,
cardCount: {
official: 20
},
releaseDate: '2013-02-01'
}
export default set

View File

@@ -1,8 +0,0 @@
import { Serie } from '../interfaces'
const serie: Serie = {
name: {},
id: 'null'
}
export default serie

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP1a',
name: {
ja: '時空の創造: ダイヤモンドコレクション'
},
serie: serie,
cardCount: {
official: 117
},
releaseDate: '2006-11-30'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP1b',
name: {
ja: '時空の創造: パールコレクション'
},
serie: serie,
cardCount: {
official: 119
},
releaseDate: '2006-11-30'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP2',
name: {
ja: '湖の秘密'
},
serie: serie,
cardCount: {
official: 123
},
releaseDate: '2007-03-02'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP3',
name: {
ja: 'ひかる闇'
},
serie: serie,
cardCount: {
official: 119
},
releaseDate: '2007-07-05'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP4a',
name: {
ja: '月光の追跡'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2007-10-26'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP4b',
name: {
ja: '夜明けの疾走'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2007-10-26'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP5a',
name: {
ja: '秘境の叫び'
},
serie: serie,
cardCount: {
official: 65
},
releaseDate: '2008-03-14'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP5b',
name: {
ja: '怒りの神殿'
},
serie: serie,
cardCount: {
official: 65
},
releaseDate: '2008-03-14'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'DP6',
name: {
ja: '破空の激闘'
},
serie: serie,
cardCount: {
official: 92
},
releaseDate: '2008-07-10'
}
export default set

View File

@@ -1,8 +0,0 @@
import { Serie } from '../interfaces'
const serie: Serie = {
name: {},
id: 'null'
}
export default serie

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'Pt1',
name: {
ja: 'ギンガの覇道'
},
serie: serie,
cardCount: {
official: 96
},
releaseDate: '2008-10-10'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'Pt2',
name: {
ja: '時の果ての絆'
},
serie: serie,
cardCount: {
official: 90
},
releaseDate: '2008-12-26'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'Pt3',
name: {
ja: 'フロンティアの鼓動'
},
serie: serie,
cardCount: {
official: 100
},
releaseDate: '2009-03-06'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../DPt'
const set: Set = {
id: 'Pt4',
name: {
ja: 'アルセウス光臨'
},
serie: serie,
cardCount: {
official: 90
},
releaseDate: '2009-07-08'
}
export default set

View File

@@ -1,10 +0,0 @@
import { Serie } from '../interfaces'
const serie: Serie = {
name: {
ja: 'LEGEND'
},
id: 'L'
}
export default serie

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../L'
const set: Set = {
id: 'L1a',
name: {
ja: 'ハートゴールドコレクション'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2009-10-09'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../L'
const set: Set = {
id: 'L1b',
name: {
ja: 'ソウルシルバーコレクション'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2009-10-09'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../L'
const set: Set = {
id: 'L2',
name: {
ja: 'よみがえる伝説'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2010-02-11'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../L'
const set: Set = {
id: 'L3',
name: {
ja: '頂上大激突'
},
serie: serie,
cardCount: {
official: 70
},
releaseDate: '2010-07-08'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../L'
const set: Set = {
id: 'LL',
name: {
ja: '強化パック ロストリンク'
},
serie: serie,
cardCount: {
official: 40
},
releaseDate: '2010-04-16'
}
export default set

View File

@@ -1,10 +0,0 @@
import { Serie } from '../interfaces'
const serie: Serie = {
name: {
ja: 'PCG'
},
id: 'PCG'
}
export default serie

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../PCG'
const set: Set = {
id: 'PCG1',
name: {
ja: '伝説の飛翔'
},
serie: serie,
cardCount: {
official: 82
},
releaseDate: '2004-04-09'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../PCG'
const set: Set = {
id: 'PCG10',
name: {
ja: 'ワールドチャンピオンズパック'
},
serie: serie,
cardCount: {
official: 108
},
releaseDate: '2007-07-05'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../PCG'
const set: Set = {
id: 'PCG2',
name: {
ja: '蒼空の激突'
},
serie: serie,
cardCount: {
official: 82
},
releaseDate: '2004-07-01'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../PCG'
const set: Set = {
id: 'PCG3',
name: {
ja: 'ロケット団の逆襲'
},
serie: serie,
cardCount: {
official: 84
},
releaseDate: '2004-10-15'
}
export default set

View File

@@ -1,18 +0,0 @@
import { Set } from '../../interfaces'
import serie from '../PCG'
const set: Set = {
id: 'PCG4',
name: {
ja: '金の空、銀の海'
},
serie: serie,
cardCount: {
official: 106
},
releaseDate: '2005-04-08'
}
export default set

Some files were not shown because too many files have changed in this diff Show More