2024-12-05 16:08:50 +00:00
|
|
|
import { PrismaClient } from '@prisma/client'
|
|
|
|
import { writeFileSync } from 'fs'
|
|
|
|
|
|
|
|
const db = new PrismaClient()
|
|
|
|
|
|
|
|
const color_names = {
|
2025-01-27 11:40:17 +00:00
|
|
|
"white": ["W"],
|
|
|
|
"black": ["B"],
|
|
|
|
"blue": ["U"],
|
|
|
|
"green": ["G"],
|
|
|
|
"red": ["R"],
|
2024-12-05 16:08:50 +00:00
|
|
|
"colorless": [],
|
|
|
|
"azorius": ["W","U"],
|
|
|
|
"dimir": ["U","B"],
|
|
|
|
"rakdos": ["B","R"],
|
|
|
|
"gruul": ["R","G"],
|
|
|
|
"selesnya": ["G","W"],
|
|
|
|
"orzhov": ["W","B"],
|
|
|
|
"izzet": ["U","R"],
|
|
|
|
"golgari": ["B","G"],
|
|
|
|
"boros": ["R","W"],
|
|
|
|
"simic": ["G","U"],
|
|
|
|
"esper": ["W","U","B"],
|
|
|
|
"grixis": ["U","B","R"],
|
|
|
|
"jund": ["B","R","G"],
|
|
|
|
"naya": ["R","G","W"],
|
|
|
|
"bant": ["G","W","U"],
|
|
|
|
"abzan": ["W","B","G"],
|
|
|
|
"jeskai": ["U","R","W"],
|
|
|
|
"sultai": ["B","G","U"],
|
|
|
|
"mardu": ["R","W","B"],
|
|
|
|
"temur": ["G","U","R"],
|
|
|
|
"yore-tiller": ["W","U","B","R"],
|
|
|
|
"glint-eye": ["U","B","R","G"],
|
|
|
|
"dune-brood": ["B","R","G","W"],
|
|
|
|
"ink-treader": ["R","G","W","U"],
|
|
|
|
"witch-maw": ["G","W","U","B"],
|
|
|
|
"five-color": ["G","W","U","B","R"],
|
|
|
|
}
|
|
|
|
|
|
|
|
function getColorName(colorArray) {
|
|
|
|
const colorArrayID = colorArray.sort().join(',')
|
|
|
|
for (const colorName of Object.keys(color_names)) {
|
|
|
|
if(colorArrayID === color_names[colorName].sort().join(',')){
|
|
|
|
return(colorName)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return ""
|
|
|
|
}
|
|
|
|
|
|
|
|
// I need to create
|
2025-01-27 11:40:17 +00:00
|
|
|
//
|
|
|
|
// Commanders
|
|
|
|
// top all
|
|
|
|
// top by colors
|
|
|
|
//
|
|
|
|
// bsets
|
|
|
|
// Commanders
|
|
|
|
//
|
|
|
|
//
|
2024-12-05 16:08:50 +00:00
|
|
|
// Lands
|
|
|
|
// lands.json
|
|
|
|
// All jsons lands from colors
|
|
|
|
// Types
|
|
|
|
|
|
|
|
async function createJson() {
|
|
|
|
console.log("Fetching data...")
|
|
|
|
const bsets = await db.bset.findMany({
|
|
|
|
relationLoadStrategy: "join",
|
|
|
|
include: {
|
|
|
|
sets: {
|
|
|
|
include: {
|
2024-12-27 15:41:39 +00:00
|
|
|
cards: {
|
|
|
|
include: {
|
2025-01-27 11:40:17 +00:00
|
|
|
decks: true,
|
|
|
|
decks_as_commander: true,
|
2024-12-27 15:41:39 +00:00
|
|
|
}
|
|
|
|
}
|
2024-12-05 16:08:50 +00:00
|
|
|
}
|
2024-12-27 15:41:39 +00:00
|
|
|
},
|
2025-01-27 11:40:17 +00:00
|
|
|
decks: {
|
|
|
|
include: {
|
|
|
|
commander: {
|
|
|
|
include: {
|
|
|
|
decks_as_commander: true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-12-05 16:08:50 +00:00
|
|
|
}
|
|
|
|
})
|
|
|
|
|
2024-12-27 15:41:39 +00:00
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
let bsets_list_export = []
|
2024-12-05 16:08:50 +00:00
|
|
|
let all_cards = []
|
2025-01-27 11:40:17 +00:00
|
|
|
const commanderData = {"top": []}
|
|
|
|
for (const colorName of Object.keys(color_names)) {
|
|
|
|
commanderData[colorName] = []
|
|
|
|
}
|
|
|
|
let bset_cards_data_export = {}
|
|
|
|
|
2024-12-05 16:08:50 +00:00
|
|
|
bsets.forEach((bset) => {
|
2024-12-27 15:41:39 +00:00
|
|
|
let icons = []
|
|
|
|
let set_codes = []
|
2025-01-27 11:40:17 +00:00
|
|
|
let bset_cards = []
|
|
|
|
|
2024-12-05 16:08:50 +00:00
|
|
|
bset.sets.forEach((set) => {
|
2024-12-27 15:41:39 +00:00
|
|
|
icons.push(set.icon_svg_uri)
|
|
|
|
set_codes.push(set.code)
|
|
|
|
let cards_temp = set.cards
|
|
|
|
for(let i = 0; i < cards_temp.length; i++){
|
|
|
|
cards_temp[i].bset_id = bset.id
|
|
|
|
}
|
2025-01-27 11:40:17 +00:00
|
|
|
bset_cards = [...bset_cards, ...cards_temp]
|
2024-12-27 15:41:39 +00:00
|
|
|
all_cards = [...all_cards, ...cards_temp]
|
2024-12-05 16:08:50 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
bsets_list_export.push({name: bset.name, sanitized_name: bset.sanitized_name, icons, set_codes})
|
|
|
|
|
|
|
|
// BSETS CARDS STATS
|
|
|
|
bset_cards_data_export[bset.sanitized_name] = {
|
|
|
|
"commander": [],
|
|
|
|
"creature": [],
|
|
|
|
"land": [],
|
|
|
|
"enchantment": [],
|
|
|
|
"sorcery": [],
|
|
|
|
"instant": [],
|
|
|
|
"planeswalker": [],
|
|
|
|
"artifact": [],
|
2024-12-27 15:41:39 +00:00
|
|
|
}
|
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
for (const card of bset_cards) {
|
|
|
|
let card_object = {
|
|
|
|
"name": card.name,
|
|
|
|
"sanitized_name": card.sanitized_name,
|
|
|
|
"normal_image": card.normal_image,
|
|
|
|
"small_image": card.small_image,
|
|
|
|
"type": card.type,
|
|
|
|
"layout": card.layout,
|
|
|
|
"price": card.price,
|
|
|
|
"cardmarket_uri": card.cardmarket_uri,
|
|
|
|
"nbr_decks": card.decks.length,
|
|
|
|
"total_decks": bset.decks.filter((deck) => card.color_identity.every(color => deck.color_identity.includes(color))).length,
|
|
|
|
"color_identity": card.color_identity,
|
|
|
|
}
|
|
|
|
|
|
|
|
card_object.percent_decks = (card_object.total_decks != 0) ? parseInt(10000 * (card_object.nbr_decks / card_object.total_decks)) / 100 : 0
|
2024-12-27 15:41:39 +00:00
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
bset_cards_data_export[bset.sanitized_name][card.type].push(card_object)
|
|
|
|
|
|
|
|
if(card.can_be_commander) {
|
|
|
|
card_object.total_decks = bset.decks.length
|
|
|
|
card_object.nbr_decks = card.decks_as_commander != undefined ? card.decks_as_commander.length : 0
|
|
|
|
card_object.percent_decks = (card_object.total_decks != 0) ? parseInt(10000 * (card_object.nbr_decks / card_object.total_decks)) / 100 : 0
|
|
|
|
bset_cards_data_export[bset.sanitized_name]["commander"].push(card_object)
|
|
|
|
|
|
|
|
const colorName = getColorName(card.color_identity)
|
|
|
|
|
|
|
|
if(colorName != "") {
|
|
|
|
commanderData[colorName].push(card_object)
|
|
|
|
commanderData["top"].push(card_object)
|
|
|
|
}
|
2024-12-05 16:08:50 +00:00
|
|
|
}
|
|
|
|
}
|
2025-01-27 11:40:17 +00:00
|
|
|
})
|
2024-12-05 16:08:50 +00:00
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
writeFileSync(import.meta.dirname + "/json/misc/bsets.json",JSON.stringify(bsets_list_export), 'utf8')
|
2024-12-05 16:08:50 +00:00
|
|
|
|
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
//for (const card of all_cards) {
|
|
|
|
//}
|
|
|
|
|
|
|
|
for (const index of Object.keys(commanderData)) {
|
|
|
|
let JSONToWrite = commanderData[index].sort((a,b) => b.percent_decks - a.percent_decks)
|
|
|
|
writeFileSync(import.meta.dirname + "/json/commander/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
2024-12-05 16:08:50 +00:00
|
|
|
}
|
|
|
|
|
2025-01-27 11:40:17 +00:00
|
|
|
for (const index of Object.keys(bset_cards_data_export)) {
|
|
|
|
let JSONToWrite = bset_cards_data_export[index]
|
|
|
|
for (const type of Object.keys(JSONToWrite)) {
|
|
|
|
JSONToWrite[type] = JSONToWrite[type].sort((a,b) => b.percent_decks - a.percent_decks)
|
2024-12-05 16:08:50 +00:00
|
|
|
}
|
2025-01-27 11:40:17 +00:00
|
|
|
writeFileSync(import.meta.dirname + "/json/bset/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
2024-12-05 16:08:50 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
createJson()
|