import 'dotenv/config' import fs from 'fs' import pg from 'pg' const { Client } = pg // Read the data from the exported fr_cards.json extracted from Scryfall Bulk Data const fileBytes = fs.readFileSync(import.meta.dirname + '/data/fr_cards.json') let scryfallData = JSON.parse(fileBytes) // Connect to postgres database const client = new Client({ user: process.env.DATABASE_USER, password: process.env.DATABASE_PASSWORD, host: process.env.DATABASE_HOST, port: process.env.DATABASE_PORT, database: process.env.DATABASE_DB }) await client.connect() try { // Select already imported cards in database const res = await client.query('SELECT scryfall_id FROM carte') const preUpdateRows = res.rows let preUpdateIds = [] preUpdateRows.forEach(element => { preUpdateIds.push(element.scryfall_id) }); // Define counter for logging let total_no_fr_name = 0 let total_inserted = 0 let total_skipped = 0 // For each card check if we need to upload it to the database for (const carte of scryfallData) { if(!preUpdateIds.includes(carte.id)){ if(carte.printed_name == undefined) { // If the card doesn't have a french name, print it to the console and skip //console.log("Erreur sur la carte : " + carte.name) //console.log("Scryfall URI : " + carte.scryfall_uri) //console.log("API URI : " + carte.uri) total_no_fr_name = total_no_fr_name + 1 continue } // Add the card to the database const addingQuery = await client.query('INSERT INTO carte(id, scryfall_id, name_en, name_fr, released_at, small_image, normal_image, mana_cost, cmc, type_line_en, type_line_fr, oracle_text_en, oracle_text_fr, power, toughness, colors, keywords, set, set_name_en, set_type, rarity, cardmarket_uri) VALUES(gen_random_uuid(), $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21)', [carte.id, carte.name, carte.printed_name, carte.released_at, carte.image_uris.small, carte.image_uris.normal, carte.mana_cost, carte.cmc, carte.type_line, carte.printed_type_line, carte.oracle_text, carte.printed_text, carte.power, carte.toughness, carte.colors, carte.keywords, carte.set, carte.set_name, carte.set_type, carte.rarity, carte.purchase_uris?.cardmarket]) total_inserted = total_inserted + 1 } else { total_skipped = total_skipped + 1 } } console.log("Un total de " + total_no_fr_name + " cartes n'ont pas de nom français.") console.log("Un total de " + total_inserted + " cartes ont été insérées.") console.log("Un total de " + total_skipped + " cartes ont été ignorées.") } catch (err) { console.error(err); } finally { await client.end() }