From 239b18bcd3d2f9aef7c4878dddc416daceac4b0f Mon Sep 17 00:00:00 2001 From: CptSpaceToaster Date: Sun, 21 Feb 2021 01:09:46 -0500 Subject: [PATCH 1/2] Initial update to v2 data structures --- src/classes/card.ts | 21 ++++++++++++--------- src/classes/meta.ts | 4 ++++ src/classes/set.ts | 18 +++++++++--------- src/interfaces/attack.ts | 2 +- src/interfaces/card.ts | 24 ++++++++++++++---------- src/interfaces/image.ts | 9 +++++++++ src/interfaces/legality.ts | 10 ++++++++++ src/interfaces/set.ts | 19 ++++++++++--------- src/interfaces/tcgplayer.ts | 17 +++++++++++++++++ src/queryBuilder.ts | 2 +- src/sdk.ts | 2 +- 11 files changed, 88 insertions(+), 40 deletions(-) create mode 100644 src/interfaces/image.ts create mode 100644 src/interfaces/legality.ts create mode 100644 src/interfaces/tcgplayer.ts diff --git a/src/classes/card.ts b/src/classes/card.ts index dcc9629..440f12a 100644 --- a/src/classes/card.ts +++ b/src/classes/card.ts @@ -2,13 +2,17 @@ import { IAbility } from '../interfaces/ability'; import { IAncientTrait } from '../interfaces/ancientTrait'; import { IAttack } from '../interfaces/attack'; import { ICard } from '../interfaces/card'; +import { ICardImage } from '../interfaces/image'; +import { ILegality } from '../interfaces/legality'; import { IQuery } from '../interfaces/query'; import { IResistance } from '../interfaces/resistance'; +import { ISet } from '../interfaces/set'; +import { ITCGPlayer } from '../interfaces/tcgplayer'; import { IWeakness } from '../interfaces/weakness'; import { QueryBuilder } from '../queryBuilder'; export class Card implements ICard { - ability: IAbility; + abilities: IAbility[]; artist: string; ancientTrait?: IAncientTrait; attacks: IAttack[]; @@ -16,20 +20,19 @@ export class Card implements ICard { evolvesFrom: string; hp: string; id: string; - imageUrl: string; - imageUrlHiRes: string; + images: ICardImage; + legalities: ILegality; name: string; - nationalPokedexNumber: number; + nationalPokedexNumbers: number[]; number: string; rarity: string; resistances: IResistance[]; retreatCost: string[]; - series: string; - set: string; - setCode: string; - subtype: string; + rules: string[]; + set: ISet; + subtypes: string[]; supertype: string; - text: string[]; + tcgplayer: ITCGPlayer | undefined; types: string[]; weaknesses: IWeakness[]; diff --git a/src/classes/meta.ts b/src/classes/meta.ts index dd96f68..5450b16 100644 --- a/src/classes/meta.ts +++ b/src/classes/meta.ts @@ -12,4 +12,8 @@ export class Meta { static async allSupertypes(): Promise { return Client.get('supertypes'); } + + static allRarities(): Promise { + return Client.get('rarities'); + } } \ No newline at end of file diff --git a/src/classes/set.ts b/src/classes/set.ts index c492c03..bde2361 100644 --- a/src/classes/set.ts +++ b/src/classes/set.ts @@ -1,20 +1,20 @@ import { ISet } from '../interfaces/set'; import { IQuery } from '../interfaces/query'; import { QueryBuilder } from '../queryBuilder'; +import { ILegality } from '../interfaces/legality'; +import { ISetImage } from '../interfaces/image'; export class Set implements ISet { - code: string; - expandedLegal: boolean; - logoUrl: string; - name: string; + id: string; + images: ISetImage; + legalities: ILegality; + name: string; + printedTotal: number; ptcgoCode: string; releaseDate: string; - series: string; - standardLegal: boolean; - symbolUrl: string; - totalCards: number; + series: string; + total: number; updatedAt: string; - updatedSince: string; resource(): string { return 'sets'; diff --git a/src/interfaces/attack.ts b/src/interfaces/attack.ts index 0d303ad..81a804e 100644 --- a/src/interfaces/attack.ts +++ b/src/interfaces/attack.ts @@ -1,5 +1,5 @@ export interface IAttack { - convertedEnergyCost: string; + convertedEnergyCost: number; cost: string[]; damage: string; name: string; diff --git a/src/interfaces/card.ts b/src/interfaces/card.ts index 8884f76..f36d4da 100644 --- a/src/interfaces/card.ts +++ b/src/interfaces/card.ts @@ -3,30 +3,34 @@ import { IAncientTrait } from './ancientTrait'; import { IAttack } from '../interfaces/attack'; import { IResistance } from '../interfaces/resistance'; import { IWeakness } from '../interfaces/weakness'; +import { ICardImage } from './image'; +import { ILegality } from './legality'; +import { ISet } from './set'; +import { ITCGPlayer } from './tcgplayer'; export interface ICard { - ability: IAbility; - ancientTrait?: IAncientTrait; + abilities: IAbility[]; artist: string; + ancientTrait?: IAncientTrait; attacks: IAttack[]; convertedRetreatCost: number; evolvesFrom: string; + flavorText: string; hp: string; id: string; - imageUrl: string; - imageUrlHiRes: string; + images: ICardImage; + legalities: ILegality; name: string; - nationalPokedexNumber: number; + nationalPokedexNumbers: number[]; number: string; rarity: string; resistances: IResistance[]; retreatCost: string[]; - series: string; - set: string; - setCode: string; - subtype: string; + rules: string[]; + set: ISet; + subtypes: string[]; supertype: string; - text: string[]; + tcgplayer: ITCGPlayer | undefined; types: string[]; weaknesses: IWeakness[]; } \ No newline at end of file diff --git a/src/interfaces/image.ts b/src/interfaces/image.ts new file mode 100644 index 0000000..b1751a2 --- /dev/null +++ b/src/interfaces/image.ts @@ -0,0 +1,9 @@ +export interface ISetImage { + symbol: string; + logo: string; +} + +export interface ICardImage { + small: string; + large: string; +} \ No newline at end of file diff --git a/src/interfaces/legality.ts b/src/interfaces/legality.ts new file mode 100644 index 0000000..fdc4915 --- /dev/null +++ b/src/interfaces/legality.ts @@ -0,0 +1,10 @@ +export enum Legality { + LEGAL = 'Legal', + BANNED = 'Banned', +} + +export interface ILegality { + expanded: Legality | undefined + standard: Legality | undefined + unlimited: Legality | undefined +} \ No newline at end of file diff --git a/src/interfaces/set.ts b/src/interfaces/set.ts index 0d87fb2..dae5b42 100644 --- a/src/interfaces/set.ts +++ b/src/interfaces/set.ts @@ -1,14 +1,15 @@ +import { ISetImage } from "./image"; +import { ILegality } from "./legality"; + export interface ISet { - code: string; - expandedLegal: boolean; - logoUrl: string; - name: string; + id: string; + images: ISetImage; + legalities: ILegality; + name: string; + printedTotal: number; ptcgoCode: string; releaseDate: string; - series: string; - standardLegal: boolean; - symbolUrl: string; - totalCards: number; + series: string; + total: number; updatedAt: string; - updatedSince: string; } \ No newline at end of file diff --git a/src/interfaces/tcgplayer.ts b/src/interfaces/tcgplayer.ts new file mode 100644 index 0000000..ef4f586 --- /dev/null +++ b/src/interfaces/tcgplayer.ts @@ -0,0 +1,17 @@ +export interface ITCGPlayer { + url: string; + updatedAt: string; + prices: { + normal: IPrice | undefined; + holofoil: IPrice | undefined; + reverseHolofoil: IPrice | undefined; + } +} + +export interface IPrice { + low: number | null + mid: number | null + high: number | null + market: number | null + directLow: number | null +} \ No newline at end of file diff --git a/src/queryBuilder.ts b/src/queryBuilder.ts index 8994be6..6f2dc45 100644 --- a/src/queryBuilder.ts +++ b/src/queryBuilder.ts @@ -8,7 +8,7 @@ export class QueryBuilder { const t = new type(); const params: IQuery[] = [{ name: 'pageSize', - value: 1000 + value: 250, }]; return Client.get(t.resource(), params); diff --git a/src/sdk.ts b/src/sdk.ts index 24df52b..4c616ee 100644 --- a/src/sdk.ts +++ b/src/sdk.ts @@ -1,6 +1,6 @@ // Constants export const API_URL: string = 'https://api.pokemontcg.io'; -export const API_VERSION: string = '1'; +export const API_VERSION: string = '2'; // Classes export * from './classes/card'; From 74055255e386c71f0101b5150baf6155d54bd519 Mon Sep 17 00:00:00 2001 From: CptSpaceToaster Date: Sun, 21 Feb 2021 01:21:18 -0500 Subject: [PATCH 2/2] Fix tests --- coverage/client.test.ts | 6 +++--- coverage/queryBuilder.test.ts | 13 ++++--------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/coverage/client.test.ts b/coverage/client.test.ts index 6cf4d36..a4abc4c 100644 --- a/coverage/client.test.ts +++ b/coverage/client.test.ts @@ -13,7 +13,7 @@ describe('Client', () => { Client.get('cards', params) .then(response => { expect(response).to.be.a('array'); - expect(response[0].name).to.equal('Gardevoir'); + expect(response[0].name).to.equal('Ampharos'); }); }); @@ -21,7 +21,7 @@ describe('Client', () => { Client.get('cards') .then(response => { expect(response).to.be.a('array'); - expect(response.length).to.equal(100); + expect(response.length).to.equal(250); }); }); @@ -56,7 +56,7 @@ describe('Client', () => { .then(response => { expect(response).to.be.a('array'); expect(response[0]).to.be.a('object'); - expect(response[0].code).to.equal('base1'); + expect(response[0].id).to.equal('base1'); }); }); diff --git a/coverage/queryBuilder.test.ts b/coverage/queryBuilder.test.ts index 45529eb..76373ac 100644 --- a/coverage/queryBuilder.test.ts +++ b/coverage/queryBuilder.test.ts @@ -16,13 +16,8 @@ describe('QueryBuilder', () => { it('should use where to filter data', () => { const params: IQuery[] = [ { - name: 'name', - value: 'Charizard' - - }, - { - name: 'setCode', - value: 'base1' + name: 'q', + value: 'name:Charizard set.id:base1' } ]; @@ -30,14 +25,14 @@ describe('QueryBuilder', () => { .then(cards => { expect(cards.length).to.equal(1); expect(cards[0].id).to.equal('base1-4'); - expect(cards[0].set).to.equal('Base'); + expect(cards[0].set.name).to.equal('Base'); }); }); it('should use all to get all cards', () => { QueryBuilder.all(Card) .then(cards => { - expect(cards.length).to.equal(1000); + expect(cards.length).to.equal(250); }); }); }); \ No newline at end of file