122 lines
3.4 KiB
JavaScript
122 lines
3.4 KiB
JavaScript
import { PrismaClient } from '@prisma/client'
|
|
import { writeFileSync } from 'fs'
|
|
|
|
const db = new PrismaClient()
|
|
|
|
const color_names = {
|
|
"mono-white": ["W"],
|
|
"mono-black": ["B"],
|
|
"mono-blue": ["U"],
|
|
"mono-green": ["G"],
|
|
"mono-red": ["R"],
|
|
"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
|
|
// 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: {
|
|
cards: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
let all_cards = []
|
|
bsets.forEach((bset) => {
|
|
bset.sets.forEach((set) => {
|
|
all_cards = [...all_cards, ...set.cards]
|
|
})
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
const landsData = {}
|
|
for (const colorName of Object.keys(color_names)) {
|
|
landsData[colorName] = []
|
|
}
|
|
const type_dict = {"creature": [],"land": [],"instant": [],"sorcery": [], "planeswalker": [], "artifact": [], "enchantment": []}
|
|
const colorsData = {"mono-white": structuredClone(type_dict),"mono-black": structuredClone(type_dict),"mono-blue": structuredClone(type_dict),"mono-green": structuredClone(type_dict),"mono-red": structuredClone(type_dict),"colorless": structuredClone(type_dict),"multicolor": structuredClone(type_dict)}
|
|
|
|
for (const card of all_cards) {
|
|
const colorName = getColorName(card.colors)
|
|
if (card.type == "land") {
|
|
if (colorName != "") {
|
|
landsData[colorName].push(card)
|
|
}
|
|
}
|
|
|
|
if (card.colors.length <= 1) {
|
|
colorsData[colorName][card.type].push(card)
|
|
} else {
|
|
colorsData["multicolor"][card.type].push(card)
|
|
}
|
|
}
|
|
|
|
|
|
for (const index of Object.keys(colorsData)) {
|
|
writeFileSync(import.meta.dirname + "/json/top/" + index + ".json",JSON.stringify(colorsData[index]), 'utf8')
|
|
}
|
|
|
|
const landsJsonRoot = [[],[],[],[]]
|
|
for (const colorName of Object.keys(color_names)){
|
|
if(color_names[colorName].length <= 3){
|
|
let index = color_names[colorName].length - 1
|
|
if(index < 0) { index = 0 }
|
|
landsJsonRoot[index].push({ "name": colorName, "count": landsData[colorName].length})
|
|
} else {
|
|
landsJsonRoot[3].push({ "name": colorName, "count": landsData[colorName].length})
|
|
}
|
|
writeFileSync(import.meta.dirname + "/json/lands/" + colorName + ".json",JSON.stringify(landsData[colorName]), 'utf8')
|
|
}
|
|
writeFileSync(import.meta.dirname + "/json/lands/lands.json",JSON.stringify(landsJsonRoot), 'utf8')
|
|
}
|
|
|
|
createJson()
|