diff --git a/.yarn/cache/@esbuild-win32-x64-npm-0.19.11-45828b663c-8.zip b/.yarn/cache/@esbuild-win32-x64-npm-0.19.11-45828b663c-8.zip deleted file mode 100644 index 356447d73..000000000 Binary files a/.yarn/cache/@esbuild-win32-x64-npm-0.19.11-45828b663c-8.zip and /dev/null differ diff --git a/.yarn/cache/@prisma-client-npm-5.12.1-999f61e7ac-fcea460faf.zip b/.yarn/cache/@prisma-client-npm-5.12.1-999f61e7ac-fcea460faf.zip new file mode 100644 index 000000000..125432670 Binary files /dev/null and b/.yarn/cache/@prisma-client-npm-5.12.1-999f61e7ac-fcea460faf.zip differ diff --git a/.yarn/cache/@prisma-debug-npm-5.12.1-9a1722ef38-f61e1fafc8.zip b/.yarn/cache/@prisma-debug-npm-5.12.1-9a1722ef38-f61e1fafc8.zip new file mode 100644 index 000000000..ffd7b9110 Binary files /dev/null and b/.yarn/cache/@prisma-debug-npm-5.12.1-9a1722ef38-f61e1fafc8.zip differ diff --git a/.yarn/cache/@prisma-engines-npm-5.12.1-c15f0f7eea-d216b20c97.zip b/.yarn/cache/@prisma-engines-npm-5.12.1-c15f0f7eea-d216b20c97.zip new file mode 100644 index 000000000..99389691a Binary files /dev/null and b/.yarn/cache/@prisma-engines-npm-5.12.1-c15f0f7eea-d216b20c97.zip differ diff --git a/.yarn/cache/@prisma-engines-version-npm-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab-6c4e73c389-d227b5eb99.zip b/.yarn/cache/@prisma-engines-version-npm-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab-6c4e73c389-d227b5eb99.zip new file mode 100644 index 000000000..e3353348d Binary files /dev/null and b/.yarn/cache/@prisma-engines-version-npm-5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab-6c4e73c389-d227b5eb99.zip differ diff --git a/.yarn/cache/@prisma-fetch-engine-npm-5.12.1-dff21a2b7b-a179004258.zip b/.yarn/cache/@prisma-fetch-engine-npm-5.12.1-dff21a2b7b-a179004258.zip new file mode 100644 index 000000000..cb4288fab Binary files /dev/null and b/.yarn/cache/@prisma-fetch-engine-npm-5.12.1-dff21a2b7b-a179004258.zip differ diff --git a/.yarn/cache/@prisma-get-platform-npm-5.12.1-50258c9229-3aa901767e.zip b/.yarn/cache/@prisma-get-platform-npm-5.12.1-50258c9229-3aa901767e.zip new file mode 100644 index 000000000..3e48d72f8 Binary files /dev/null and b/.yarn/cache/@prisma-get-platform-npm-5.12.1-50258c9229-3aa901767e.zip differ diff --git a/.yarn/cache/prisma-npm-5.12.1-5c0a0a0472-6f20237779.zip b/.yarn/cache/prisma-npm-5.12.1-5c0a0a0472-6f20237779.zip new file mode 100644 index 000000000..cf67ecfb2 Binary files /dev/null and b/.yarn/cache/prisma-npm-5.12.1-5c0a0a0472-6f20237779.zip differ diff --git a/package.json b/package.json index e59524316..cf6b42f92 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,14 @@ "name": "dotabod", "private": true, "workspaces": [ - "packages/settings", + "packages/prisma", "packages/twitch/events", "packages/twitch/chat", "packages/dota", "packages/steam" ], "scripts": { + "studio": "doppler run -- yarn prisma studio --schema ./packages/prisma/src/postgres.prisma", "up": "yarn upgrade-interactive", "devscript": "yarn workspace @dotabod/dota run devscript", "build": "yarn buildst && yarn buildd && yarn buildtc && yarn buildte", diff --git a/packages/dota/package.json b/packages/dota/package.json index 47573fd83..6b019b8c4 100644 --- a/packages/dota/package.json +++ b/packages/dota/package.json @@ -19,6 +19,7 @@ "fix-users-dev-docker": "node --no-warnings -r ts-node/register --loader ts-node/esm src/dev/index.ts" }, "dependencies": { + "@dotabod/prisma": "1.0.0", "@node-steam/id": "^1.2.0", "@supabase/supabase-js": "^2.42.5", "@twurple/api": "6.0.9", diff --git a/packages/dota/yarn.deploy.lock b/packages/dota/yarn.deploy.lock index d8d2d91bc..96313d44c 100644 --- a/packages/dota/yarn.deploy.lock +++ b/packages/dota/yarn.deploy.lock @@ -602,6 +602,7 @@ __metadata: version: 0.0.0-use.local resolution: "@dotabod/dota@workspace:." dependencies: + "@dotabod/prisma": 1.0.0 "@faker-js/faker": ^8.4.1 "@jest/globals": ^29.7.0 "@node-steam/id": ^1.2.0 @@ -664,6 +665,18 @@ __metadata: languageName: unknown linkType: soft +"@dotabod/prisma@1.0.0": + version: 0.0.0-use.local + resolution: "@dotabod/prisma@workspace:packages/prisma" + dependencies: + "@faker-js/faker": ^8.4.1 + "@prisma/client": 5.12.1 + "@types/node": ^20.12.7 + prisma: 5.12.1 + ts-node: ^10.9.2 + languageName: unknown + linkType: soft + "@esbuild/aix-ppc64@npm:0.19.11": version: 0.19.11 resolution: "@esbuild/aix-ppc64@npm:0.19.11" @@ -1311,6 +1324,64 @@ __metadata: languageName: node linkType: hard +"@prisma/client@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/client@npm:5.12.1" + peerDependencies: + prisma: "*" + peerDependenciesMeta: + prisma: + optional: true + checksum: fcea460faf6256fdb6e948bad87a6fe881dffdc6e1f83f6a34297d17b289b88982bc19c999acf56a6e9de6edda6c46aefe452a069f0aef2ef083329a30ab5508 + languageName: node + linkType: hard + +"@prisma/debug@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/debug@npm:5.12.1" + checksum: f61e1fafc810959d0ec0f332519cff7937955bba54301f6cf780d4cccfb32e43e7e4bc85b669749a4378fffd20d1ec71780e75b9030fc6b8230948194bfacfd3 + languageName: node + linkType: hard + +"@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": + version: 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + resolution: "@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + checksum: d227b5eb99932d078b1ffb44aa6049bd88e261b581468a7b881dce16cf32c42dead15c09d07c3af06a7eef4054f3a6cf0d555dd66e3120d445d28ea67935853d + languageName: node + linkType: hard + +"@prisma/engines@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/engines@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/fetch-engine": 5.12.1 + "@prisma/get-platform": 5.12.1 + checksum: d216b20c97d2391e1f4411198c0f25e5515bbae2bb4ae7430686983ee53e54ad914365e21407dd02756d4750382ccf35fdb33b50b38db926e6c6466440a41d6c + languageName: node + linkType: hard + +"@prisma/fetch-engine@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/fetch-engine@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/get-platform": 5.12.1 + checksum: a1790042581ebaf96504c514dc4d321957ca3636ce61160624f89ee5d2b1691965b2566990749c6df08f6cd02cfd6f7b80646b6fd7fa6f5b883a8a21ab9bf91d + languageName: node + linkType: hard + +"@prisma/get-platform@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/get-platform@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + checksum: 3aa901767e343763a7841ddff7a954cafc20b826ebde26bea142d3615b6f260f5fc70fc6e0b96bcc5c3d1e789ba2f9d1651dd242baaff264f401622c119a356c + languageName: node + linkType: hard + "@redis/bloom@npm:1.2.0": version: 1.2.0 resolution: "@redis/bloom@npm:1.2.0" @@ -6836,6 +6907,17 @@ __metadata: languageName: node linkType: hard +"prisma@npm:5.12.1": + version: 5.12.1 + resolution: "prisma@npm:5.12.1" + dependencies: + "@prisma/engines": 5.12.1 + bin: + prisma: build/index.js + checksum: 6f20237779456d61fb908fbba355b3fb64f8c8a6f141bb4800d78b945261f58f3a7e83b2ba1c635dcdef69d6cd3d03400bd4153a253e2c2a2b331bdfd50dd0cd + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0" diff --git a/packages/prisma/package.json b/packages/prisma/package.json new file mode 100644 index 000000000..9d6c564fe --- /dev/null +++ b/packages/prisma/package.json @@ -0,0 +1,37 @@ +{ + "name": "@dotabod/prisma", + "version": "1.0.0", + "main": "dist/index.js", + "exports": { + "./dist/mongo/index.js": { + "types": "./dist/mongo/index.d.ts", + "default": "./dist/mongo/index.js" + }, + "./dist/psql/index.js": { + "types": "./dist/psql/index.d.ts", + "default": "./dist/psql/index.js" + } + }, + "type": "module", + "license": "MIT", + "prisma": { + "seed": "node --loader ts-node/esm ./src/seed.ts" + }, + "scripts": { + "build": "prisma generate --schema ./src/mongo.prisma && prisma generate --schema ./src/postgres.prisma", + "pull:mongo": "doppler run -- prisma db pull --schema ./src/mongo.prisma --force", + "pull:psql": "doppler run -- prisma db pull --schema ./src/postgres.prisma", + "push:psql": "doppler run -- prisma db push --schema ./src/postgres.prisma", + "seed": "yarn push:psql && doppler run -- npx prisma db seed", + "reset": "doppler run -- npx prisma migrate reset --schema ./src/postgres.prisma" + }, + "devDependencies": { + "@types/node": "^20.12.7", + "prisma": "5.12.1", + "ts-node": "^10.9.2" + }, + "dependencies": { + "@faker-js/faker": "^8.4.1", + "@prisma/client": "5.12.1" + } +} diff --git a/packages/prisma/src/mongo.prisma b/packages/prisma/src/mongo.prisma new file mode 100644 index 000000000..419e2494d --- /dev/null +++ b/packages/prisma/src/mongo.prisma @@ -0,0 +1,227 @@ +generator client { + provider = "prisma-client-js" + output = "../dist/mongo" +} + +datasource db { + provider = "mongodb" + url = env("MONGO_URL") +} + +type CardsFavoriteTeamPacked { + high Int + low Int + unsigned Boolean +} + +type CardsRecentBattleCupVictory { + account_id Int + division_id Int + skill_level Int + streak Int + team_id Int + tournament_id Int + trophy_id Int + valid_until Int + win_date Int +} + +type DelayedGamesBuildings { + destroyed Boolean + /// Multiple data types found: Float: 79.8%, Int: 20.2% out of 34164 sampled entries + heading Json + lane Int + team Int + tier Int + type Int + /// Multiple data types found: Float: 98.8%, Int: 1.2% out of 34164 sampled entries + x Json + /// Multiple data types found: Float: 98.8%, Int: 1.2% out of 34164 sampled entries + y Json +} + +type DelayedGamesGraphData { + graph_gold Int[] +} + +type DelayedGamesMatch { + bans DelayedGamesMatchBans[] + game_mode Int + game_state Int + game_time Int + league_id Int + league_node_id Int + lobby_type Int + match_id String + picks DelayedGamesMatchPicks[] + server_steam_id String + start_timestamp Int + timestamp Int +} + +type DelayedGamesMatchBans { + hero Int + team Int +} + +type DelayedGamesMatchPicks { + hero Int + team Int +} + +type DelayedGamesTeams { + net_worth Int + players DelayedGamesTeamsPlayers[] + score Int + team_id Int + team_logo String + team_logo_url String + team_name String + team_number Int + team_tag String +} + +type DelayedGamesTeamsPlayers { + abilities Int[] + accountid Int + assists_count Int + death_count Int + denies_count Int + gold Int + heroid Int + items Int[] + kill_count Int + level Int + lh_count Int + name String + net_worth Int + playerid Int + team Int + team_slot Int + /// Multiple data types found: Float: 94.6%, Int: 5.4% out of 10000 sampled entries + x Json + /// Multiple data types found: Float: 94.6%, Int: 5.4% out of 10000 sampled entries + y Json +} + +model cards { + id String @id @default(auto()) @map("_id") @db.ObjectId + account_id Int + badge_points Int + createdAt DateTime @db.Date + event_id Int? + event_points Int? + favorite_team_packed CardsFavoriteTeamPacked + /// Field referred in an index, but found no data to define the type. + id_ Json? @map("id") + is_plus_subscriber Boolean + leaderboard_rank Int + /// Could not determine type: the field only had null or empty values in the sample set. + leaderboard_rank_core Json? + lifetime_games Int + plus_original_start_date Int + /// Could not determine type: the field only had null or empty values in the sample set. + previous_rank_tier Json? + rank_tier Int + /// Could not determine type: the field only had null or empty values in the sample set. + rank_tier_mmr_type Json? + /// Could not determine type: the field only had null or empty values in the sample set. + rank_tier_peak Json? + /// Could not determine type: the field only had null or empty values in the sample set. + rank_tier_score Json? + recent_battle_cup_victory CardsRecentBattleCupVictory? + /// Could not determine type: the field only had null or empty values in the sample set. + slots Json? + /// Could not determine type: the field only had null or empty values in the sample set. + title Json? + + @@index([createdAt(sort: Desc)], map: "createdAt_-1") + @@index([id], map: "id_1") +} + +model commandstats { + id String @id @default(auto()) @map("_id") @db.ObjectId + channel String + channelId String + command String + count Int + date String + + @@index([channel, command, date], map: "channel_1_command_1_date_1_autocreated") +} + +model delayedGames { + id String @id @default(auto()) @map("_id") @db.ObjectId + buildings DelayedGamesBuildings[] + createdAt DateTime @db.Date + delta_frame Boolean? + graph_data DelayedGamesGraphData + match DelayedGamesMatch + teams DelayedGamesTeams[] + + @@index([match.match_id], map: "match.match_id_1") + @@index([teams.players.accountid], map: "teams.players.accountid_1") + @@index([createdAt(sort: Desc)], map: "createdAt_-1") +} + +model gameModes { + id String @id @default(auto()) @map("_id") @db.ObjectId + id_ Int @map("id") + name String + + @@index([id], map: "id_1") +} + +model heroes { + id String @id @default(auto()) @map("_id") @db.ObjectId + /// Field referred in an index, but found no data to define the type. + custom Json? + id_ Int @map("id") + localized_name String + + @@index([id], map: "id_1") + @@index([custom, localized_name], map: "custom_1_localized_name_1") +} + +model medals { + id String @id @default(auto()) @map("_id") @db.ObjectId + name String + rank_tier Int + + @@index([rank_tier], map: "rank_tier_1") +} + +model notablePlayers { + id String @id @default(auto()) @map("_id") @db.ObjectId + /// Multiple data types found: Float: 0.3%, Int: 99.7% out of 1000 sampled entries + account_id Json + addedBy String? + avatar String? + avatarfull String? + avatarmedium String? + channel String? + cheese Int? + country_code String? + createdAt DateTime? @db.Date + fantasy_role Int? + fh_unavailable Boolean? + full_history_time String? + is_locked Boolean? + is_pro Boolean? + last_login String? + last_match_time String? + loccountrycode String? + /// Could not determine type: the field only had null or empty values in the sample set. + locked_until Json? + name String + personaname String? + plus Boolean? + profileurl String? + steamid String? + team_id Int? + team_name String? + team_tag String? + + @@index([account_id], map: "account_id_1") + @@index([channel], map: "channel_1") +} diff --git a/packages/prisma/src/postgres.prisma b/packages/prisma/src/postgres.prisma new file mode 100644 index 000000000..c10e2d2fb --- /dev/null +++ b/packages/prisma/src/postgres.prisma @@ -0,0 +1,149 @@ +generator client { + provider = "prisma-client-js" + output = "../dist/psql" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") +} + +model Account { + id String @id @default(dbgenerated("gen_random_uuid()")) + userId String @unique + type String + provider String + providerAccountId String @unique + refresh_token String + access_token String + expires_at Int? + token_type String? + scope String? + id_token String? + session_state String? + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @default(now()) @updatedAt @map("updated_at") + obtainment_timestamp DateTime? @db.Timestamptz(6) + expires_in Int? + requires_refresh Boolean? @default(false) + user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction) + + @@unique([provider, providerAccountId]) + @@index([provider, providerAccountId, userId], map: "idx_accounts_on_provider_provideraccountid_userid") + @@map("accounts") +} + +/// This model contains an index with non-default null sort order and requires additional setup for migrations. Visit https://pris.ly/d/default-index-null-ordering for more info. +model User { + id String @id @default(dbgenerated("gen_random_uuid()")) + displayName String? @unique(map: "users_name_key") + email String? @unique + image String? + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @default(now()) @updatedAt @map("updated_at") + mmr Int @default(0) @db.SmallInt + steam32Id Int? + followers Int? + stream_delay Int? @default(0) @db.SmallInt + name String @unique(map: "users_username_key") @default("") + emailVerified DateTime? + stream_online Boolean @default(false) + stream_start_date DateTime? @db.Timestamp(6) + beta_tester Boolean @default(false) + locale String @default("en") + kick BigInt? @unique + youtube String? @unique + Account Account? + Bet Bet[] + mods_mods_mod_user_idTousers mods[] @relation("mods_mod_user_idTousers") + mods_mods_streamer_user_idTousers mods[] @relation("mods_streamer_user_idTousers") + settings Setting[] + SteamAccount SteamAccount[] + streams streams? + + @@index([followers(sort: Desc)], map: "idx_users_followers_desc") + @@index([id], map: "idx_users_on_id") + @@index([name], map: "idx_users_on_name") + @@map("users") +} + +model Setting { + id String @id @default(dbgenerated("gen_random_uuid()")) + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @default(now()) @updatedAt @map("updated_at") + key String + value Json? + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction) + + @@unique([key, userId]) + @@index([userId], map: "idx_settings_on_userid") + @@index([userId], map: "idx_user_id_desc") + @@map("settings") +} + +model SteamAccount { + id String @id @default(dbgenerated("gen_random_uuid()")) + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @default(now()) @updatedAt @map("updated_at") + steam32Id Int @unique + userId String + name String? + mmr Int @default(0) @db.SmallInt + leaderboard_rank Int? @db.SmallInt + connectedUserIds String[] + user User @relation(fields: [userId], references: [id], onDelete: Cascade) + + @@map("steam_accounts") +} + +model Bet { + id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @default(now()) @updatedAt @map("updated_at") + matchId String + predictionId String? + won Boolean? + myTeam String + userId String + lobby_type Int? @db.SmallInt + steam32Id BigInt? + is_party Boolean @default(false) + hero_slot Int? @db.SmallInt + is_doubledown Boolean @default(false) + radiant_score Int? @db.SmallInt + dire_score Int? @db.SmallInt + kda Json? + hero_name String? + user User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: NoAction) + + @@unique([matchId, userId]) + @@index([won, lobby_type, createdAt, id], map: "idx_bets_on_won_lobbytype_createdat_id") + @@map("bets") +} + +model mods { + id BigInt @id @default(autoincrement()) + temp_mod_name String? @db.VarChar + streamer_user_id String + mod_user_id String? + created_at DateTime @default(now()) @db.Timestamptz(6) + updated_at DateTime @default(now()) @db.Timestamptz(6) + users_mods_mod_user_idTousers User? @relation("mods_mod_user_idTousers", fields: [mod_user_id], references: [id], onDelete: NoAction, onUpdate: NoAction) + users_mods_streamer_user_idTousers User @relation("mods_streamer_user_idTousers", fields: [streamer_user_id], references: [id], onDelete: NoAction, onUpdate: NoAction) +} + +model streams { + id String + created_at DateTime @default(now()) + updated_at DateTime @default(now()) + userId String @id + followers Int? + stream_delay Int? @default(0) @db.SmallInt + stream_online Boolean @default(false) + stream_start_date DateTime? @db.Timestamp(6) + category_name String? + category_id Int? + title String? + users User @relation(fields: [userId], references: [id], onDelete: NoAction, onUpdate: NoAction) +} diff --git a/packages/prisma/src/seed.ts b/packages/prisma/src/seed.ts new file mode 100644 index 000000000..70b80e5a3 --- /dev/null +++ b/packages/prisma/src/seed.ts @@ -0,0 +1,121 @@ +import { faker } from "@faker-js/faker" +import { PrismaClient as PrismaPsql } from "@dotabod/prisma/dist/psql/index.js" + +const prisma = new PrismaPsql() + +const usedProviderAccountIds = new Set() + +function generateUniqueProviderAccountId(): string { + let id + do { + id = faker.number.int({ min: 50_000, max: 9_900_000 }) + } while (usedProviderAccountIds.has(id)) + usedProviderAccountIds.add(id) + return id.toString() +} + +async function main() { + await seedUser(process.env.TWITCH_BOT_PROVIDERID) + + for (let i = 0; i < 500; i++) { + await seedUser() + } + + console.log("Seeding finished.") +} +main() + .then(async () => { + await prisma.$disconnect() + }) + .catch(async (e) => { + console.error(e) + await prisma.$disconnect() + process.exit(1) + }) + +async function seedUser(providerAccountId?: string) { + const username = faker.internet.userName().replace(".", "_").replace("-", "_") + const user = await prisma.user.create({ + data: { + stream_online: faker.datatype.boolean({ probability: 0.75 }), + beta_tester: faker.datatype.boolean({ probability: 0.1 }), + stream_start_date: faker.date.recent(), + locale: faker.helpers.arrayElement(["en", "ru-RU"]), + email: faker.internet.email(), + mmr: faker.number.int({ min: 0, max: 10000 }), + followers: faker.number.int({ min: 0, max: 800000 }), + name: username.toLowerCase(), + displayName: username, + }, + }) + + // Seed Account data + await prisma.account.create({ + data: { + userId: user.id, + type: "oauth", + provider: "twitch", + token_type: "bearer", + scope: + "channel:manage:polls channel:manage:predictions channel:read:polls channel:read:predictions openid user:read:email", + providerAccountId: generateUniqueProviderAccountId(), + refresh_token: faker.string.alphanumeric(30), + access_token: faker.string.alphanumeric(30), + expires_at: faker.date.future().getUTCMilliseconds(), + expires_in: faker.number.int({ min: 1000, max: 10000 }), + requires_refresh: faker.datatype.boolean({ probability: 0.1 }), + }, + }) + + // Seed Setting data + await prisma.setting.create({ + data: { + key: "theme", + value: { selected: faker.helpers.arrayElement(["dark", "light"]) }, + userId: user.id, + }, + }) + + const steam32Id = Number(generateUniqueProviderAccountId()) + + // Seed SteamAccount data + await prisma.steamAccount.create({ + data: { + steam32Id: steam32Id, + userId: user.id, + name: faker.internet.userName(), + mmr: faker.number.int({ min: 0, max: 10000 }), + leaderboard_rank: faker.number.int({ min: 1, max: 5000 }), + }, + }) + + for (let i = 0; i < faker.number.int(50); i++) { + // Seed Bet data + await prisma.bet.create({ + data: { + matchId: `${faker.number.int({ min: 700000, max: 1000000 })}`, + predictionId: faker.string.uuid(), + userId: user.id, + won: faker.datatype.boolean({ probability: 0.5 }), + myTeam: faker.helpers.arrayElement(["dire", "radiant"]), + lobby_type: faker.helpers.arrayElement([0, 7]), + steam32Id: steam32Id, + is_party: faker.datatype.boolean({ probability: 0.1 }), + hero_slot: faker.number.int({ min: 0, max: 9 }), + is_doubledown: faker.datatype.boolean({ probability: 0.1 }), + radiant_score: faker.number.int({ min: 0, max: 50 }), + dire_score: faker.number.int({ min: 0, max: 50 }), + kda: { + kills: faker.number.int({ min: 0, max: 50 }), + deaths: faker.number.int({ min: 0, max: 50 }), + assists: faker.number.int({ min: 0, max: 50 }), + }, + hero_name: faker.helpers.arrayElement([ + "npc_dota_hero_antimage", + "npc_dota_hero_axe", + "npc_dota_hero_bane", + ]), + }, + }) + } +} diff --git a/packages/prisma/yarn.deploy.lock b/packages/prisma/yarn.deploy.lock new file mode 100644 index 000000000..c7e793122 --- /dev/null +++ b/packages/prisma/yarn.deploy.lock @@ -0,0 +1,267 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 6 + cacheKey: 8 + +"@cspotcode/source-map-support@npm:^0.8.0": + version: 0.8.1 + resolution: "@cspotcode/source-map-support@npm:0.8.1" + dependencies: + "@jridgewell/trace-mapping": 0.3.9 + checksum: 5718f267085ed8edb3e7ef210137241775e607ee18b77d95aa5bd7514f47f5019aa2d82d96b3bf342ef7aa890a346fa1044532ff7cc3009e7d24fce3ce6200fa + languageName: node + linkType: hard + +"@dotabod/prisma@workspace:.": + version: 0.0.0-use.local + resolution: "@dotabod/prisma@workspace:." + dependencies: + "@faker-js/faker": ^8.4.1 + "@prisma/client": 5.12.1 + "@types/node": ^20.12.7 + prisma: 5.12.1 + ts-node: ^10.9.2 + languageName: unknown + linkType: soft + +"@faker-js/faker@npm:^8.4.1": + version: 8.4.1 + resolution: "@faker-js/faker@npm:8.4.1" + checksum: d802d531f8929562715adc279cfec763c9a4bc596ec67b0ce43fd0ae61b285d2b0eec6f1f4aa852452a63721a842fe7e81926dce7bd92acca94b01e2a1f55f5a + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.0.3": + version: 3.1.1 + resolution: "@jridgewell/resolve-uri@npm:3.1.1" + checksum: f5b441fe7900eab4f9155b3b93f9800a916257f4e8563afbcd3b5a5337b55e52bd8ae6735453b1b745457d9f6cdb16d74cd6220bbdd98cf153239e13f6cbb653 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10": + version: 1.4.15 + resolution: "@jridgewell/sourcemap-codec@npm:1.4.15" + checksum: b881c7e503db3fc7f3c1f35a1dd2655a188cc51a3612d76efc8a6eb74728bef5606e6758ee77423e564092b4a518aba569bbb21c9bac5ab7a35b0c6ae7e344c8 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:0.3.9": + version: 0.3.9 + resolution: "@jridgewell/trace-mapping@npm:0.3.9" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: d89597752fd88d3f3480845691a05a44bd21faac18e2185b6f436c3b0fd0c5a859fbbd9aaa92050c4052caf325ad3e10e2e1d1b64327517471b7d51babc0ddef + languageName: node + linkType: hard + +"@prisma/client@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/client@npm:5.12.1" + peerDependencies: + prisma: "*" + peerDependenciesMeta: + prisma: + optional: true + checksum: fcea460faf6256fdb6e948bad87a6fe881dffdc6e1f83f6a34297d17b289b88982bc19c999acf56a6e9de6edda6c46aefe452a069f0aef2ef083329a30ab5508 + languageName: node + linkType: hard + +"@prisma/debug@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/debug@npm:5.12.1" + checksum: f61e1fafc810959d0ec0f332519cff7937955bba54301f6cf780d4cccfb32e43e7e4bc85b669749a4378fffd20d1ec71780e75b9030fc6b8230948194bfacfd3 + languageName: node + linkType: hard + +"@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": + version: 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + resolution: "@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + checksum: d227b5eb99932d078b1ffb44aa6049bd88e261b581468a7b881dce16cf32c42dead15c09d07c3af06a7eef4054f3a6cf0d555dd66e3120d445d28ea67935853d + languageName: node + linkType: hard + +"@prisma/engines@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/engines@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/fetch-engine": 5.12.1 + "@prisma/get-platform": 5.12.1 + checksum: d216b20c97d2391e1f4411198c0f25e5515bbae2bb4ae7430686983ee53e54ad914365e21407dd02756d4750382ccf35fdb33b50b38db926e6c6466440a41d6c + languageName: node + linkType: hard + +"@prisma/fetch-engine@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/fetch-engine@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/get-platform": 5.12.1 + checksum: a1790042581ebaf96504c514dc4d321957ca3636ce61160624f89ee5d2b1691965b2566990749c6df08f6cd02cfd6f7b80646b6fd7fa6f5b883a8a21ab9bf91d + languageName: node + linkType: hard + +"@prisma/get-platform@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/get-platform@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + checksum: 3aa901767e343763a7841ddff7a954cafc20b826ebde26bea142d3615b6f260f5fc70fc6e0b96bcc5c3d1e789ba2f9d1651dd242baaff264f401622c119a356c + languageName: node + linkType: hard + +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.9 + resolution: "@tsconfig/node10@npm:1.0.9" + checksum: a33ae4dc2a621c0678ac8ac4bceb8e512ae75dac65417a2ad9b022d9b5411e863c4c198b6ba9ef659e14b9fb609bbec680841a2e84c1172df7a5ffcf076539df + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 5ce29a41b13e7897a58b8e2df11269c5395999e588b9a467386f99d1d26f6c77d1af2719e407621412520ea30517d718d5192a32403b8dfcc163bf33e40a338a + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 19275fe80c4c8d0ad0abed6a96dbf00642e88b220b090418609c4376e1cef81bf16237bf170ad1b341452feddb8115d8dd2e5acdfdea1b27422071163dc9ba9d + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 202319785901f942a6e1e476b872d421baec20cf09f4b266a1854060efbf78cde16a4d256e8bc949d31e6cd9a90f1e8ef8fb06af96a65e98338a2b6b0de0a0ff + languageName: node + linkType: hard + +"@types/node@npm:^20.12.7": + version: 20.12.7 + resolution: "@types/node@npm:20.12.7" + dependencies: + undici-types: ~5.26.4 + checksum: 7cc979f7e2ca9a339ec71318c3901b9978555257929ef3666987f3e447123bc6dc92afcc89f6347e09e07d602fde7d51bcddea626c23aa2bb74aeaacfd1e1686 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.1.1": + version: 8.3.1 + resolution: "acorn-walk@npm:8.3.1" + checksum: 5c8926ddb5400bc825b6baca782931f9df4ace603ba1a517f5243290fd9cdb089d52877840687b5d5c939591ebc314e2e63721514feaa37c6829c828f2b940ce + languageName: node + linkType: hard + +"acorn@npm:^8.4.1": + version: 8.11.2 + resolution: "acorn@npm:8.11.2" + bin: + acorn: bin/acorn + checksum: 818450408684da89423e3daae24e4dc9b68692db8ab49ea4569c7c5abb7a3f23669438bf129cc81dfdada95e1c9b944ee1bfca2c57a05a4dc73834a612fbf6a7 + languageName: node + linkType: hard + +"arg@npm:^4.1.0": + version: 4.1.3 + resolution: "arg@npm:4.1.3" + checksum: 544af8dd3f60546d3e4aff084d451b96961d2267d668670199692f8d054f0415d86fc5497d0e641e91546f0aa920e7c29e5250e99fc89f5552a34b5d93b77f43 + languageName: node + linkType: hard + +"create-require@npm:^1.1.0": + version: 1.1.1 + resolution: "create-require@npm:1.1.1" + checksum: a9a1503d4390d8b59ad86f4607de7870b39cad43d929813599a23714831e81c520bddf61bcdd1f8e30f05fd3a2b71ae8538e946eb2786dc65c2bbc520f692eff + languageName: node + linkType: hard + +"diff@npm:^4.0.1": + version: 4.0.2 + resolution: "diff@npm:4.0.2" + checksum: f2c09b0ce4e6b301c221addd83bf3f454c0bc00caa3dd837cf6c127d6edf7223aa2bbe3b688feea110b7f262adbfc845b757c44c8a9f8c0c5b15d8fa9ce9d20d + languageName: node + linkType: hard + +"make-error@npm:^1.1.1": + version: 1.3.6 + resolution: "make-error@npm:1.3.6" + checksum: b86e5e0e25f7f777b77fabd8e2cbf15737972869d852a22b7e73c17623928fccb826d8e46b9951501d3f20e51ad74ba8c59ed584f610526a48f8ccf88aaec402 + languageName: node + linkType: hard + +"prisma@npm:5.12.1": + version: 5.12.1 + resolution: "prisma@npm:5.12.1" + dependencies: + "@prisma/engines": 5.12.1 + bin: + prisma: build/index.js + checksum: 6f20237779456d61fb908fbba355b3fb64f8c8a6f141bb4800d78b945261f58f3a7e83b2ba1c635dcdef69d6cd3d03400bd4153a253e2c2a2b331bdfd50dd0cd + languageName: node + linkType: hard + +"ts-node@npm:^10.9.2": + version: 10.9.2 + resolution: "ts-node@npm:10.9.2" + dependencies: + "@cspotcode/source-map-support": ^0.8.0 + "@tsconfig/node10": ^1.0.7 + "@tsconfig/node12": ^1.0.7 + "@tsconfig/node14": ^1.0.0 + "@tsconfig/node16": ^1.0.2 + acorn: ^8.4.1 + acorn-walk: ^8.1.1 + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + v8-compile-cache-lib: ^3.0.1 + yn: 3.1.1 + peerDependencies: + "@swc/core": ">=1.2.50" + "@swc/wasm": ">=1.2.50" + "@types/node": "*" + typescript: ">=2.7" + peerDependenciesMeta: + "@swc/core": + optional: true + "@swc/wasm": + optional: true + bin: + ts-node: dist/bin.js + ts-node-cwd: dist/bin-cwd.js + ts-node-esm: dist/bin-esm.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: fde256c9073969e234526e2cfead42591b9a2aec5222bac154b0de2fa9e4ceb30efcd717ee8bc785a56f3a119bdd5aa27b333d9dbec94ed254bd26f8944c67ac + languageName: node + linkType: hard + +"undici-types@npm:~5.26.4": + version: 5.26.5 + resolution: "undici-types@npm:5.26.5" + checksum: 3192ef6f3fd5df652f2dc1cd782b49d6ff14dc98e5dced492aa8a8c65425227da5da6aafe22523c67f035a272c599bb89cfe803c1db6311e44bed3042fc25487 + languageName: node + linkType: hard + +"v8-compile-cache-lib@npm:^3.0.1": + version: 3.0.1 + resolution: "v8-compile-cache-lib@npm:3.0.1" + checksum: 78089ad549e21bcdbfca10c08850022b22024cdcc2da9b168bcf5a73a6ed7bf01a9cebb9eac28e03cd23a684d81e0502797e88f3ccd27a32aeab1cfc44c39da0 + languageName: node + linkType: hard + +"yn@npm:3.1.1": + version: 3.1.1 + resolution: "yn@npm:3.1.1" + checksum: 2c487b0e149e746ef48cda9f8bad10fc83693cd69d7f9dcd8be4214e985de33a29c9e24f3c0d6bcf2288427040a8947406ab27f7af67ee9456e6b84854f02dd6 + languageName: node + linkType: hard diff --git a/runner.sh b/runner.sh index d405703d3..cf9ffdc3d 100644 --- a/runner.sh +++ b/runner.sh @@ -160,6 +160,10 @@ update() { up } +pullall() { + cd ./packages/prisma && yarn pull:psql && yarn build +} + # Main script case "$1" in gentypes) gentypes ;; @@ -182,5 +186,6 @@ ssh) ssh ;; login) login ;; up) up ;; update) update ;; +pullall) pullall ;; *) echo "Invalid command: $1" ;; esac diff --git a/yarn.lock b/yarn.lock index 80577a0f0..1904b55cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -602,6 +602,7 @@ __metadata: version: 0.0.0-use.local resolution: "@dotabod/dota@workspace:packages/dota" dependencies: + "@dotabod/prisma": 1.0.0 "@faker-js/faker": ^8.4.1 "@jest/globals": ^29.7.0 "@node-steam/id": ^1.2.0 @@ -664,6 +665,18 @@ __metadata: languageName: unknown linkType: soft +"@dotabod/prisma@1.0.0, @dotabod/prisma@workspace:packages/prisma": + version: 0.0.0-use.local + resolution: "@dotabod/prisma@workspace:packages/prisma" + dependencies: + "@faker-js/faker": ^8.4.1 + "@prisma/client": 5.12.1 + "@types/node": ^20.12.7 + prisma: 5.12.1 + ts-node: ^10.9.2 + languageName: unknown + linkType: soft + "@dotabod/steam@workspace:packages/steam": version: 0.0.0-use.local resolution: "@dotabod/steam@workspace:packages/steam" @@ -1429,6 +1442,64 @@ __metadata: languageName: node linkType: hard +"@prisma/client@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/client@npm:5.12.1" + peerDependencies: + prisma: "*" + peerDependenciesMeta: + prisma: + optional: true + checksum: fcea460faf6256fdb6e948bad87a6fe881dffdc6e1f83f6a34297d17b289b88982bc19c999acf56a6e9de6edda6c46aefe452a069f0aef2ef083329a30ab5508 + languageName: node + linkType: hard + +"@prisma/debug@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/debug@npm:5.12.1" + checksum: f61e1fafc810959d0ec0f332519cff7937955bba54301f6cf780d4cccfb32e43e7e4bc85b669749a4378fffd20d1ec71780e75b9030fc6b8230948194bfacfd3 + languageName: node + linkType: hard + +"@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab": + version: 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + resolution: "@prisma/engines-version@npm:5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab" + checksum: d227b5eb99932d078b1ffb44aa6049bd88e261b581468a7b881dce16cf32c42dead15c09d07c3af06a7eef4054f3a6cf0d555dd66e3120d445d28ea67935853d + languageName: node + linkType: hard + +"@prisma/engines@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/engines@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/fetch-engine": 5.12.1 + "@prisma/get-platform": 5.12.1 + checksum: d216b20c97d2391e1f4411198c0f25e5515bbae2bb4ae7430686983ee53e54ad914365e21407dd02756d4750382ccf35fdb33b50b38db926e6c6466440a41d6c + languageName: node + linkType: hard + +"@prisma/fetch-engine@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/fetch-engine@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + "@prisma/engines-version": 5.12.0-21.473ed3124229e22d881cb7addf559799debae1ab + "@prisma/get-platform": 5.12.1 + checksum: a1790042581ebaf96504c514dc4d321957ca3636ce61160624f89ee5d2b1691965b2566990749c6df08f6cd02cfd6f7b80646b6fd7fa6f5b883a8a21ab9bf91d + languageName: node + linkType: hard + +"@prisma/get-platform@npm:5.12.1": + version: 5.12.1 + resolution: "@prisma/get-platform@npm:5.12.1" + dependencies: + "@prisma/debug": 5.12.1 + checksum: 3aa901767e343763a7841ddff7a954cafc20b826ebde26bea142d3615b6f260f5fc70fc6e0b96bcc5c3d1e789ba2f9d1651dd242baaff264f401622c119a356c + languageName: node + linkType: hard + "@redis/bloom@npm:1.2.0": version: 1.2.0 resolution: "@redis/bloom@npm:1.2.0" @@ -7288,6 +7359,17 @@ __metadata: languageName: node linkType: hard +"prisma@npm:5.12.1": + version: 5.12.1 + resolution: "prisma@npm:5.12.1" + dependencies: + "@prisma/engines": 5.12.1 + bin: + prisma: build/index.js + checksum: 6f20237779456d61fb908fbba355b3fb64f8c8a6f141bb4800d78b945261f58f3a7e83b2ba1c635dcdef69d6cd3d03400bd4153a253e2c2a2b331bdfd50dd0cd + languageName: node + linkType: hard + "proc-log@npm:^3.0.0": version: 3.0.0 resolution: "proc-log@npm:3.0.0"