diff --git a/package-lock.json b/package-lock.json index 13473005a..6f61c4415 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,6 +55,7 @@ "stylelint-config-standard": "^24.0.0", "stylelint-order": "^5.0.0", "ts-node": "^10.4.0", + "tsconfig-paths": "^3.12.0", "tsm": "^2.2.1", "typescript": "^4.5.4", "uvu": "^0.5.2" @@ -665,6 +666,12 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "node_modules/@types/keyv": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", @@ -7581,6 +7588,15 @@ "node": ">=8" } }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -8112,6 +8128,30 @@ "node": ">=0.3.1" } }, + "node_modules/tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -9653,6 +9693,12 @@ "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", "dev": true }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "dev": true + }, "@types/keyv": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", @@ -14684,6 +14730,12 @@ "ansi-regex": "^5.0.1" } }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -15079,6 +15131,29 @@ } } }, + "tsconfig-paths": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", + "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", diff --git a/package.json b/package.json index 8686683a1..0660c17f8 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "scripts": { "build": "remix build", "dev:remix": "remix watch", - "dev:server": "cross-env NODE_ENV=development node --experimental-specifier-resolution=node --loader ts-node/esm server/index.ts", + "dev:server": "cross-env NODE_ENV=development node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register server/index.ts", "dev": "concurrently \"npm run dev:remix\" \"npm run dev:server\"", "postinstall": "remix setup node", "gen": "npx prisma generate", @@ -13,7 +13,7 @@ "migration:create": "npx prisma migrate dev --create-only", "migration:apply:dev": "npx prisma migrate dev", "migration:apply:prod": "npx prisma migrate deploy", - "seed": "node --experimental-specifier-resolution=node --loader ts-node/esm prisma/seed", + "seed": "node --experimental-specifier-resolution=node --loader ts-node/esm -r tsconfig-paths/register prisma/seed", "seed:reset": "npx prisma migrate reset --force --skip-generate", "lint:styles": "stylelint \"app/styles/**/*.css\"", "prettier:check": "prettier --check .", @@ -69,6 +69,7 @@ "stylelint-config-standard": "^24.0.0", "stylelint-order": "^5.0.0", "ts-node": "^10.4.0", + "tsconfig-paths": "^3.12.0", "tsm": "^2.2.1", "typescript": "^4.5.4", "uvu": "^0.5.2" diff --git a/prisma/seed/index.ts b/prisma/seed/index.ts index e7177379e..29e590243 100644 --- a/prisma/seed/index.ts +++ b/prisma/seed/index.ts @@ -2,14 +2,16 @@ import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); import { seed } from "./script"; +const legalVariations = ["check-in", "match"]; + const variation = process.argv[2]?.startsWith("-v=") ? process.argv[2].split("-v=")[1] : undefined; -if (variation !== undefined && variation !== "check-in") { +if (variation !== undefined && !legalVariations.includes(variation)) { throw Error("Unknown variation"); } -seed(variation) +seed(variation as any) .then(() => { console.log( `🌱 All done with seeding${variation ? ` (variation: ${variation})` : ""}` diff --git a/prisma/seed/script.ts b/prisma/seed/script.ts index 1f2401962..9b0791fb2 100644 --- a/prisma/seed/script.ts +++ b/prisma/seed/script.ts @@ -11,9 +11,12 @@ import { import { readFile } from "fs/promises"; import path from "path"; import crypto from "crypto"; +import { createTournamentRounds } from "../../app/services/tournament"; const prisma = new PrismaClient(); -export async function seed(variation?: "check-in") { +const mapListDE = `{"losers":[[{"id":4647,"name":"Kelp Dome","mode":"SZ"},{"id":4658,"name":"Blackbelly Skatepark","mode":"TC"},{"id":4645,"name":"Manta Maria","mode":"CB"}],[{"id":4624,"name":"Inkblot Art Academy","mode":"RM"},{"id":4707,"name":"Ancho-V Games","mode":"SZ"},{"id":4618,"name":"Humpback Pump Track","mode":"TC"}],[{"id":4692,"name":"Camp Triggerfish","mode":"SZ"},{"id":4665,"name":"MakoMart","mode":"CB"},{"id":4634,"name":"Moray Towers","mode":"RM"}],[{"id":4609,"name":"Musselforge Fitness","mode":"RM"},{"id":4647,"name":"Kelp Dome","mode":"SZ"},{"id":4678,"name":"Arowana Mall","mode":"TC"}],[{"id":4705,"name":"New Albacore Hotel","mode":"CB"},{"id":4644,"name":"Manta Maria","mode":"RM"},{"id":4707,"name":"Ancho-V Games","mode":"SZ"}],[{"id":4657,"name":"Blackbelly Skatepark","mode":"SZ"},{"id":4690,"name":"Piranha Pit","mode":"CB"},{"id":4682,"name":"Goby Arena","mode":"SZ"},{"id":4678,"name":"Arowana Mall","mode":"TC"},{"id":4624,"name":"Inkblot Art Academy","mode":"RM"}]],"winners":[[{"id":4677,"name":"Arowana Mall","mode":"SZ"},{"id":4665,"name":"MakoMart","mode":"CB"},{"id":4618,"name":"Humpback Pump Track","mode":"TC"}],[{"id":4624,"name":"Inkblot Art Academy","mode":"RM"},{"id":4683,"name":"Goby Arena","mode":"TC"},{"id":4692,"name":"Camp Triggerfish","mode":"SZ"}],[{"id":4647,"name":"Kelp Dome","mode":"SZ"},{"id":4634,"name":"Moray Towers","mode":"RM"},{"id":4707,"name":"Ancho-V Games","mode":"SZ"},{"id":4610,"name":"Musselforge Fitness","mode":"CB"},{"id":4658,"name":"Blackbelly Skatepark","mode":"TC"}],[{"id":4644,"name":"Manta Maria","mode":"RM"},{"id":4677,"name":"Arowana Mall","mode":"SZ"},{"id":4690,"name":"Piranha Pit","mode":"CB"},{"id":4682,"name":"Goby Arena","mode":"SZ"},{"id":4618,"name":"Humpback Pump Track","mode":"TC"}],[{"id":4624,"name":"Inkblot Art Academy","mode":"RM"},{"id":4707,"name":"Ancho-V Games","mode":"SZ"},{"id":4610,"name":"Musselforge Fitness","mode":"CB"},{"id":4657,"name":"Blackbelly Skatepark","mode":"SZ"},{"id":4693,"name":"Camp Triggerfish","mode":"TC"},{"id":4664,"name":"MakoMart","mode":"RM"},{"id":4647,"name":"Kelp Dome","mode":"SZ"}],[{"id":4617,"name":"Humpback Pump Track","mode":"SZ"},{"id":4635,"name":"Moray Towers","mode":"CB"},{"id":4682,"name":"Goby Arena","mode":"SZ"},{"id":4644,"name":"Manta Maria","mode":"RM"},{"id":4678,"name":"Arowana Mall","mode":"TC"},{"id":4692,"name":"Camp Triggerfish","mode":"SZ"},{"id":4705,"name":"New Albacore Hotel","mode":"CB"}]]}`; + +export async function seed(variation?: "check-in" | "match") { try { // // make sure we won't override production database @@ -54,6 +57,37 @@ export async function seed(variation?: "check-in") { await trustRelationship(nzapUserCreated.id, adminUserCreated.id); await stages(); await tournamentAddMaps(tournament.id); + if (variation === "match") { + await tournamentRoundsCreate(); + } + + async function tournamentRoundsCreate() { + const stages = await prisma.stage.findMany({}); + await createTournamentRounds({ + userId: adminUserCreated.id, + organizationNameForUrl: "sendou", + tournamentNameForUrl: "in-the-zone-x", + bracketId: tournament.brackets[0].id, + mapList: { + winners: JSON.parse(mapListDE).winners.map((round: any) => + round.map((stage: any) => + stages.find( + (stageInDb) => + stage.name === stageInDb.name && stage.mode === stageInDb.mode + ) + ) + ), + losers: JSON.parse(mapListDE).losers.map((round: any) => + round.map((stage: any) => + stages.find( + (stageInDb) => + stage.name === stageInDb.name && stage.mode === stageInDb.mode + ) + ) + ), + }, + }); + } } finally { await prisma.$disconnect(); } @@ -141,13 +175,14 @@ export async function seed(variation?: "check-in") { "Woomy Zoomy Boomy", ]; - if (variation === "check-in") { + if (variation === "check-in" || variation === "match") { const team = await prisma.tournamentTeam.create({ data: { name: "Kraken Paradise", tournamentId, friendCode: "1234-1234-1234", inviteCode: "033e3695-0421-4aa1-a5ef-6ee82297a398", + checkedInTime: variation === "match" ? new Date() : undefined, }, }); @@ -252,6 +287,9 @@ export async function seed(variation?: "check-in") { }, }, }, + include: { + brackets: true, + }, }); } diff --git a/tsconfig.json b/tsconfig.json index 8a7d843bb..0fa917340 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ "paths": { "~/*": ["./app/*"] }, + "baseUrl": ".", // Remix takes care of building everything in `remix build`. "noEmit": true