diff --git a/package-lock.json b/package-lock.json index c06959f9..a9bd1fd2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,21 @@ { "name": "game-services", - "version": "0.113.0", + "version": "0.113.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "game-services", - "version": "0.113.0", + "version": "0.113.1", "license": "MIT", "dependencies": { "@clickhouse/client": "^1.15.0", "@hyperdx/node-opentelemetry": "^0.8.2", "@koa/cors": "^5.0.0", - "@mikro-orm/core": "^6.6.9", - "@mikro-orm/migrations": "^6.6.9", - "@mikro-orm/mysql": "^6.6.9", - "@mikro-orm/reflection": "^6.6.9", + "@mikro-orm/core": "^6.6.10", + "@mikro-orm/migrations": "^6.6.10", + "@mikro-orm/mysql": "^6.6.10", + "@mikro-orm/reflection": "^6.6.10", "@ngneat/falso": "^7.2.0", "@opentelemetry/api": "^1.9.0", "@sentry/node": "^9.29.0", @@ -53,7 +53,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@mikro-orm/cli": "^6.6.9", + "@mikro-orm/cli": "^6.6.10", "@types/archiver": "^6.0.3", "@types/bcrypt": "^5.0.2", "@types/jsonwebtoken": "^9.0.9", @@ -1052,15 +1052,15 @@ } }, "node_modules/@mikro-orm/cli": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.6.9.tgz", - "integrity": "sha512-CjYTVoVds82hTsvahq5pZedW3Wf3owt6qCbH8En3DtZCH64iSoG1XQ9LSAGJbyer+YIodeHwBv1aRALc6VoTUA==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/@mikro-orm/cli/-/cli-6.6.10.tgz", + "integrity": "sha512-tKQeQUuhEf8wjeOX9VU8DPD0lN0uNa/5q+u7XHjEk5xE5dkbOzDo7zpnRmV+CdWra4dV+3EY9XAc2uLaQSpGEg==", "dev": true, "license": "MIT", "dependencies": { "@jercle/yargonaut": "1.1.5", - "@mikro-orm/core": "6.6.9", - "@mikro-orm/knex": "6.6.9", + "@mikro-orm/core": "6.6.10", + "@mikro-orm/knex": "6.6.10", "fs-extra": "11.3.3", "tsconfig-paths": "4.2.0", "yargs": "17.7.2" @@ -1074,17 +1074,18 @@ } }, "node_modules/@mikro-orm/core": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.6.9.tgz", - "integrity": "sha512-nKzVo5xeMVlylCLigCOqX1UAdVEcGhzvgTL3v+jitEsEzGrNUD3RP1huUKi6p9j42DRC0REw5g32H2zQfIobPg==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/@mikro-orm/core/-/core-6.6.10.tgz", + "integrity": "sha512-XdnipWmZ0BG+lzMBv6TykSKGLgBtNwqdJqh4Er+n1kTP0IZmXCtgluzHB66sNXkcYHomuIn2olIVbcVb0m/jDw==", "license": "MIT", + "peer": true, "dependencies": { "dataloader": "2.2.3", "dotenv": "17.3.1", "esprima": "4.0.1", "fs-extra": "11.3.3", "globby": "11.1.0", - "mikro-orm": "6.6.9", + "mikro-orm": "6.6.10", "reflect-metadata": "0.2.2" }, "engines": { @@ -1107,9 +1108,9 @@ } }, "node_modules/@mikro-orm/knex": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.6.9.tgz", - "integrity": "sha512-ibB12R/vfKaike3VTHbKBfE3+9b0lyp7glC1U9qA8aUH9sgGA+rWXQKRi47rlRJYuSKFD1FJhoJUNC2ZWNw1xg==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/@mikro-orm/knex/-/knex-6.6.10.tgz", + "integrity": "sha512-FOGkanJcHhKofjlc63YTpNtlB/7gdFRCfmbsBe2A1r36lx2aFdu2lqEAqFr8mUbOiwfTAQEBH8P9DGhd0T1j8g==", "license": "MIT", "dependencies": { "fs-extra": "11.3.3", @@ -1138,12 +1139,12 @@ } }, "node_modules/@mikro-orm/migrations": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-6.6.9.tgz", - "integrity": "sha512-ZJ73qSJfmh4AtGl87YYZ2JGMUwn2TbP8jnKWzXxkUM3HU+kG4lHcV8NnWFlKmh24R2520rfJTiDwxrjHxPM0sg==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/@mikro-orm/migrations/-/migrations-6.6.10.tgz", + "integrity": "sha512-+eQEIudtoRK4Fh688OmUxDXZZv7fR+N4gOJfYsJE+lJjUA3D6s0zg8zcxXZkUtGaIqRdSFhGPVc+pJQJPcT3wg==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.6.9", + "@mikro-orm/knex": "6.6.10", "fs-extra": "11.3.3", "umzug": "3.8.2" }, @@ -1155,12 +1156,12 @@ } }, "node_modules/@mikro-orm/mysql": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/mysql/-/mysql-6.6.9.tgz", - "integrity": "sha512-fRnPaPFM/I86ITAwcWXe9fO8BJGvd6VWkBSFQ8EKbmHRHL5IZKDY3mQ9D5gOfiM610F7Qr9T03o25o4RWn97/Q==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/@mikro-orm/mysql/-/mysql-6.6.10.tgz", + "integrity": "sha512-NFo9JvBZ9e6RY9TDOsc5PmCdWbn/Mi5lixjyl9TGZ6jVo7A0hYbSrTXuoTA4011TBhlf6F1i9wPXvj8+RcsFgA==", "license": "MIT", "dependencies": { - "@mikro-orm/knex": "6.6.9", + "@mikro-orm/knex": "6.6.10", "mysql2": "3.19.0" }, "engines": { @@ -1171,9 +1172,9 @@ } }, "node_modules/@mikro-orm/reflection": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.6.9.tgz", - "integrity": "sha512-qBKXZz4kIoODdtSK3EjPgLBf6LhVj4dsQAbpym+q/ZD7gyPvkJYZxbe7KKbit66xbHN1NyJxIupdOwh/3j3cTA==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/@mikro-orm/reflection/-/reflection-6.6.10.tgz", + "integrity": "sha512-Qh4PM56vXF1Qw3+b5d2BzZGEuJAHl0XgKXp4AkMjVvzbYH1WM70fKz9p9UY1UmD2O1fGABsYb1UMl3XFZmVLNw==", "license": "MIT", "dependencies": { "globby": "11.1.0", @@ -1324,6 +1325,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "peer": true, "engines": { "node": ">=8.0.0" } @@ -1403,6 +1405,7 @@ "version": "1.30.1", "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.30.1.tgz", "integrity": "sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==", + "peer": true, "engines": { "node": ">=14" }, @@ -1648,6 +1651,7 @@ "version": "0.57.2", "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.57.2.tgz", "integrity": "sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==", + "peer": true, "dependencies": { "@opentelemetry/api-logs": "0.57.2", "@types/shimmer": "^1.2.0", @@ -2623,6 +2627,7 @@ "version": "1.34.0", "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.34.0.tgz", "integrity": "sha512-aKcOkyrorBGlajjRdVoJWHTxfxO1vCNHLJVlSDaRHDIdjU+pX8IYQPvPDkYiujKLbRnWU+1TBwEt0QRgSm4SGA==", + "peer": true, "engines": { "node": ">=14" } @@ -3874,6 +3879,7 @@ "version": "8.13.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz", "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "json-schema-traverse": "^1.0.0", @@ -4095,9 +4101,9 @@ } }, "node_modules/@ts-morph/common/node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -4420,6 +4426,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.9.tgz", "integrity": "sha512-ne4A0IpG3+2ETuREInjPNhUGis1SFjv1d5asp8MzEAGtOZeTeHVDOYqOgqfhvseqg/iXty2hjBf1zAOb7RNiNw==", "license": "MIT", + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -4725,6 +4732,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -5068,6 +5076,7 @@ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz", "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==", "license": "MIT", + "peer": true, "dependencies": { "follow-redirects": "^1.15.11", "form-data": "^4.0.5", @@ -5174,9 +5183,9 @@ "dev": true }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" @@ -6870,6 +6879,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/ioredis/-/ioredis-5.6.0.tgz", "integrity": "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==", + "peer": true, "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", @@ -8119,9 +8129,9 @@ } }, "node_modules/mikro-orm": { - "version": "6.6.9", - "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.6.9.tgz", - "integrity": "sha512-3X14CKdjeHZiV4Aa2WFaDJe36f8jR4jE54dlvWLby7yZenKFoMbBjjtsakRznU2KZr8bnc0bDcL+QIAsg8AHXg==", + "version": "6.6.10", + "resolved": "https://registry.npmjs.org/mikro-orm/-/mikro-orm-6.6.10.tgz", + "integrity": "sha512-9z+F31IYQx4sDOO+2gtTS9JUz8SxoSrMQte0p300RIzWj+KByBYkpPZLhAToyIkuUCXHf2sGah8HSpExToCm6Q==", "license": "MIT", "engines": { "node": ">= 18.12.0" @@ -8211,9 +8221,9 @@ } }, "node_modules/minimatch/node_modules/brace-expansion": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.3.tgz", - "integrity": "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -8446,9 +8456,9 @@ } }, "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8718,6 +8728,7 @@ "integrity": "sha512-+zbTyYt+86+8TcF//1NUoHs7v8kvu5vQvjnFZMerrhp5REzYFvgLdfT7LLBQd1qmTWeFQ4/ko1YLXKtoxTFxVw==", "dev": true, "license": "MIT", + "peer": true, "bin": { "tsgolint": "bin/tsgolint.js" }, @@ -8928,6 +8939,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, @@ -10334,6 +10346,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -10467,6 +10480,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -10542,6 +10556,7 @@ "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@vitest/expect": "4.0.18", "@vitest/mocker": "4.0.18", diff --git a/package.json b/package.json index 0ebc3dac..e0649000 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "game-services", - "version": "0.113.0", + "version": "0.113.1", "description": "", "license": "MIT", "author": "Talo Platform Ltd", @@ -28,10 +28,10 @@ "@clickhouse/client": "^1.15.0", "@hyperdx/node-opentelemetry": "^0.8.2", "@koa/cors": "^5.0.0", - "@mikro-orm/core": "^6.6.9", - "@mikro-orm/migrations": "^6.6.9", - "@mikro-orm/mysql": "^6.6.9", - "@mikro-orm/reflection": "^6.6.9", + "@mikro-orm/core": "^6.6.10", + "@mikro-orm/migrations": "^6.6.10", + "@mikro-orm/mysql": "^6.6.10", + "@mikro-orm/reflection": "^6.6.10", "@ngneat/falso": "^7.2.0", "@opentelemetry/api": "^1.9.0", "@sentry/node": "^9.29.0", @@ -69,7 +69,7 @@ "zod": "^4.3.6" }, "devDependencies": { - "@mikro-orm/cli": "^6.6.9", + "@mikro-orm/cli": "^6.6.10", "@types/archiver": "^6.0.3", "@types/bcrypt": "^5.0.2", "@types/jsonwebtoken": "^9.0.9", diff --git a/src/entities/failed-job.ts b/src/entities/failed-job.ts index 0b3f17f8..156f2afb 100644 --- a/src/entities/failed-job.ts +++ b/src/entities/failed-job.ts @@ -1,4 +1,4 @@ -import { Entity, PrimaryKey, Property } from '@mikro-orm/mysql' +import { Entity, Index, PrimaryKey, Property } from '@mikro-orm/mysql' @Entity() export default class FailedJob { @@ -17,6 +17,7 @@ export default class FailedJob { @Property({ columnType: 'text' }) stack!: string + @Index() @Property() failedAt: Date = new Date() } diff --git a/src/entities/user-recovery-code.ts b/src/entities/user-recovery-code.ts index ea7bc72a..55344381 100644 --- a/src/entities/user-recovery-code.ts +++ b/src/entities/user-recovery-code.ts @@ -7,7 +7,7 @@ export default class UserRecoveryCode { @PrimaryKey() id!: number - @ManyToOne(() => User) + @ManyToOne(() => User, { deleteRule: 'cascade' }) user: User @Property() @@ -20,7 +20,7 @@ export default class UserRecoveryCode { this.user = user } - generateCode(): string { + generateCode() { const characters = 'ABCDEFGHIJKMNOPQRSTUVWXYZ0123456789' let code = '' @@ -31,7 +31,7 @@ export default class UserRecoveryCode { return encrypt(code, process.env.RECOVERY_CODES_SECRET!) } - getPlainCode(): string { + getPlainCode() { return decrypt(this.code, process.env.RECOVERY_CODES_SECRET!) } diff --git a/src/lib/integrations/clients/google-play-games-client.ts b/src/lib/integrations/clients/google-play-games-client.ts index 7c43a2c6..1cbdf2a9 100644 --- a/src/lib/integrations/clients/google-play-games-client.ts +++ b/src/lib/integrations/clients/google-play-games-client.ts @@ -99,7 +99,7 @@ export class GooglePlayGamesClient { const event = this.createIntegrationEvent(config) const totalAttempts = 3 - const abortTimeout = 1000 + const abortTimeout = 2000 const finalAbortTimeout = 5000 const startTime = performance.now() diff --git a/src/lib/integrations/clients/steamworks-client.ts b/src/lib/integrations/clients/steamworks-client.ts index 401dace1..b4b822c6 100644 --- a/src/lib/integrations/clients/steamworks-client.ts +++ b/src/lib/integrations/clients/steamworks-client.ts @@ -189,7 +189,7 @@ export class SteamworksClient { const event = this.createSteamworksIntegrationEvent(config) const totalAttempts = 3 - const abortTimeout = 1000 + const abortTimeout = 2000 const finalAbortTimeout = 5000 const startTime = performance.now() diff --git a/src/migrations/.snapshot-gs_dev.json b/src/migrations/.snapshot-gs_dev.json index 800cf36a..7b4bdfcf 100644 --- a/src/migrations/.snapshot-gs_dev.json +++ b/src/migrations/.snapshot-gs_dev.json @@ -12,173 +12,166 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "scopes": { - "name": "scopes", - "type": "text", + "queue": { + "name": "queue", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 65535, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "text" + "mappedType": "string" }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, + "payload": { + "name": "payload", + "type": "json", + "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "json" }, - "created_by_user_id": { - "name": "created_by_user_id", - "type": "int", - "unsigned": true, + "reason": { + "name": "reason", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "stack": { + "name": "stack", + "type": "text", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "text" }, - "revoked_at": { - "name": "revoked_at", + "failed_at": { + "name": "failed_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" - }, - "last_used_at": { - "name": "last_used_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, + } + }, + "name": "failed_job", + "indexes": [ + { + "columnNames": ["failed_at"], + "composite": false, + "keyName": "failed_job_failed_at_index", + "constraint": false, "primary": false, - "nullable": true, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "int", + "unsigned": true, + "autoincrement": true, + "primary": true, + "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "integer" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "secret": { + "name": "secret", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" } }, - "name": "apikey", + "name": "game_secret", "indexes": [ { - "columnNames": ["created_by_user_id"], - "keyName": "apikey_created_by_user_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["game_id"], - "keyName": "apikey_game_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], - "foreignKeys": { - "apikey_created_by_user_id_foreign": { - "columnNames": ["created_by_user_id"], - "constraintName": "apikey_created_by_user_id_foreign", - "localTableName": "apikey", - "referencedTableName": "user", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - }, - "apikey_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "apikey_game_id_foreign", - "localTableName": "apikey", - "referencedTableName": "game", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - } - }, - "nativeEnums": {}, - "comment": "" + "foreignKeys": {}, + "nativeEnums": {} }, { "columns": { @@ -191,86 +184,86 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "created_by_user_id": { - "name": "created_by_user_id", - "type": "int", - "unsigned": true, + "password": { + "name": "password", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, + "email": { + "name": "email", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "entities": { - "name": "entities", - "type": "text", + "verification_enabled": { + "name": "verification_enabled", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 65535, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "text" + "mappedType": "boolean" }, - "status": { - "name": "status", - "type": "tinyint", + "session_key": { + "name": "session_key", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "0", + "length": 255, + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "tinyint" + "mappedType": "string" }, - "failed_at": { - "name": "failed_at", + "session_created_at": { + "name": "session_created_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": true, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -286,7 +279,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -302,7 +295,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -311,53 +304,20 @@ "mappedType": "datetime" } }, - "name": "data_export", + "name": "player_auth", "indexes": [ { - "columnNames": ["created_by_user_id"], - "keyName": "data_export_created_by_user_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["game_id"], - "keyName": "data_export_game_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], - "foreignKeys": { - "data_export_created_by_user_id_foreign": { - "columnNames": ["created_by_user_id"], - "constraintName": "data_export_created_by_user_id_foreign", - "localTableName": "data_export", - "referencedTableName": "user", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - }, - "data_export_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "data_export_game_id_foreign", - "localTableName": "data_export", - "referencedTableName": "game", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - } - }, - "nativeEnums": {}, - "comment": "" + "foreignKeys": {}, + "nativeEnums": {} }, { "columns": { @@ -370,15 +330,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "queue": { - "name": "queue", + "stripe_id": { + "name": "stripe_id", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -393,47 +353,63 @@ "enumItems": [], "mappedType": "string" }, - "payload": { - "name": "payload", - "type": "json", + "hidden": { + "name": "hidden", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": null, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "boolean" }, - "reason": { - "name": "reason", - "type": "varchar(255)", + "default": { + "name": "default", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": 1, + "precision": null, + "scale": null, + "default": "false", + "comment": null, + "enumItems": [], + "mappedType": "boolean" + }, + "player_limit": { + "name": "player_limit", + "type": "int", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "failed_at": { - "name": "failed_at", + "created_at": { + "name": "created_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -441,37 +417,37 @@ "enumItems": [], "mappedType": "datetime" }, - "stack": { - "name": "stack", - "type": "text", + "updated_at": { + "name": "updated_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 65535, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "text" + "mappedType": "datetime" } }, - "name": "failed_job", + "name": "pricing_plan", "indexes": [ { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": {}, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -484,31 +460,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "name": { - "name": "name", - "type": "varchar(255)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "organisation_id": { - "name": "organisation_id", + "pricing_plan_id": { + "name": "pricing_plan_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -516,205 +476,157 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "props": { - "name": "props", - "type": "json", + "status": { + "name": "status", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, + "length": 255, "precision": null, "scale": null, - "default": null, + "default": "'active'", "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "stripe_price_id": { + "name": "stripe_price_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "stripe_customer_id": { + "name": "stripe_customer_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" - }, - "api_secret_id": { - "name": "api_secret_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "purge_dev_players": { - "name": "purge_dev_players", - "type": "tinyint(1)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" + "mappedType": "string" }, - "purge_live_players": { - "name": "purge_live_players", - "type": "tinyint(1)", + "end_date": { + "name": "end_date", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "datetime" }, - "website": { - "name": "website", - "type": "varchar(255)", + "last_usage_warning_threshold": { + "name": "last_usage_warning_threshold", + "type": "int", "unsigned": false, "autoincrement": false, "primary": false, "nullable": true, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "purge_dev_players_retention": { - "name": "purge_dev_players_retention", - "type": "int", + "created_at": { + "name": "created_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, - "default": "60", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "datetime" }, - "purge_live_players_retention": { - "name": "purge_live_players_retention", - "type": "int", + "updated_at": { + "name": "updated_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, - "default": "90", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "datetime" } }, - "name": "game", + "name": "organisation_pricing_plan", "indexes": [ { - "columnNames": ["api_secret_id"], - "keyName": "game_api_secret_id_unique", - "unique": true, - "primary": false, - "constraint": true - }, - { - "columnNames": ["organisation_id"], - "keyName": "game_organisation_id_index", - "unique": false, + "columnNames": ["pricing_plan_id"], + "composite": false, + "keyName": "organisation_pricing_plan_pricing_plan_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_api_secret_id_foreign": { - "columnNames": ["api_secret_id"], - "constraintName": "game_api_secret_id_foreign", - "localTableName": "game", - "referencedTableName": "game_secret", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - }, - "game_organisation_id_foreign": { - "columnNames": ["organisation_id"], - "constraintName": "game_organisation_id_foreign", - "localTableName": "game", - "referencedTableName": "organisation", + "organisation_pricing_plan_pricing_plan_id_foreign": { + "constraintName": "organisation_pricing_plan_pricing_plan_id_foreign", + "columnNames": ["pricing_plan_id"], + "localTableName": "organisation_pricing_plan", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "pricing_plan", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -727,65 +639,49 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "user_id": { - "name": "user_id", - "type": "int", - "unsigned": true, + "email": { + "name": "email", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "type": { - "name": "type", - "type": "tinyint", + "name": { + "name": "name", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 3, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "tinyint" + "mappedType": "string" }, - "extra": { - "name": "extra", - "type": "json", - "unsigned": false, + "pricing_plan_id": { + "name": "pricing_plan_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, @@ -796,7 +692,7 @@ "default": null, "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "integer" }, "created_at": { "name": "created_at", @@ -806,7 +702,23 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -815,53 +727,37 @@ "mappedType": "datetime" } }, - "name": "game_activity", + "name": "organisation", "indexes": [ { - "columnNames": ["game_id"], - "keyName": "game_activity_game_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["user_id"], - "keyName": "game_activity_user_id_index", - "unique": false, + "columnNames": ["pricing_plan_id"], + "composite": false, + "keyName": "organisation_pricing_plan_id_unique", + "constraint": true, "primary": false, - "constraint": false + "unique": true }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_activity_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "game_activity_game_id_foreign", - "localTableName": "game_activity", - "referencedTableName": "game", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" - }, - "game_activity_user_id_foreign": { - "columnNames": ["user_id"], - "constraintName": "game_activity_user_id_foreign", - "localTableName": "game_activity", - "referencedTableName": "user", + "organisation_pricing_plan_id_foreign": { + "constraintName": "organisation_pricing_plan_id_foreign", + "columnNames": ["pricing_plan_id"], + "localTableName": "organisation", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "organisation_pricing_plan", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -874,8 +770,8 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], @@ -897,310 +793,258 @@ "enumItems": [], "mappedType": "string" }, - "owner_id": { - "name": "owner_id", + "organisation_id": { + "name": "organisation_id", "type": "int", "unsigned": true, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, + "props": { + "name": "props", + "type": "json", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "json" }, - "total_messages": { - "name": "total_messages", + "api_secret_id": { + "name": "api_secret_id", "type": "int", - "unsigned": false, + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, - "default": "0", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "auto_cleanup": { - "name": "auto_cleanup", + "purge_dev_players": { + "name": "purge_dev_players", "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 3, - "scale": 0, + "length": 1, + "precision": null, + "scale": null, "default": "false", "comment": null, "enumItems": [], "mappedType": "boolean" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "purge_live_players": { + "name": "purge_live_players", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "boolean" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "website": { + "name": "website", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "private": { - "name": "private", - "type": "tinyint(1)", + "purge_dev_players_retention": { + "name": "purge_dev_players_retention", + "type": "int", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": "60", "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "integer" }, - "temporary_membership": { - "name": "temporary_membership", - "type": "tinyint(1)", + "purge_live_players_retention": { + "name": "purge_live_players_retention", + "type": "int", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": "90", "comment": null, "enumItems": [], - "mappedType": "boolean" - } - }, - "name": "game_channel", - "indexes": [ - { - "columnNames": ["game_id"], - "keyName": "game_channel_game_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["owner_id"], - "keyName": "game_channel_owner_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - } - ], - "checks": [], - "foreignKeys": { - "game_channel_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "game_channel_game_id_foreign", - "localTableName": "game_channel", - "referencedTableName": "game", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "mappedType": "integer" }, - "game_channel_owner_id_foreign": { - "columnNames": ["owner_id"], - "constraintName": "game_channel_owner_id_foreign", - "localTableName": "game_channel", - "referencedTableName": "player_alias", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" - } - }, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "game_channel_id": { - "name": "game_channel_id", - "type": "int", - "unsigned": true, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, "autoincrement": false, - "primary": true, + "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "datetime" }, - "player_alias_id": { - "name": "player_alias_id", - "type": "int", - "unsigned": true, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, "autoincrement": false, - "primary": true, + "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "datetime" } }, - "name": "game_channel_members", + "name": "game", "indexes": [ { - "columnNames": ["game_channel_id"], - "keyName": "game_channel_members_game_channel_id_index", - "unique": false, + "columnNames": ["organisation_id"], + "composite": false, + "keyName": "game_organisation_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["player_alias_id"], - "keyName": "game_channel_members_player_alias_id_index", - "unique": false, + "columnNames": ["api_secret_id"], + "composite": false, + "keyName": "game_api_secret_id_unique", + "constraint": true, "primary": false, - "constraint": false + "unique": true }, { - "columnNames": ["game_channel_id", "player_alias_id"], "keyName": "PRIMARY", - "unique": true, - "primary": true, + "columnNames": ["id"], + "composite": false, "constraint": true, - "composite": true + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "game_channel_members_game_channel_id_foreign": { - "columnNames": ["game_channel_id"], - "constraintName": "game_channel_members_game_channel_id_foreign", - "localTableName": "game_channel_members", - "referencedTableName": "game_channel", + "game_organisation_id_foreign": { + "constraintName": "game_organisation_id_foreign", + "columnNames": ["organisation_id"], + "localTableName": "game", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "organisation", + "updateRule": "cascade" }, - "game_channel_members_player_alias_id_foreign": { - "columnNames": ["player_alias_id"], - "constraintName": "game_channel_members_player_alias_id_foreign", - "localTableName": "game_channel_members", - "referencedTableName": "player_alias", + "game_api_secret_id_foreign": { + "constraintName": "game_api_secret_id_foreign", + "columnNames": ["api_secret_id"], + "localTableName": "game", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game_secret", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { "id": { "name": "id", - "type": "int", - "unsigned": true, - "autoincrement": true, + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, "primary": true, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "game_channel_id": { - "name": "game_channel_id", - "type": "int", - "unsigned": true, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "key": { - "name": "key", - "type": "varchar(128)", + "description": { + "name": "description", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 128, + "length": 255, "precision": null, "scale": null, "default": null, @@ -1208,21 +1052,69 @@ "enumItems": [], "mappedType": "string" }, - "value": { - "name": "value", - "type": "varchar(512)", + "members_visible": { + "name": "members_visible", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 512, + "length": 1, + "precision": null, + "scale": null, + "default": "false", + "comment": null, + "enumItems": [], + "mappedType": "boolean" + }, + "rules": { + "name": "rules", + "type": "json", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "json" + }, + "rule_mode": { + "name": "rule_mode", + "type": "enum('$and','$or')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": "'$and'", + "comment": null, + "enumItems": ["$and", "$or"], + "mappedType": "enum" + }, + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" }, "created_at": { "name": "created_at", @@ -1232,7 +1124,23 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -1241,58 +1149,58 @@ "mappedType": "datetime" } }, - "name": "game_channel_prop", + "name": "player_group", "indexes": [ { - "columnNames": ["game_channel_id"], - "keyName": "game_channel_prop_game_channel_id_index", - "unique": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "player_group_game_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_channel_prop_game_channel_id_foreign": { - "columnNames": ["game_channel_id"], - "constraintName": "game_channel_prop_game_channel_id_foreign", - "localTableName": "game_channel_prop", - "referencedTableName": "game_channel", + "player_group_game_id_foreign": { + "constraintName": "player_group_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "player_group", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { "id": { "name": "id", - "type": "int", - "unsigned": true, - "autoincrement": true, + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, "primary": true, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "game_channel_id": { - "name": "game_channel_id", + "game_id": { + "name": "game_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -1300,76 +1208,76 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "created_by_id": { - "name": "created_by_id", + "auth_id": { + "name": "auth_id", "type": "int", "unsigned": true, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "last_updated_by_id": { - "name": "last_updated_by_id", + "presence_id": { + "name": "presence_id", "type": "int", "unsigned": true, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "key": { - "name": "key", - "type": "varchar(128)", + "dev_build": { + "name": "dev_build", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 128, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "boolean" }, - "value": { - "name": "value", - "type": "varchar(512)", + "last_seen_at": { + "name": "last_seen_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 512, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "datetime" }, "created_at": { "name": "created_at", @@ -1379,7 +1287,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -1395,7 +1303,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -1404,77 +1312,87 @@ "mappedType": "datetime" } }, - "name": "game_channel_storage_prop", + "name": "player", "indexes": [ { - "columnNames": ["created_by_id"], - "keyName": "game_channel_storage_prop_created_by_id_index", - "unique": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "player_game_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["game_channel_id"], - "keyName": "game_channel_storage_prop_game_channel_id_index", - "unique": false, + "columnNames": ["auth_id"], + "composite": false, + "keyName": "player_auth_id_unique", + "constraint": true, "primary": false, - "constraint": false + "unique": true }, { - "columnNames": ["game_channel_id", "key"], - "keyName": "game_channel_storage_prop_game_channel_id_key_index", - "unique": false, + "columnNames": ["presence_id"], + "composite": false, + "keyName": "player_presence_id_unique", + "constraint": true, "primary": false, + "unique": true + }, + { + "columnNames": ["last_seen_at"], + "composite": false, + "keyName": "player_last_seen_at_index", "constraint": false, - "composite": true + "primary": false, + "unique": false }, { - "columnNames": ["last_updated_by_id"], - "keyName": "game_channel_storage_prop_last_updated_by_id_index", - "unique": false, + "columnNames": ["created_at"], + "composite": false, + "keyName": "player_created_at_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_channel_storage_prop_created_by_id_foreign": { - "columnNames": ["created_by_id"], - "constraintName": "game_channel_storage_prop_created_by_id_foreign", - "localTableName": "game_channel_storage_prop", - "referencedTableName": "player_alias", + "player_game_id_foreign": { + "constraintName": "player_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "player", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game", + "updateRule": "cascade" }, - "game_channel_storage_prop_game_channel_id_foreign": { - "columnNames": ["game_channel_id"], - "constraintName": "game_channel_storage_prop_game_channel_id_foreign", - "localTableName": "game_channel_storage_prop", - "referencedTableName": "game_channel", + "player_auth_id_foreign": { + "constraintName": "player_auth_id_foreign", + "columnNames": ["auth_id"], + "localTableName": "player", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_auth", + "deleteRule": "set null", + "updateRule": "cascade" }, - "game_channel_storage_prop_last_updated_by_id_foreign": { - "columnNames": ["last_updated_by_id"], - "constraintName": "game_channel_storage_prop_last_updated_by_id_foreign", - "localTableName": "game_channel_storage_prop", - "referencedTableName": "player_alias", + "player_presence_id_foreign": { + "constraintName": "player_presence_id_foreign", + "columnNames": ["presence_id"], + "localTableName": "player", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_presence", + "deleteRule": "set null", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -1487,118 +1405,154 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "category_id": { - "name": "category_id", - "type": "int", - "unsigned": true, + "player_id": { + "name": "player_id", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "player_alias_id": { - "name": "player_alias_id", - "type": "int", - "unsigned": true, + "queued_at": { + "name": "queued_at", + "type": "datetime", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" - }, - "comment": { - "name": "comment", - "type": "text", - "unsigned": false, - "autoincrement": false, + "mappedType": "datetime" + } + }, + "name": "players_to_delete", + "indexes": [ + { + "columnNames": ["player_id"], + "composite": false, + "keyName": "players_to_delete_player_id_index", + "constraint": false, "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "players_to_delete_player_id_foreign": { + "constraintName": "players_to_delete_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "players_to_delete", + "referencedColumnNames": ["id"], + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "int", + "unsigned": true, + "autoincrement": true, + "primary": true, "nullable": false, "unique": false, - "length": 65535, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "text" + "mappedType": "integer" }, - "anonymised": { - "name": "anonymised", - "type": "tinyint(1)", + "player_id": { + "name": "player_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 3, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "key": { + "name": "key", + "type": "varchar(128)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 128, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "value": { + "name": "value", + "type": "varchar(512)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 512, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "deleted_at": { - "name": "deleted_at", + "created_at": { + "name": "created_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -1607,53 +1561,55 @@ "mappedType": "datetime" } }, - "name": "game_feedback", + "name": "player_prop", "indexes": [ { - "columnNames": ["category_id"], - "keyName": "game_feedback_category_id_index", - "unique": false, + "columnNames": ["player_id"], + "composite": false, + "keyName": "player_prop_player_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["player_alias_id"], - "keyName": "game_feedback_player_alias_id_index", - "unique": false, + "columnNames": ["key"], + "composite": false, + "keyName": "player_prop_key_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "idx_playerprop_key_value", + "columnNames": ["value"], + "composite": false, + "constraint": false, + "primary": false, + "unique": false, + "expression": "alter table `player_prop` add index `idx_playerprop_key_value`(`key`, `value`)" }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_feedback_category_id_foreign": { - "columnNames": ["category_id"], - "constraintName": "game_feedback_category_id_foreign", - "localTableName": "game_feedback", - "referencedTableName": "game_feedback_category", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" - }, - "game_feedback_player_alias_id_foreign": { - "columnNames": ["player_alias_id"], - "constraintName": "game_feedback_player_alias_id_foreign", - "localTableName": "game_feedback", - "referencedTableName": "player_alias", + "player_prop_player_id_foreign": { + "constraintName": "player_prop_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "player_prop", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -1666,31 +1622,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "internal_name": { - "name": "internal_name", - "type": "varchar(255)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "name": { - "name": "name", + "player_id": { + "name": "player_id", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -1705,79 +1645,47 @@ "enumItems": [], "mappedType": "string" }, - "description": { - "name": "description", - "type": "varchar(255)", + "type": { + "name": "type", + "type": "tinyint", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "enum" }, - "anonymised": { - "name": "anonymised", - "type": "tinyint(1)", + "extra": { + "name": "extra", + "type": "json", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "boolean" - }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "created_at": { - "name": "created_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 0, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "json" }, - "updated_at": { - "name": "updated_at", + "created_at": { + "name": "created_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -1786,45 +1694,38 @@ "mappedType": "datetime" } }, - "name": "game_feedback_category", + "name": "player_auth_activity", "indexes": [ { - "columnNames": ["game_id"], - "keyName": "game_feedback_category_game_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["game_id", "internal_name"], - "keyName": "game_feedback_category_game_id_internal_name_index", - "unique": false, - "primary": false, + "columnNames": ["player_id"], + "composite": false, + "keyName": "player_auth_activity_player_id_index", "constraint": false, - "composite": true + "primary": false, + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_feedback_category_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "game_feedback_category_game_id_foreign", - "localTableName": "game_feedback_category", - "referencedTableName": "game", + "player_auth_activity_player_id_foreign": { + "constraintName": "player_auth_activity_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "player_auth_activity", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -1837,38 +1738,38 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "game_feedback_id": { - "name": "game_feedback_id", - "type": "int", - "unsigned": true, + "service": { + "name": "service", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "key": { - "name": "key", - "type": "varchar(128)", + "identifier": { + "name": "identifier", + "type": "varchar(1024)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 128, + "length": 1024, "precision": null, "scale": null, "default": null, @@ -1876,15 +1777,15 @@ "enumItems": [], "mappedType": "string" }, - "value": { - "name": "value", - "type": "varchar(512)", - "unsigned": false, - "autoincrement": false, + "player_id": { + "name": "player_id", + "type": "varchar(255)", + "unsigned": false, + "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 512, + "length": 255, "precision": null, "scale": null, "default": null, @@ -1892,6 +1793,22 @@ "enumItems": [], "mappedType": "string" }, + "last_seen_at": { + "name": "last_seen_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, "created_at": { "name": "created_at", "type": "datetime", @@ -1900,7 +1817,23 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -1909,37 +1842,47 @@ "mappedType": "datetime" } }, - "name": "game_feedback_prop", + "name": "player_alias", "indexes": [ { - "columnNames": ["game_feedback_id"], - "keyName": "game_feedback_prop_game_feedback_id_index", - "unique": false, + "columnNames": ["player_id"], + "composite": false, + "keyName": "player_alias_player_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "idx_player_alias_service_identifier", + "columnNames": [], + "composite": false, + "constraint": false, + "primary": false, + "unique": false, + "expression": "alter table `player_alias` add index `idx_player_alias_service_identifier`(`service`(191), `identifier`(191))" }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_feedback_prop_game_feedback_id_foreign": { - "columnNames": ["game_feedback_id"], - "constraintName": "game_feedback_prop_game_feedback_id_foreign", - "localTableName": "game_feedback_prop", - "referencedTableName": "game_feedback", + "player_alias_player_id_foreign": { + "constraintName": "player_alias_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "player_alias", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -1952,47 +1895,47 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "name": { - "name": "name", - "type": "varchar(255)", - "unsigned": false, + "player_alias_id": { + "name": "player_alias_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "content": { - "name": "content", - "type": "json", + "online": { + "name": "online", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "boolean" }, - "player_id": { - "name": "player_id", + "custom_status": { + "name": "custom_status", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -2002,7 +1945,7 @@ "length": 255, "precision": null, "scale": null, - "default": null, + "default": "''", "comment": null, "enumItems": [], "mappedType": "string" @@ -2015,7 +1958,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -2031,7 +1974,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -2040,37 +1983,38 @@ "mappedType": "datetime" } }, - "name": "game_save", + "name": "player_presence", "indexes": [ { - "columnNames": ["player_id"], - "keyName": "game_save_player_id_index", - "unique": false, + "columnNames": ["player_alias_id"], + "composite": false, + "keyName": "player_presence_player_alias_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_save_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "game_save_player_id_foreign", - "localTableName": "game_save", - "referencedTableName": "player", + "player_presence_player_alias_id_foreign": { + "constraintName": "player_presence_player_alias_id_foreign", + "columnNames": ["player_alias_id"], + "localTableName": "player_presence", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -2083,295 +2027,260 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "secret": { - "name": "secret", - "type": "varchar(255)", - "unsigned": false, + "subscriber_id": { + "name": "subscriber_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" - } - }, - "name": "game_secret", - "indexes": [ - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - } - ], - "checks": [], - "foreignKeys": {}, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "id": { - "name": "id", + "mappedType": "integer" + }, + "subscribed_to_id": { + "name": "subscribed_to_id", "type": "int", "unsigned": true, - "autoincrement": true, - "primary": true, + "autoincrement": false, + "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "internal_name": { - "name": "internal_name", - "type": "varchar(255)", + "confirmed": { + "name": "confirmed", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "boolean" }, - "name": { - "name": "name", - "type": "varchar(255)", + "relationship_type": { + "name": "relationship_type", + "type": "enum('unidirectional','bidirectional')", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, - "enumItems": [], - "mappedType": "string" + "enumItems": ["unidirectional", "bidirectional"], + "mappedType": "enum" }, - "global": { - "name": "global", - "type": "tinyint(1)", + "created_at": { + "name": "created_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "datetime" }, - "global_value": { - "name": "global_value", - "type": "double", + "updated_at": { + "name": "updated_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 22, + "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "double" + "mappedType": "datetime" + } + }, + "name": "player_alias_subscription", + "indexes": [ + { + "columnNames": ["subscriber_id"], + "composite": false, + "keyName": "player_alias_subscription_subscriber_id_index", + "constraint": false, + "primary": false, + "unique": false }, - "max_change": { - "name": "max_change", - "type": "double", - "unsigned": false, - "autoincrement": false, + { + "columnNames": ["subscribed_to_id"], + "composite": false, + "keyName": "player_alias_subscription_subscribed_to_id_index", + "constraint": false, "primary": false, - "nullable": true, - "unique": false, - "length": null, - "precision": 22, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "double" + "unique": false }, - "min_value": { - "name": "min_value", - "type": "double", - "unsigned": false, - "autoincrement": false, + { + "keyName": "player_alias_subscription_subscribed_to_id_confirmed_index", + "columnNames": ["subscribed_to_id", "confirmed"], + "composite": true, + "constraint": false, "primary": false, - "nullable": true, - "unique": false, - "length": null, - "precision": 22, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "double" + "unique": false }, - "max_value": { - "name": "max_value", - "type": "double", - "unsigned": false, - "autoincrement": false, + { + "keyName": "player_alias_subscription_subscriber_id_subscribed_to_id_unique", + "columnNames": ["subscriber_id", "subscribed_to_id"], + "composite": true, + "constraint": true, "primary": false, - "nullable": true, - "unique": false, - "length": null, - "precision": 22, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "double" - }, - "default_value": { - "name": "default_value", - "type": "double", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 22, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "double" - }, - "min_time_between_updates": { - "name": "min_time_between_updates", - "type": "int", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" + "unique": true }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "player_alias_subscription_subscriber_id_foreign": { + "constraintName": "player_alias_subscription_subscriber_id_foreign", + "columnNames": ["subscriber_id"], + "localTableName": "player_alias_subscription", + "referencedColumnNames": ["id"], + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "player_alias_subscription_subscribed_to_id_foreign": { + "constraintName": "player_alias_subscription_subscribed_to_id_foreign", + "columnNames": ["subscribed_to_id"], + "localTableName": "player_alias_subscription", + "referencedColumnNames": ["id"], + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "player_group_id": { + "name": "player_group_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, - "primary": false, + "primary": true, "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "player_id": { + "name": "player_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, - "primary": false, + "primary": true, "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" } }, - "name": "game_stat", + "name": "player_group_members", "indexes": [ { - "columnNames": ["game_id"], - "keyName": "game_stat_game_id_index", - "unique": false, + "columnNames": ["player_group_id"], + "composite": false, + "keyName": "player_group_members_player_group_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["game_id", "internal_name"], - "keyName": "game_stat_game_id_internal_name_index", - "unique": false, - "primary": false, + "columnNames": ["player_id"], + "composite": false, + "keyName": "player_group_members_player_id_index", "constraint": false, - "composite": true + "primary": false, + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["player_group_id", "player_id"], + "composite": true, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "game_stat_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "game_stat_game_id_foreign", - "localTableName": "game_stat", - "referencedTableName": "game", + "player_group_members_player_group_id_foreign": { + "constraintName": "player_group_members_player_group_id_foreign", + "columnNames": ["player_group_id"], + "localTableName": "player_group_members", + "referencedColumnNames": ["id"], + "referencedTableName": "player_group", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "player_group_members_player_id_foreign": { + "constraintName": "player_group_members_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "player_group_members", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -2384,31 +2293,31 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "integration_id": { - "name": "integration_id", - "type": "int", - "unsigned": true, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "request": { - "name": "request", + "content": { + "name": "content", "type": "json", "unsigned": false, "autoincrement": false, @@ -2423,21 +2332,21 @@ "enumItems": [], "mappedType": "json" }, - "response": { - "name": "response", - "type": "json", + "player_id": { + "name": "player_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "string" }, "created_at": { "name": "created_at", @@ -2447,7 +2356,23 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -2456,37 +2381,38 @@ "mappedType": "datetime" } }, - "name": "google_play_games_integration_event", + "name": "game_save", "indexes": [ { - "columnNames": ["integration_id"], - "keyName": "google_play_games_integration_event_integration_id_index", - "unique": false, + "columnNames": ["player_id"], + "composite": false, + "keyName": "game_save_player_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "google_play_games_integration_event_integration_id_foreign": { - "columnNames": ["integration_id"], - "constraintName": "google_play_games_integration_event_integration_id_foreign", - "localTableName": "google_play_games_integration_event", - "referencedTableName": "integration", + "game_save_player_id_foreign": { + "constraintName": "game_save_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "game_save", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -2499,48 +2425,48 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "type": { - "name": "type", - "type": "enum('steamworks','google-play-games')", + "internal_name": { + "name": "internal_name", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 17, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, - "enumItems": ["steamworks", "google-play-games"], - "mappedType": "enum" + "enumItems": [], + "mappedType": "string" }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, + "name": { + "name": "name", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "config": { - "name": "config", - "type": "json", + "sort_mode": { + "name": "sort_mode", + "type": "enum('desc','asc')", "unsigned": false, "autoincrement": false, "primary": false, @@ -2549,39 +2475,87 @@ "length": null, "precision": null, "scale": null, - "default": null, + "default": "'desc'", "comment": null, - "enumItems": [], - "mappedType": "json" + "enumItems": ["desc", "asc"], + "mappedType": "enum" }, - "deleted_at": { - "name": "deleted_at", - "type": "datetime", + "unique": { + "name": "unique", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 0, + "length": 1, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "boolean" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "unique_by_props": { + "name": "unique_by_props", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", + "comment": null, + "enumItems": [], + "mappedType": "boolean" + }, + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "refresh_interval": { + "name": "refresh_interval", + "type": "enum('never','daily','weekly','monthly','yearly')", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": "'never'", + "comment": null, + "enumItems": ["never", "daily", "weekly", "monthly", "yearly"], + "mappedType": "enum" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" @@ -2594,7 +2568,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -2603,37 +2577,45 @@ "mappedType": "datetime" } }, - "name": "integration", + "name": "leaderboard", "indexes": [ { "columnNames": ["game_id"], - "keyName": "integration_game_id_index", - "unique": false, + "composite": false, + "keyName": "leaderboard_game_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "leaderboard_game_id_internal_name_index", + "columnNames": ["game_id", "internal_name"], + "composite": true, + "constraint": false, + "primary": false, + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "integration_game_id_foreign": { + "leaderboard_game_id_foreign": { + "constraintName": "leaderboard_game_id_foreign", "columnNames": ["game_id"], - "constraintName": "integration_game_id_foreign", - "localTableName": "integration", - "referencedTableName": "game", + "localTableName": "leaderboard", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -2646,92 +2628,92 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "token": { - "name": "token", - "type": "varchar(255)", + "score": { + "name": "score", + "type": "double", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "double" }, - "email": { - "name": "email", - "type": "varchar(255)", - "unsigned": false, + "leaderboard_id": { + "name": "leaderboard_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "type": { - "name": "type", - "type": "tinyint", - "unsigned": false, + "player_alias_id": { + "name": "player_alias_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "2", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "tinyint" + "mappedType": "integer" }, - "organisation_id": { - "name": "organisation_id", - "type": "int", - "unsigned": true, + "hidden": { + "name": "hidden", + "type": "tinyint(1)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, + "length": 1, + "precision": null, + "scale": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "boolean" }, - "invited_by_user_id": { - "name": "invited_by_user_id", - "type": "int", - "unsigned": true, + "props_digest": { + "name": "props_digest", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, "created_at": { "name": "created_at", @@ -2741,7 +2723,39 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "deleted_at": { + "name": "deleted_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -2750,53 +2764,80 @@ "mappedType": "datetime" } }, - "name": "invite", + "name": "leaderboard_entry", "indexes": [ { - "columnNames": ["invited_by_user_id"], - "keyName": "invite_invited_by_user_id_index", - "unique": false, + "columnNames": ["leaderboard_id"], + "composite": false, + "keyName": "leaderboard_entry_leaderboard_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["organisation_id"], - "keyName": "invite_organisation_id_index", - "unique": false, + "columnNames": ["player_alias_id"], + "composite": false, + "keyName": "leaderboard_entry_player_alias_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "columnNames": ["hidden"], + "composite": false, + "keyName": "leaderboard_entry_hidden_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["props_digest"], + "composite": false, + "keyName": "leaderboard_entry_props_digest_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "idx_leaderboardentry_hidden_leaderboard_id_score", + "columnNames": ["score"], + "composite": false, + "constraint": false, + "primary": false, + "unique": false, + "expression": "alter table `leaderboard_entry` add index `idx_leaderboardentry_hidden_leaderboard_id_score`(`hidden`, `leaderboard_id`, `score`)" }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "invite_invited_by_user_id_foreign": { - "columnNames": ["invited_by_user_id"], - "constraintName": "invite_invited_by_user_id_foreign", - "localTableName": "invite", - "referencedTableName": "user", + "leaderboard_entry_leaderboard_id_foreign": { + "constraintName": "leaderboard_entry_leaderboard_id_foreign", + "columnNames": ["leaderboard_id"], + "localTableName": "leaderboard_entry", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "leaderboard", + "deleteRule": "cascade", + "updateRule": "cascade" }, - "invite_organisation_id_foreign": { - "columnNames": ["organisation_id"], - "constraintName": "invite_organisation_id_foreign", - "localTableName": "invite", - "referencedTableName": "organisation", + "leaderboard_entry_player_alias_id_foreign": { + "constraintName": "leaderboard_entry_player_alias_id_foreign", + "columnNames": ["player_alias_id"], + "localTableName": "leaderboard_entry", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -2809,38 +2850,38 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "internal_name": { - "name": "internal_name", - "type": "varchar(255)", - "unsigned": false, + "leaderboard_entry_id": { + "name": "leaderboard_entry_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "name": { - "name": "name", - "type": "varchar(255)", + "key": { + "name": "key", + "type": "varchar(128)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": 128, "precision": null, "scale": null, "default": null, @@ -2848,53 +2889,21 @@ "enumItems": [], "mappedType": "string" }, - "sort_mode": { - "name": "sort_mode", - "type": "enum('desc','asc')", + "value": { + "name": "value", + "type": "varchar(512)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 4, + "length": 512, "precision": null, "scale": null, - "default": "'desc'", - "comment": null, - "enumItems": ["desc", "asc"], - "mappedType": "enum" - }, - "unique": { - "name": "unique", - "type": "tinyint(1)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "boolean" - }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, "created_at": { "name": "created_at", @@ -2904,102 +2913,47 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, - "precision": null, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "datetime" - }, - "updated_at": { - "name": "updated_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" - }, - "refresh_interval": { - "name": "refresh_interval", - "type": "enum('never','daily','weekly','monthly','yearly')", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 7, - "precision": null, - "scale": null, - "default": "'never'", - "comment": null, - "enumItems": ["never", "daily", "weekly", "monthly", "yearly"], - "mappedType": "enum" - }, - "unique_by_props": { - "name": "unique_by_props", - "type": "tinyint(1)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" } }, - "name": "leaderboard", + "name": "leaderboard_entry_prop", "indexes": [ { - "columnNames": ["game_id"], - "keyName": "leaderboard_game_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["game_id", "internal_name"], - "keyName": "leaderboard_game_id_internal_name_index", - "unique": false, - "primary": false, + "columnNames": ["leaderboard_entry_id"], + "composite": false, + "keyName": "leaderboard_entry_prop_leaderboard_entry_id_index", "constraint": false, - "composite": true + "primary": false, + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "leaderboard_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "leaderboard_game_id_foreign", - "localTableName": "leaderboard", - "referencedTableName": "game", + "leaderboard_entry_prop_leaderboard_entry_id_foreign": { + "constraintName": "leaderboard_entry_prop_leaderboard_entry_id_foreign", + "columnNames": ["leaderboard_entry_id"], + "localTableName": "leaderboard_entry_prop", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "leaderboard_entry", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -3012,47 +2966,31 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "score": { - "name": "score", - "type": "double", + "type": { + "name": "type", + "type": "enum('steamworks','google-play-games')", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 22, + "precision": null, "scale": null, "default": null, "comment": null, - "enumItems": [], - "mappedType": "double" - }, - "leaderboard_id": { - "name": "leaderboard_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" + "enumItems": ["steamworks", "google-play-games"], + "mappedType": "enum" }, - "player_alias_id": { - "name": "player_alias_id", + "game_id": { + "name": "game_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -3060,38 +2998,38 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "config": { + "name": "config", + "type": "json", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "json" }, - "updated_at": { - "name": "updated_at", + "deleted_at": { + "name": "deleted_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -3099,31 +3037,15 @@ "enumItems": [], "mappedType": "datetime" }, - "hidden": { - "name": "hidden", - "type": "tinyint(1)", + "created_at": { + "name": "created_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" - }, - "deleted_at": { - "name": "deleted_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": false, - "length": 0, "precision": null, "scale": null, "default": null, @@ -3131,92 +3053,54 @@ "enumItems": [], "mappedType": "datetime" }, - "props_digest": { - "name": "props_digest", - "type": "varchar(255)", + "updated_at": { + "name": "updated_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "datetime" } }, - "name": "leaderboard_entry", + "name": "integration", "indexes": [ { - "columnNames": ["hidden", "leaderboard_id", "score"], - "keyName": "idx_leaderboardentry_hidden_leaderboard_id_score", - "unique": false, - "primary": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "integration_game_id_index", "constraint": false, - "composite": true - }, - { - "columnNames": ["hidden"], - "keyName": "leaderboard_entry_hidden_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["leaderboard_id"], - "keyName": "leaderboard_entry_leaderboard_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["player_alias_id"], - "keyName": "leaderboard_entry_player_alias_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["props_digest"], - "keyName": "leaderboard_entry_props_digest_index", - "unique": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "leaderboard_entry_leaderboard_id_foreign": { - "columnNames": ["leaderboard_id"], - "constraintName": "leaderboard_entry_leaderboard_id_foreign", - "localTableName": "leaderboard_entry", - "referencedTableName": "leaderboard", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" - }, - "leaderboard_entry_player_alias_id_foreign": { - "columnNames": ["player_alias_id"], - "constraintName": "leaderboard_entry_player_alias_id_foreign", - "localTableName": "leaderboard_entry", - "referencedTableName": "player_alias", + "integration_game_id_foreign": { + "constraintName": "integration_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "integration", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -3229,15 +3113,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "leaderboard_entry_id": { - "name": "leaderboard_entry_id", + "integration_id": { + "name": "integration_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -3245,44 +3129,44 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "key": { - "name": "key", - "type": "varchar(128)", + "request": { + "name": "request", + "type": "json", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 128, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "json" }, - "value": { - "name": "value", - "type": "varchar(512)", + "response": { + "name": "response", + "type": "json", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 512, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "json" }, "created_at": { "name": "created_at", @@ -3292,7 +3176,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -3301,37 +3185,37 @@ "mappedType": "datetime" } }, - "name": "leaderboard_entry_prop", + "name": "google_play_games_integration_event", "indexes": [ { - "columnNames": ["leaderboard_entry_id"], - "keyName": "leaderboard_entry_prop_entry_id_index", - "unique": false, + "columnNames": ["integration_id"], + "composite": false, + "keyName": "google_play_games_integration_event_integration_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "leaderboard_entry_prop_leaderboard_entry_id_foreign": { - "columnNames": ["leaderboard_entry_id"], - "constraintName": "leaderboard_entry_prop_leaderboard_entry_id_foreign", - "localTableName": "leaderboard_entry_prop", - "referencedTableName": "leaderboard_entry", + "google_play_games_integration_event_integration_id_foreign": { + "constraintName": "google_play_games_integration_event_integration_id_foreign", + "columnNames": ["integration_id"], + "localTableName": "google_play_games_integration_event", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "integration", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -3344,15 +3228,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "email": { - "name": "email", + "internal_name": { + "name": "internal_name", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -3383,184 +3267,133 @@ "enumItems": [], "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "global": { + "name": "global", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 1, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "boolean" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "global_value": { + "name": "global_value", + "type": "double", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "double" }, - "pricing_plan_id": { - "name": "pricing_plan_id", - "type": "int", - "unsigned": true, + "max_change": { + "name": "max_change", + "type": "double", + "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - } - }, - "name": "organisation", - "indexes": [ - { - "columnNames": ["pricing_plan_id"], - "keyName": "organisation_pricing_plan_id_unique", - "unique": true, - "primary": false, - "constraint": true - }, - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - } - ], - "checks": [], - "foreignKeys": { - "organisation_pricing_plan_id_foreign": { - "columnNames": ["pricing_plan_id"], - "constraintName": "organisation_pricing_plan_id_foreign", - "localTableName": "organisation", - "referencedTableName": "organisation_pricing_plan", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - } - }, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "id": { - "name": "id", - "type": "int", - "unsigned": true, - "autoincrement": true, - "primary": true, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "double" }, - "pricing_plan_id": { - "name": "pricing_plan_id", - "type": "int", - "unsigned": true, + "min_value": { + "name": "min_value", + "type": "double", + "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "double" }, - "status": { - "name": "status", - "type": "varchar(255)", + "max_value": { + "name": "max_value", + "type": "double", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, - "default": "'active'", + "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "double" }, - "stripe_price_id": { - "name": "stripe_price_id", - "type": "varchar(255)", + "default_value": { + "name": "default_value", + "type": "double", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "double" }, - "stripe_customer_id": { - "name": "stripe_customer_id", - "type": "varchar(255)", + "min_time_between_updates": { + "name": "min_time_between_updates", + "type": "int", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "end_date": { - "name": "end_date", - "type": "datetime", - "unsigned": false, + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "integer" }, "created_at": { "name": "created_at", @@ -3570,7 +3403,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -3586,71 +3419,79 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" - }, - "last_usage_warning_threshold": { - "name": "last_usage_warning_threshold", - "type": "int", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" } }, - "name": "organisation_pricing_plan", + "name": "game_stat", "indexes": [ { - "columnNames": ["pricing_plan_id"], - "keyName": "organisation_pricing_plan_pricing_plan_id_index", - "unique": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "game_stat_game_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "game_stat_game_id_internal_name_index", + "columnNames": ["game_id", "internal_name"], + "composite": true, + "constraint": false, + "primary": false, + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "organisation_pricing_plan_pricing_plan_id_foreign": { - "columnNames": ["pricing_plan_id"], - "constraintName": "organisation_pricing_plan_pricing_plan_id_foreign", - "localTableName": "organisation_pricing_plan", - "referencedTableName": "pricing_plan", + "game_stat_game_id_foreign": { + "constraintName": "game_stat_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "game_stat", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { "id": { "name": "id", + "type": "int", + "unsigned": true, + "autoincrement": true, + "primary": true, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "player_id": { + "name": "player_id", "type": "varchar(255)", "unsigned": false, "autoincrement": false, - "primary": true, + "primary": false, "nullable": false, "unique": false, "length": 255, @@ -3661,8 +3502,8 @@ "enumItems": [], "mappedType": "string" }, - "game_id": { - "name": "game_id", + "stat_id": { + "name": "stat_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -3670,28 +3511,28 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "last_seen_at": { - "name": "last_seen_at", - "type": "datetime", + "value": { + "name": "value", + "type": "double", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "double" }, "created_at": { "name": "created_at", @@ -3701,7 +3542,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -3717,140 +3558,81 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" - }, - "auth_id": { - "name": "auth_id", - "type": "int", - "unsigned": true, - "autoincrement": false, + } + }, + "name": "player_game_stat", + "indexes": [ + { + "columnNames": ["player_id"], + "composite": false, + "keyName": "player_game_stat_player_id_index", + "constraint": false, "primary": false, - "nullable": true, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "presence_id": { - "name": "presence_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" - }, - "dev_build": { - "name": "dev_build", - "type": "tinyint(1)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" - } - }, - "name": "player", - "indexes": [ - { - "columnNames": ["auth_id"], - "keyName": "player_auth_id_unique", - "unique": true, - "primary": false, - "constraint": true + "unique": false }, { - "columnNames": ["created_at"], - "keyName": "player_created_at_index", - "unique": false, + "columnNames": ["stat_id"], + "composite": false, + "keyName": "player_game_stat_stat_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["game_id"], - "keyName": "player_game_id_index", - "unique": false, + "keyName": "idx_playergamestat_stat_id_value", + "columnNames": ["value"], + "composite": false, + "constraint": false, "primary": false, - "constraint": false - }, - { - "columnNames": ["last_seen_at"], - "keyName": "player_last_seen_at_index", "unique": false, - "primary": false, - "constraint": false + "expression": "alter table `player_game_stat` add index `idx_playergamestat_stat_id_value`(`stat_id`, `value`)" }, { - "columnNames": ["presence_id"], - "keyName": "player_presence_id_unique", - "unique": true, + "keyName": "player_game_stat_player_id_stat_id_unique", + "columnNames": ["player_id", "stat_id"], + "composite": true, + "constraint": true, "primary": false, - "constraint": true + "unique": true }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "player_auth_id_foreign": { - "columnNames": ["auth_id"], - "constraintName": "player_auth_id_foreign", - "localTableName": "player", - "referencedTableName": "player_auth", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" - }, - "player_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "player_game_id_foreign", - "localTableName": "player", - "referencedTableName": "game", + "player_game_stat_player_id_foreign": { + "constraintName": "player_game_stat_player_id_foreign", + "columnNames": ["player_id"], + "localTableName": "player_game_stat", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "player", + "deleteRule": "cascade", + "updateRule": "cascade" }, - "player_presence_id_foreign": { - "columnNames": ["presence_id"], - "constraintName": "player_presence_id_foreign", - "localTableName": "player", - "referencedTableName": "player_presence", + "player_game_stat_stat_id_foreign": { + "constraintName": "player_game_stat_stat_id_foreign", + "columnNames": ["stat_id"], + "localTableName": "player_game_stat", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" + "referencedTableName": "game_stat", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -3863,15 +3645,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "service": { - "name": "service", + "internal_name": { + "name": "internal_name", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -3886,15 +3668,15 @@ "enumItems": [], "mappedType": "string" }, - "identifier": { - "name": "identifier", - "type": "varchar(1024)", + "name": { + "name": "name", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 1024, + "length": 255, "precision": null, "scale": null, "default": null, @@ -3902,8 +3684,8 @@ "enumItems": [], "mappedType": "string" }, - "player_id": { - "name": "player_id", + "description": { + "name": "description", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -3918,31 +3700,47 @@ "enumItems": [], "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "anonymised": { + "name": "anonymised", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 1, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "boolean" }, - "updated_at": { - "name": "updated_at", + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "created_at": { + "name": "created_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -3950,62 +3748,62 @@ "enumItems": [], "mappedType": "datetime" }, - "last_seen_at": { - "name": "last_seen_at", + "updated_at": { + "name": "updated_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, - "default": "CURRENT_TIMESTAMP", + "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" } }, - "name": "player_alias", + "name": "game_feedback_category", "indexes": [ { - "columnNames": ["service", "identifier"], - "keyName": "idx_player_alias_service_identifier", - "unique": false, - "primary": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "game_feedback_category_game_id_index", "constraint": false, - "composite": true + "primary": false, + "unique": false }, { - "columnNames": ["player_id"], - "keyName": "player_alias_player_id_index", - "unique": false, + "keyName": "game_feedback_category_game_id_internal_name_index", + "columnNames": ["game_id", "internal_name"], + "composite": true, + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "player_alias_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "player_alias_player_id_foreign", - "localTableName": "player_alias", - "referencedTableName": "player", + "game_feedback_category_game_id_foreign": { + "constraintName": "game_feedback_category_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "game_feedback_category", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -4018,31 +3816,31 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "subscriber_id": { - "name": "subscriber_id", + "category_id": { + "name": "category_id", "type": "int", "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, - "unique": true, + "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "subscribed_to_id": { - "name": "subscribed_to_id", + "player_alias_id": { + "name": "player_alias_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -4050,44 +3848,60 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "confirmed": { - "name": "confirmed", - "type": "tinyint(1)", + "comment": { + "name": "comment", + "type": "text", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "text" }, - "relationship_type": { - "name": "relationship_type", - "type": "enum('unidirectional','bidirectional')", + "anonymised": { + "name": "anonymised", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 14, + "length": 1, "precision": null, "scale": null, "default": null, "comment": null, - "enumItems": ["unidirectional", "bidirectional"], - "mappedType": "enum" + "enumItems": [], + "mappedType": "boolean" + }, + "deleted_at": { + "name": "deleted_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" }, "created_at": { "name": "created_at", @@ -4097,7 +3911,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -4113,7 +3927,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -4122,69 +3936,55 @@ "mappedType": "datetime" } }, - "name": "player_alias_subscription", + "name": "game_feedback", "indexes": [ { - "columnNames": ["subscribed_to_id", "confirmed"], - "keyName": "player_alias_subscription_subscribed_to_id_confirmed_index", - "unique": false, - "primary": false, + "columnNames": ["category_id"], + "composite": false, + "keyName": "game_feedback_category_id_index", "constraint": false, - "composite": true - }, - { - "columnNames": ["subscribed_to_id"], - "keyName": "player_alias_subscription_subscribed_to_id_index", - "unique": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["subscriber_id"], - "keyName": "player_alias_subscription_subscriber_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["subscriber_id", "subscribed_to_id"], - "keyName": "player_alias_subscription_subscriber_id_subscribed_to_id_unique", - "unique": true, + "columnNames": ["player_alias_id"], + "composite": false, + "keyName": "game_feedback_player_alias_id_index", + "constraint": false, "primary": false, - "constraint": true, - "composite": true + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "player_alias_subscription_subscribed_to_id_foreign": { - "columnNames": ["subscribed_to_id"], - "constraintName": "player_alias_subscription_subscribed_to_id_foreign", - "localTableName": "player_alias_subscription", - "referencedTableName": "player_alias", + "game_feedback_category_id_foreign": { + "constraintName": "game_feedback_category_id_foreign", + "columnNames": ["category_id"], + "localTableName": "game_feedback", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game_feedback_category", + "deleteRule": "cascade", + "updateRule": "cascade" }, - "player_alias_subscription_subscriber_id_foreign": { - "columnNames": ["subscriber_id"], - "constraintName": "player_alias_subscription_subscriber_id_foreign", - "localTableName": "player_alias_subscription", - "referencedTableName": "player_alias", + "game_feedback_player_alias_id_foreign": { + "constraintName": "game_feedback_player_alias_id_foreign", + "columnNames": ["player_alias_id"], + "localTableName": "game_feedback", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -4197,38 +3997,38 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "password": { - "name": "password", - "type": "varchar(255)", - "unsigned": false, + "game_feedback_id": { + "name": "game_feedback_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "email": { - "name": "email", - "type": "varchar(255)", + "key": { + "name": "key", + "type": "varchar(128)", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 255, + "length": 128, "precision": null, "scale": null, "default": null, @@ -4236,31 +4036,15 @@ "enumItems": [], "mappedType": "string" }, - "verification_enabled": { - "name": "verification_enabled", - "type": "tinyint(1)", + "value": { + "name": "value", + "type": "varchar(512)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" - }, - "session_key": { - "name": "session_key", - "type": "varchar(255)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": false, - "length": 255, + "length": 512, "precision": null, "scale": null, "default": null, @@ -4268,22 +4052,6 @@ "enumItems": [], "mappedType": "string" }, - "session_created_at": { - "name": "session_created_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": false, - "length": 0, - "precision": null, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "datetime" - }, "created_at": { "name": "created_at", "type": "datetime", @@ -4292,23 +4060,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, - "precision": null, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "datetime" - }, - "updated_at": { - "name": "updated_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -4317,20 +4069,38 @@ "mappedType": "datetime" } }, - "name": "player_auth", + "name": "game_feedback_prop", "indexes": [ { - "columnNames": ["id"], + "columnNames": ["game_feedback_id"], + "composite": false, + "keyName": "game_feedback_prop_game_feedback_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], - "foreignKeys": {}, - "nativeEnums": {}, - "comment": "" + "foreignKeys": { + "game_feedback_prop_game_feedback_id_foreign": { + "constraintName": "game_feedback_prop_game_feedback_id_foreign", + "columnNames": ["game_feedback_id"], + "localTableName": "game_feedback_prop", + "referencedColumnNames": ["id"], + "referencedTableName": "game_feedback", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} }, { "columns": { @@ -4343,15 +4113,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "player_id": { - "name": "player_id", + "name": { + "name": "name", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -4366,25 +4136,25 @@ "enumItems": [], "mappedType": "string" }, - "type": { - "name": "type", - "type": "tinyint", - "unsigned": false, + "owner_id": { + "name": "owner_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 3, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "tinyint" + "mappedType": "integer" }, - "extra": { - "name": "extra", - "type": "json", + "total_messages": { + "name": "total_messages", + "type": "int", "unsigned": false, "autoincrement": false, "primary": false, @@ -4393,96 +4163,45 @@ "length": null, "precision": null, "scale": null, - "default": null, + "default": "0", "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "integer" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "auto_cleanup": { + "name": "auto_cleanup", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 1, "precision": null, "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "datetime" - } - }, - "name": "player_auth_activity", - "indexes": [ - { - "columnNames": ["player_id"], - "keyName": "player_auth_activity_player_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - } - ], - "checks": [], - "foreignKeys": { - "player_auth_activity_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "player_auth_activity_player_id_foreign", - "localTableName": "player_auth_activity", - "referencedTableName": "player", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" - } - }, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "id": { - "name": "id", - "type": "int", - "unsigned": true, - "autoincrement": true, - "primary": true, - "nullable": false, - "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "boolean" }, - "player_id": { - "name": "player_id", - "type": "varchar(255)", + "private": { + "name": "private", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, - "unique": true, - "length": 255, + "unique": false, + "length": 1, "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "boolean" }, - "stat_id": { - "name": "stat_id", + "game_id": { + "name": "game_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -4490,28 +4209,28 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "value": { - "name": "value", - "type": "double", + "temporary_membership": { + "name": "temporary_membership", + "type": "tinyint(1)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 22, + "length": 1, + "precision": null, "scale": null, - "default": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "double" + "mappedType": "boolean" }, "created_at": { "name": "created_at", @@ -4521,7 +4240,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -4537,7 +4256,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -4546,124 +4265,109 @@ "mappedType": "datetime" } }, - "name": "player_game_stat", + "name": "game_channel", "indexes": [ { - "columnNames": ["stat_id", "value"], - "keyName": "idx_playergamestat_stat_id_value", - "unique": false, - "primary": false, + "columnNames": ["owner_id"], + "composite": false, + "keyName": "game_channel_owner_id_index", "constraint": false, - "composite": true - }, - { - "columnNames": ["player_id"], - "keyName": "player_game_stat_player_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["player_id", "stat_id"], - "keyName": "player_game_stat_player_id_stat_id_unique", - "unique": true, "primary": false, - "constraint": true, - "composite": true + "unique": false }, { - "columnNames": ["stat_id"], - "keyName": "player_game_stat_stat_id_index", - "unique": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "game_channel_game_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "player_game_stat_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "player_game_stat_player_id_foreign", - "localTableName": "player_game_stat", - "referencedTableName": "player", + "game_channel_owner_id_foreign": { + "constraintName": "game_channel_owner_id_foreign", + "columnNames": ["owner_id"], + "localTableName": "game_channel", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_alias", + "deleteRule": "set null", + "updateRule": "cascade" }, - "player_game_stat_stat_id_foreign": { - "columnNames": ["stat_id"], - "constraintName": "player_game_stat_stat_id_foreign", - "localTableName": "player_game_stat", - "referencedTableName": "game_stat", + "game_channel_game_id_foreign": { + "constraintName": "game_channel_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "game_channel", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { "id": { "name": "id", - "type": "varchar(255)", - "unsigned": false, - "autoincrement": false, + "type": "int", + "unsigned": true, + "autoincrement": true, "primary": true, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "name": { - "name": "name", - "type": "varchar(255)", - "unsigned": false, + "game_channel_id": { + "name": "game_channel_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "description": { - "name": "description", - "type": "varchar(255)", - "unsigned": false, + "created_by_id": { + "name": "created_by_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "rules": { - "name": "rules", - "type": "json", - "unsigned": false, + "last_updated_by_id": { + "name": "last_updated_by_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, @@ -4674,39 +4378,39 @@ "default": null, "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "integer" }, - "rule_mode": { - "name": "rule_mode", - "type": "enum('$and','$or')", + "key": { + "name": "key", + "type": "varchar(128)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 4, + "length": 128, "precision": null, "scale": null, - "default": "'$and'", + "default": null, "comment": null, - "enumItems": ["$and", "$or"], - "mappedType": "enum" + "enumItems": [], + "mappedType": "string" }, - "game_id": { - "name": "game_id", - "type": "int", - "unsigned": true, + "value": { + "name": "value", + "type": "varchar(512)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 512, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, "created_at": { "name": "created_at", @@ -4716,7 +4420,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -4732,146 +4436,89 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" - }, - "members_visible": { - "name": "members_visible", - "type": "tinyint(1)", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" } }, - "name": "player_group", + "name": "game_channel_storage_prop", "indexes": [ { - "columnNames": ["game_id"], - "keyName": "player_group_game_id_index", - "unique": false, + "columnNames": ["game_channel_id"], + "composite": false, + "keyName": "game_channel_storage_prop_game_channel_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - } - ], - "checks": [], - "foreignKeys": { - "player_group_game_id_foreign": { - "columnNames": ["game_id"], - "constraintName": "player_group_game_id_foreign", - "localTableName": "player_group", - "referencedTableName": "game", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - } - }, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "player_group_id": { - "name": "player_group_id", - "type": "varchar(255)", - "unsigned": false, - "autoincrement": false, - "primary": true, - "nullable": false, - "unique": false, - "length": 255, - "precision": null, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "string" + "columnNames": ["created_by_id"], + "composite": false, + "keyName": "game_channel_storage_prop_created_by_id_index", + "constraint": false, + "primary": false, + "unique": false }, - "player_id": { - "name": "player_id", - "type": "varchar(255)", - "unsigned": false, - "autoincrement": false, - "primary": true, - "nullable": false, - "unique": false, - "length": 255, - "precision": null, - "scale": null, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "string" - } - }, - "name": "player_group_members", - "indexes": [ { - "columnNames": ["player_group_id"], - "keyName": "player_group_members_player_group_id_index", - "unique": false, + "columnNames": ["last_updated_by_id"], + "composite": false, + "keyName": "game_channel_storage_prop_last_updated_by_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["player_id"], - "keyName": "player_group_members_player_id_index", - "unique": false, + "keyName": "game_channel_storage_prop_game_channel_id_key_index", + "columnNames": ["game_channel_id", "key"], + "composite": true, + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["player_group_id", "player_id"], "keyName": "PRIMARY", - "unique": true, - "primary": true, + "columnNames": ["id"], + "composite": false, "constraint": true, - "composite": true + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "player_group_members_player_group_id_foreign": { - "columnNames": ["player_group_id"], - "constraintName": "player_group_members_player_group_id_foreign", - "localTableName": "player_group_members", - "referencedTableName": "player_group", + "game_channel_storage_prop_game_channel_id_foreign": { + "constraintName": "game_channel_storage_prop_game_channel_id_foreign", + "columnNames": ["game_channel_id"], + "localTableName": "game_channel_storage_prop", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "game_channel", + "deleteRule": "cascade", + "updateRule": "cascade" }, - "player_group_members_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "player_group_members_player_id_foreign", - "localTableName": "player_group_members", - "referencedTableName": "player", + "game_channel_storage_prop_created_by_id_foreign": { + "constraintName": "game_channel_storage_prop_created_by_id_foreign", + "columnNames": ["created_by_id"], + "localTableName": "game_channel_storage_prop", + "referencedColumnNames": ["id"], + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "game_channel_storage_prop_last_updated_by_id_foreign": { + "constraintName": "game_channel_storage_prop_last_updated_by_id_foreign", + "columnNames": ["last_updated_by_id"], + "localTableName": "game_channel_storage_prop", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -4884,15 +4531,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "player_alias_id": { - "name": "player_alias_id", + "game_channel_id": { + "name": "game_channel_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -4900,41 +4547,41 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "online": { - "name": "online", - "type": "tinyint(1)", + "key": { + "name": "key", + "type": "varchar(128)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "length": 128, + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "string" }, - "custom_status": { - "name": "custom_status", - "type": "varchar(255)", + "value": { + "name": "value", + "type": "varchar(512)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": 512, "precision": null, "scale": null, - "default": "", + "default": null, "comment": null, "enumItems": [], "mappedType": "string" @@ -4947,62 +4594,132 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" - }, - "updated_at": { - "name": "updated_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, + } + }, + "name": "game_channel_prop", + "indexes": [ + { + "columnNames": ["game_channel_id"], + "composite": false, + "keyName": "game_channel_prop_game_channel_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "game_channel_prop_game_channel_id_foreign": { + "constraintName": "game_channel_prop_game_channel_id_foreign", + "columnNames": ["game_channel_id"], + "localTableName": "game_channel_prop", + "referencedColumnNames": ["id"], + "referencedTableName": "game_channel", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "game_channel_id": { + "name": "game_channel_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": true, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "integer" + }, + "player_alias_id": { + "name": "player_alias_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": true, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" } }, - "name": "player_presence", + "name": "game_channel_members", "indexes": [ + { + "columnNames": ["game_channel_id"], + "composite": false, + "keyName": "game_channel_members_game_channel_id_index", + "constraint": false, + "primary": false, + "unique": false + }, { "columnNames": ["player_alias_id"], - "keyName": "player_presence_player_alias_id_index", - "unique": false, + "composite": false, + "keyName": "game_channel_members_player_alias_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["game_channel_id", "player_alias_id"], + "composite": true, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "player_presence_player_alias_id_foreign": { + "game_channel_members_game_channel_id_foreign": { + "constraintName": "game_channel_members_game_channel_id_foreign", + "columnNames": ["game_channel_id"], + "localTableName": "game_channel_members", + "referencedColumnNames": ["id"], + "referencedTableName": "game_channel", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "game_channel_members_player_alias_id_foreign": { + "constraintName": "game_channel_members_player_alias_id_foreign", "columnNames": ["player_alias_id"], - "constraintName": "player_presence_player_alias_id_foreign", - "localTableName": "player_presence", - "referencedTableName": "player_alias", + "localTableName": "game_channel_members", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "player_alias", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -5015,60 +4732,60 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "player_id": { - "name": "player_id", - "type": "varchar(255)", - "unsigned": false, + "integration_id": { + "name": "integration_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "key": { - "name": "key", - "type": "varchar(128)", + "request": { + "name": "request", + "type": "json", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 128, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "json" }, - "value": { - "name": "value", - "type": "varchar(512)", + "response": { + "name": "response", + "type": "json", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 512, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "json" }, "created_at": { "name": "created_at", @@ -5078,105 +4795,90 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, - "default": "CURRENT_TIMESTAMP", + "default": null, "comment": null, "enumItems": [], "mappedType": "datetime" } }, - "name": "player_prop", + "name": "steamworks_integration_event", "indexes": [ { - "columnNames": ["key", "value"], - "keyName": "idx_playerprop_key_value", - "unique": false, - "primary": false, + "columnNames": ["integration_id"], + "composite": false, + "keyName": "steamworks_integration_event_integration_id_index", "constraint": false, - "composite": true - }, - { - "columnNames": ["key"], - "keyName": "player_prop_key_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["player_id"], - "keyName": "player_prop_player_id_index", - "unique": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "player_prop_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "player_prop_player_id_foreign", - "localTableName": "player_prop", - "referencedTableName": "player", + "steamworks_integration_event_integration_id_foreign": { + "constraintName": "steamworks_integration_event_integration_id_foreign", + "columnNames": ["integration_id"], + "localTableName": "steamworks_integration_event", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "integration", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { - "id": { - "name": "id", + "steamworks_leaderboard_id": { + "name": "steamworks_leaderboard_id", "type": "int", "unsigned": true, - "autoincrement": true, + "autoincrement": false, "primary": true, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "player_id": { - "name": "player_id", - "type": "varchar(255)", - "unsigned": false, + "leaderboard_id": { + "name": "leaderboard_id", + "type": "int", + "unsigned": true, "autoincrement": false, - "primary": false, + "primary": true, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "queued_at": { - "name": "queued_at", + "created_at": { + "name": "created_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -5185,37 +4887,38 @@ "mappedType": "datetime" } }, - "name": "players_to_delete", + "name": "steamworks_leaderboard_mapping", "indexes": [ { - "columnNames": ["player_id"], - "keyName": "players_to_delete_player_id_index", - "unique": false, + "columnNames": ["leaderboard_id"], + "composite": false, + "keyName": "steamworks_leaderboard_mapping_leaderboard_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["id"], "keyName": "PRIMARY", - "unique": true, + "columnNames": ["steamworks_leaderboard_id", "leaderboard_id"], + "composite": true, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], "foreignKeys": { - "players_to_delete_player_id_foreign": { - "columnNames": ["player_id"], - "constraintName": "players_to_delete_player_id_foreign", - "localTableName": "players_to_delete", - "referencedTableName": "player", + "steamworks_leaderboard_mapping_leaderboard_id_foreign": { + "constraintName": "steamworks_leaderboard_mapping_leaderboard_id_foreign", + "columnNames": ["leaderboard_id"], + "localTableName": "steamworks_leaderboard_mapping", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "leaderboard", + "deleteRule": "cascade", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -5228,86 +4931,86 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "stripe_id": { - "name": "stripe_id", - "type": "varchar(255)", - "unsigned": false, + "steamworks_leaderboard_id": { + "name": "steamworks_leaderboard_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "hidden": { - "name": "hidden", - "type": "tinyint(1)", - "unsigned": false, + "leaderboard_id": { + "name": "leaderboard_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "integer" }, - "default": { - "name": "default", - "type": "tinyint(1)", - "unsigned": false, + "leaderboard_entry_id": { + "name": "leaderboard_entry_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "integer" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "steam_user_id": { + "name": "steam_user_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "created_at": { + "name": "created_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -5315,37 +5018,72 @@ "enumItems": [], "mappedType": "datetime" }, - "player_limit": { - "name": "player_limit", - "type": "int", + "updated_at": { + "name": "updated_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "datetime" } }, - "name": "pricing_plan", + "name": "steamworks_leaderboard_entry", "indexes": [ { - "columnNames": ["id"], + "columnNames": ["leaderboard_entry_id"], + "composite": false, + "keyName": "steamworks_leaderboard_entry_leaderboard_entry_id_unique", + "constraint": true, + "primary": false, + "unique": true + }, + { + "keyName": "steamworks_leaderboard_entry_steamworks_leaderboard_aa6b4_index", + "columnNames": ["steamworks_leaderboard_id", "leaderboard_id"], + "composite": true, + "constraint": false, + "primary": false, + "unique": false + }, + { "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], - "foreignKeys": {}, - "nativeEnums": {}, - "comment": "" + "foreignKeys": { + "steamworks_leaderboard_entry_steamworks_leaderboa_6dc1e_foreign": { + "constraintName": "steamworks_leaderboard_entry_steamworks_leaderboa_6dc1e_foreign", + "columnNames": ["steamworks_leaderboard_id", "leaderboard_id"], + "localTableName": "steamworks_leaderboard_entry", + "referencedColumnNames": ["steamworks_leaderboard_id", "leaderboard_id"], + "referencedTableName": "steamworks_leaderboard_mapping", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "steamworks_leaderboard_entry_leaderboard_entry_id_foreign": { + "constraintName": "steamworks_leaderboard_entry_leaderboard_entry_id_foreign", + "columnNames": ["leaderboard_entry_id"], + "localTableName": "steamworks_leaderboard_entry", + "referencedColumnNames": ["id"], + "referencedTableName": "leaderboard_entry", + "deleteRule": "set null", + "updateRule": "cascade" + } + }, + "nativeEnums": {} }, { "columns": { @@ -5358,15 +5096,15 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "integration_id": { - "name": "integration_id", + "stat_id": { + "name": "stat_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -5374,20 +5112,20 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "request": { - "name": "request", - "type": "json", - "unsigned": false, + "player_stat_id": { + "name": "player_stat_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, - "nullable": false, + "nullable": true, "unique": false, "length": null, "precision": null, @@ -5395,23 +5133,23 @@ "default": null, "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "integer" }, - "response": { - "name": "response", - "type": "json", + "steam_user_id": { + "name": "steam_user_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "json" + "mappedType": "string" }, "created_at": { "name": "created_at", @@ -5421,7 +5159,23 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -5430,37 +5184,55 @@ "mappedType": "datetime" } }, - "name": "steamworks_integration_event", + "name": "steamworks_player_stat", "indexes": [ { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true + "columnNames": ["stat_id"], + "composite": false, + "keyName": "steamworks_player_stat_stat_id_index", + "constraint": false, + "primary": false, + "unique": false }, { - "columnNames": ["integration_id"], - "keyName": "steamworks_integration_event_integration_id_index", - "unique": false, + "columnNames": ["player_stat_id"], + "composite": false, + "keyName": "steamworks_player_stat_player_stat_id_unique", + "constraint": true, "primary": false, - "constraint": false + "unique": true + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "steamworks_integration_event_integration_id_foreign": { - "columnNames": ["integration_id"], - "constraintName": "steamworks_integration_event_integration_id_foreign", - "localTableName": "steamworks_integration_event", - "referencedTableName": "integration", + "steamworks_player_stat_stat_id_foreign": { + "constraintName": "steamworks_player_stat_stat_id_foreign", + "columnNames": ["stat_id"], + "localTableName": "steamworks_player_stat", + "referencedColumnNames": ["id"], + "referencedTableName": "game_stat", + "deleteRule": "cascade", + "updateRule": "cascade" + }, + "steamworks_player_stat_player_stat_id_foreign": { + "constraintName": "steamworks_player_stat_player_stat_id_foreign", + "columnNames": ["player_stat_id"], + "localTableName": "steamworks_player_stat", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "player_game_stat", + "deleteRule": "set null", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -5473,63 +5245,81 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "steamworks_leaderboard_id": { - "name": "steamworks_leaderboard_id", - "type": "int", - "unsigned": true, + "secret": { + "name": "secret", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "leaderboard_id": { - "name": "leaderboard_id", - "type": "int", - "unsigned": true, + "enabled": { + "name": "enabled", + "type": "tinyint(1)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, - "default": null, + "length": 1, + "precision": null, + "scale": null, + "default": "false", "comment": null, "enumItems": [], - "mappedType": "integer" - }, - "leaderboard_entry_id": { - "name": "leaderboard_entry_id", + "mappedType": "boolean" + } + }, + "name": "user_two_factor_auth", + "indexes": [ + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": {}, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", "type": "int", "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": true, + "autoincrement": true, + "primary": true, + "nullable": false, + "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "steam_user_id": { - "name": "steam_user_id", + "email": { + "name": "email", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -5544,117 +5334,113 @@ "enumItems": [], "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "username": { + "name": "username", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "string" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "password": { + "name": "password", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" - } - }, - "name": "steamworks_leaderboard_entry", - "indexes": [ - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true + "mappedType": "string" }, - { - "columnNames": ["leaderboard_entry_id"], - "keyName": "steamworks_leaderboard_entry_leaderboard_entry_id_unique", - "unique": true, + "organisation_id": { + "name": "organisation_id", + "type": "int", + "unsigned": true, + "autoincrement": false, "primary": false, - "constraint": true - }, - { - "columnNames": ["steamworks_leaderboard_id", "leaderboard_id"], - "keyName": "steamworks_leaderboard_entry_steamworks_leaderboard_aa6b4_index", + "nullable": false, "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "type": { + "name": "type", + "type": "tinyint", + "unsigned": false, + "autoincrement": false, "primary": false, - "constraint": false, - "composite": true - } - ], - "checks": [], - "foreignKeys": { - "steamworks_leaderboard_entry_leaderboard_entry_id_foreign": { - "columnNames": ["leaderboard_entry_id"], - "constraintName": "steamworks_leaderboard_entry_leaderboard_entry_id_foreign", - "localTableName": "steamworks_leaderboard_entry", - "referencedTableName": "leaderboard_entry", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": "2", + "comment": null, + "enumItems": [], + "mappedType": "enum" }, - "steamworks_leaderboard_entry_steamworks_leaderboa_6dc1e_foreign": { - "columnNames": ["steamworks_leaderboard_id", "leaderboard_id"], - "constraintName": "steamworks_leaderboard_entry_steamworks_leaderboa_6dc1e_foreign", - "localTableName": "steamworks_leaderboard_entry", - "referencedTableName": "steamworks_leaderboard_mapping", - "referencedColumnNames": ["steamworks_leaderboard_id", "leaderboard_id"], - "updateRule": "cascade", - "deleteRule": "cascade" - } - }, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "steamworks_leaderboard_id": { - "name": "steamworks_leaderboard_id", - "type": "int", - "unsigned": true, + "last_seen_at": { + "name": "last_seen_at", + "type": "datetime", + "unsigned": false, "autoincrement": false, - "primary": true, + "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "datetime" }, - "leaderboard_id": { - "name": "leaderboard_id", + "email_confirmed": { + "name": "email_confirmed", + "type": "tinyint(1)", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": 1, + "precision": null, + "scale": null, + "default": "false", + "comment": null, + "enumItems": [], + "mappedType": "boolean" + }, + "two_factor_auth_id": { + "name": "two_factor_auth_id", "type": "int", "unsigned": true, "autoincrement": false, - "primary": true, - "nullable": false, + "primary": false, + "nullable": true, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], @@ -5668,7 +5454,23 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, @@ -5677,38 +5479,54 @@ "mappedType": "datetime" } }, - "name": "steamworks_leaderboard_mapping", + "name": "user", "indexes": [ { - "columnNames": ["steamworks_leaderboard_id", "leaderboard_id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true, - "composite": true + "columnNames": ["organisation_id"], + "composite": false, + "keyName": "user_organisation_id_index", + "constraint": false, + "primary": false, + "unique": false }, { - "columnNames": ["leaderboard_id"], - "keyName": "steamworks_leaderboard_mapping_leaderboard_id_index", - "unique": false, + "columnNames": ["two_factor_auth_id"], + "composite": false, + "keyName": "user_two_factor_auth_id_unique", + "constraint": true, "primary": false, - "constraint": false + "unique": true + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "steamworks_leaderboard_mapping_leaderboard_id_foreign": { - "columnNames": ["leaderboard_id"], - "constraintName": "steamworks_leaderboard_mapping_leaderboard_id_foreign", - "localTableName": "steamworks_leaderboard_mapping", - "referencedTableName": "leaderboard", + "user_organisation_id_foreign": { + "constraintName": "user_organisation_id_foreign", + "columnNames": ["organisation_id"], + "localTableName": "user", + "referencedColumnNames": ["id"], + "referencedTableName": "organisation", + "updateRule": "cascade" + }, + "user_two_factor_auth_id_foreign": { + "constraintName": "user_two_factor_auth_id_foreign", + "columnNames": ["two_factor_auth_id"], + "localTableName": "user", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "user_two_factor_auth", + "deleteRule": "set null", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -5721,60 +5539,60 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "stat_id": { - "name": "stat_id", - "type": "int", - "unsigned": true, + "token": { + "name": "token", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": null, - "precision": 10, - "scale": 0, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "player_stat_id": { - "name": "player_stat_id", - "type": "int", - "unsigned": true, + "user_agent": { + "name": "user_agent", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": true, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, + "unique": false, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "steam_user_id": { - "name": "steam_user_id", - "type": "varchar(255)", - "unsigned": false, + "user_id": { + "name": "user_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, "created_at": { "name": "created_at", @@ -5784,7 +5602,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -5792,15 +5610,15 @@ "enumItems": [], "mappedType": "datetime" }, - "updated_at": { - "name": "updated_at", + "valid_until": { + "name": "valid_until", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -5809,53 +5627,37 @@ "mappedType": "datetime" } }, - "name": "steamworks_player_stat", + "name": "user_session", "indexes": [ { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - }, - { - "columnNames": ["player_stat_id"], - "keyName": "steamworks_player_stat_player_stat_id_unique", - "unique": true, + "columnNames": ["user_id"], + "composite": false, + "keyName": "user_session_user_id_index", + "constraint": false, "primary": false, - "constraint": true + "unique": false }, { - "columnNames": ["stat_id"], - "keyName": "steamworks_player_stat_stat_id_index", - "unique": false, - "primary": false, - "constraint": false + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "steamworks_player_stat_player_stat_id_foreign": { - "columnNames": ["player_stat_id"], - "constraintName": "steamworks_player_stat_player_stat_id_foreign", - "localTableName": "steamworks_player_stat", - "referencedTableName": "player_game_stat", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" - }, - "steamworks_player_stat_stat_id_foreign": { - "columnNames": ["stat_id"], - "constraintName": "steamworks_player_stat_stat_id_foreign", - "localTableName": "steamworks_player_stat", - "referencedTableName": "game_stat", + "user_session_user_id_foreign": { + "constraintName": "user_session_user_id_foreign", + "columnNames": ["user_id"], + "localTableName": "user_session", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "cascade" + "referencedTableName": "user", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -5868,31 +5670,31 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "email": { - "name": "email", - "type": "varchar(255)", - "unsigned": false, + "user_id": { + "name": "user_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "password": { - "name": "password", + "code": { + "name": "code", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -5907,182 +5709,178 @@ "enumItems": [], "mappedType": "string" }, - "organisation_id": { - "name": "organisation_id", - "type": "int", - "unsigned": true, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" - }, - "type": { - "name": "type", - "type": "tinyint", - "unsigned": false, - "autoincrement": false, + "mappedType": "datetime" + } + }, + "name": "user_recovery_code", + "indexes": [ + { + "columnNames": ["user_id"], + "composite": false, + "keyName": "user_recovery_code_user_id_index", + "constraint": false, "primary": false, - "nullable": false, - "unique": false, - "length": null, - "precision": 3, - "scale": 0, - "default": "2", - "comment": null, - "enumItems": [], - "mappedType": "tinyint" + "unique": false }, - "last_seen_at": { - "name": "last_seen_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "user_recovery_code_user_id_foreign": { + "constraintName": "user_recovery_code_user_id_foreign", + "columnNames": ["user_id"], + "localTableName": "user_recovery_code", + "referencedColumnNames": ["id"], + "referencedTableName": "user", + "deleteRule": "cascade", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "int", + "unsigned": true, + "autoincrement": true, + "primary": true, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "integer" }, - "email_confirmed": { - "name": "email_confirmed", - "type": "tinyint(1)", - "unsigned": false, + "user_id": { + "name": "user_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", - "comment": null, - "enumItems": [], - "mappedType": "boolean" - }, - "created_at": { - "name": "created_at", - "type": "datetime", - "unsigned": false, - "autoincrement": false, - "primary": false, - "nullable": false, - "unique": false, - "length": 0, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" + "mappedType": "integer" }, - "updated_at": { - "name": "updated_at", - "type": "datetime", + "group_id": { + "name": "group_id", + "type": "varchar(255)", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": 255, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "datetime" - }, - "two_factor_auth_id": { - "name": "two_factor_auth_id", - "type": "int", - "unsigned": true, - "autoincrement": false, - "primary": false, - "nullable": true, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, - "default": null, - "comment": null, - "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "username": { - "name": "username", - "type": "varchar(255)", + "created_at": { + "name": "created_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "datetime" } }, - "name": "user", + "name": "user_pinned_group", "indexes": [ { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true + "columnNames": ["user_id"], + "composite": false, + "keyName": "user_pinned_group_user_id_index", + "constraint": false, + "primary": false, + "unique": false }, { - "columnNames": ["organisation_id"], - "keyName": "user_organisation_id_index", - "unique": false, + "columnNames": ["group_id"], + "composite": false, + "keyName": "user_pinned_group_group_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false }, { - "columnNames": ["two_factor_auth_id"], - "keyName": "user_two_factor_auth_id_unique", - "unique": true, + "keyName": "user_pinned_group_user_id_group_id_unique", + "columnNames": ["user_id", "group_id"], + "composite": true, + "constraint": true, "primary": false, - "constraint": true + "unique": true + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "user_organisation_id_foreign": { - "columnNames": ["organisation_id"], - "constraintName": "user_organisation_id_foreign", - "localTableName": "user", - "referencedTableName": "organisation", + "user_pinned_group_user_id_foreign": { + "constraintName": "user_pinned_group_user_id_foreign", + "columnNames": ["user_id"], + "localTableName": "user_pinned_group", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "user", + "updateRule": "cascade" }, - "user_two_factor_auth_id_foreign": { - "columnNames": ["two_factor_auth_id"], - "constraintName": "user_two_factor_auth_id_foreign", - "localTableName": "user", - "referencedTableName": "user_two_factor_auth", + "user_pinned_group_group_id_foreign": { + "constraintName": "user_pinned_group_group_id_foreign", + "columnNames": ["group_id"], + "localTableName": "user_pinned_group", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "set null" + "referencedTableName": "player_group", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -6095,8 +5893,8 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], @@ -6127,8 +5925,8 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], @@ -6142,7 +5940,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -6158,7 +5956,7 @@ "primary": false, "nullable": true, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -6169,35 +5967,35 @@ }, "name": "user_access_code", "indexes": [ - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - }, { "columnNames": ["user_id"], + "composite": false, "keyName": "user_access_code_user_id_index", - "unique": false, + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { "user_access_code_user_id_foreign": { - "columnNames": ["user_id"], "constraintName": "user_access_code_user_id_foreign", + "columnNames": ["user_id"], "localTableName": "user_access_code", - "referencedTableName": "user", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "user", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -6210,31 +6008,31 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "user_id": { - "name": "user_id", - "type": "int", - "unsigned": true, + "token": { + "name": "token", + "type": "varchar(255)", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, - "unique": true, - "length": null, - "precision": 10, - "scale": 0, + "unique": false, + "length": 255, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "string" }, - "group_id": { - "name": "group_id", + "email": { + "name": "email", "type": "varchar(255)", "unsigned": false, "autoincrement": false, @@ -6249,99 +6047,40 @@ "enumItems": [], "mappedType": "string" }, - "created_at": { - "name": "created_at", - "type": "datetime", + "type": { + "name": "type", + "type": "tinyint", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, - "default": null, + "default": "2", "comment": null, "enumItems": [], - "mappedType": "datetime" - } - }, - "name": "user_pinned_group", - "indexes": [ - { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true - }, - { - "columnNames": ["group_id"], - "keyName": "user_pinned_group_group_id_index", - "unique": false, - "primary": false, - "constraint": false - }, - { - "columnNames": ["user_id", "group_id"], - "keyName": "user_pinned_group_user_id_group_id_unique", - "unique": true, - "primary": false, - "constraint": true, - "composite": true - }, - { - "columnNames": ["user_id"], - "keyName": "user_pinned_group_user_id_index", - "unique": false, - "primary": false, - "constraint": false - } - ], - "checks": [], - "foreignKeys": { - "user_pinned_group_group_id_foreign": { - "columnNames": ["group_id"], - "constraintName": "user_pinned_group_group_id_foreign", - "localTableName": "user_pinned_group", - "referencedTableName": "player_group", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "mappedType": "enum" }, - "user_pinned_group_user_id_foreign": { - "columnNames": ["user_id"], - "constraintName": "user_pinned_group_user_id_foreign", - "localTableName": "user_pinned_group", - "referencedTableName": "user", - "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" - } - }, - "nativeEnums": {}, - "comment": "" - }, - { - "columns": { - "id": { - "name": "id", + "organisation_id": { + "name": "organisation_id", "type": "int", "unsigned": true, - "autoincrement": true, - "primary": true, + "autoincrement": false, + "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "user_id": { - "name": "user_id", + "invited_by_user_id": { + "name": "invited_by_user_id", "type": "int", "unsigned": true, "autoincrement": false, @@ -6349,28 +6088,159 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "code": { - "name": "code", - "type": "varchar(255)", + "created_at": { + "name": "created_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "datetime" + } + }, + "name": "invite", + "indexes": [ + { + "columnNames": ["organisation_id"], + "composite": false, + "keyName": "invite_organisation_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["invited_by_user_id"], + "composite": false, + "keyName": "invite_invited_by_user_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true + } + ], + "checks": [], + "foreignKeys": { + "invite_organisation_id_foreign": { + "constraintName": "invite_organisation_id_foreign", + "columnNames": ["organisation_id"], + "localTableName": "invite", + "referencedColumnNames": ["id"], + "referencedTableName": "organisation", + "updateRule": "cascade" + }, + "invite_invited_by_user_id_foreign": { + "constraintName": "invite_invited_by_user_id_foreign", + "columnNames": ["invited_by_user_id"], + "localTableName": "invite", + "referencedColumnNames": ["id"], + "referencedTableName": "user", + "updateRule": "cascade" + } + }, + "nativeEnums": {} + }, + { + "columns": { + "id": { + "name": "id", + "type": "int", + "unsigned": true, + "autoincrement": true, + "primary": true, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "user_id": { + "name": "user_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "type": { + "name": "type", + "type": "tinyint", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "enum" + }, + "extra": { + "name": "extra", + "type": "json", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "json" }, "created_at": { "name": "created_at", @@ -6380,7 +6250,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -6389,37 +6259,54 @@ "mappedType": "datetime" } }, - "name": "user_recovery_code", + "name": "game_activity", "indexes": [ { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true + "columnNames": ["game_id"], + "composite": false, + "keyName": "game_activity_game_id_index", + "constraint": false, + "primary": false, + "unique": false }, { "columnNames": ["user_id"], - "keyName": "user_recovery_code_user_id_index", - "unique": false, + "composite": false, + "keyName": "game_activity_user_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "user_recovery_code_user_id_foreign": { + "game_activity_game_id_foreign": { + "constraintName": "game_activity_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "game_activity", + "referencedColumnNames": ["id"], + "referencedTableName": "game", + "deleteRule": "set null", + "updateRule": "cascade" + }, + "game_activity_user_id_foreign": { + "constraintName": "game_activity_user_id_foreign", "columnNames": ["user_id"], - "constraintName": "user_recovery_code_user_id_foreign", - "localTableName": "user_recovery_code", - "referencedTableName": "user", + "localTableName": "game_activity", "referencedColumnNames": ["id"], - "updateRule": "no action", - "deleteRule": "cascade" + "referencedTableName": "user", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -6432,60 +6319,101 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "token": { - "name": "token", - "type": "varchar(255)", - "unsigned": false, + "created_by_user_id": { + "name": "created_by_user_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "user_agent": { - "name": "user_agent", - "type": "varchar(255)", - "unsigned": false, + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, "autoincrement": false, "primary": false, - "nullable": true, + "nullable": false, "unique": false, - "length": 255, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "user_id": { - "name": "user_id", - "type": "int", - "unsigned": true, + "entities": { + "name": "entities", + "type": "text", + "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, + "enumItems": [ + "events", + "players", + "playerAliases", + "leaderboardEntries", + "gameStats", + "playerGameStats", + "gameActivities", + "gameFeedback" + ], + "mappedType": "text" + }, + "status": { + "name": "status", + "type": "tinyint", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": "0", + "comment": null, "enumItems": [], - "mappedType": "integer" + "mappedType": "enum" + }, + "failed_at": { + "name": "failed_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" }, "created_at": { "name": "created_at", @@ -6495,7 +6423,7 @@ "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -6503,15 +6431,15 @@ "enumItems": [], "mappedType": "datetime" }, - "valid_until": { - "name": "valid_until", + "updated_at": { + "name": "updated_at", "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 0, + "length": null, "precision": null, "scale": null, "default": null, @@ -6520,37 +6448,53 @@ "mappedType": "datetime" } }, - "name": "user_session", + "name": "data_export", "indexes": [ { - "columnNames": ["id"], - "keyName": "PRIMARY", - "unique": true, - "primary": true, - "constraint": true + "columnNames": ["created_by_user_id"], + "composite": false, + "keyName": "data_export_created_by_user_id_index", + "constraint": false, + "primary": false, + "unique": false }, { - "columnNames": ["user_id"], - "keyName": "user_session_user_id_index", - "unique": false, + "columnNames": ["game_id"], + "composite": false, + "keyName": "data_export_game_id_index", + "constraint": false, "primary": false, - "constraint": false + "unique": false + }, + { + "keyName": "PRIMARY", + "columnNames": ["id"], + "composite": false, + "constraint": true, + "primary": true, + "unique": true } ], "checks": [], "foreignKeys": { - "user_session_user_id_foreign": { - "columnNames": ["user_id"], - "constraintName": "user_session_user_id_foreign", - "localTableName": "user_session", + "data_export_created_by_user_id_foreign": { + "constraintName": "data_export_created_by_user_id_foreign", + "columnNames": ["created_by_user_id"], + "localTableName": "data_export", + "referencedColumnNames": ["id"], "referencedTableName": "user", + "updateRule": "cascade" + }, + "data_export_game_id_foreign": { + "constraintName": "data_export_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "data_export", "referencedColumnNames": ["id"], - "updateRule": "cascade", - "deleteRule": "no action" + "referencedTableName": "game", + "updateRule": "cascade" } }, - "nativeEnums": {}, - "comment": "" + "nativeEnums": {} }, { "columns": { @@ -6563,60 +6507,199 @@ "nullable": false, "unique": false, "length": null, - "precision": 10, - "scale": 0, + "precision": null, + "scale": null, "default": null, "comment": null, "enumItems": [], "mappedType": "integer" }, - "secret": { - "name": "secret", - "type": "varchar(255)", + "scopes": { + "name": "scopes", + "type": "text", "unsigned": false, "autoincrement": false, "primary": false, "nullable": false, "unique": false, - "length": 255, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [ + "read:playerPresence", + "write:playerPresence", + "read:gameChannels", + "write:gameChannels", + "read:playerGroups", + "write:continuityRequests", + "read:gameFeedback", + "write:gameFeedback", + "read:gameConfig", + "write:gameConfig", + "read:gameStats", + "write:gameStats", + "read:gameSaves", + "write:gameSaves", + "read:leaderboards", + "write:leaderboards", + "read:players", + "write:players", + "read:events", + "write:events", + "read:playerRelationships", + "write:playerRelationships", + "read:playerBroadcasts", + "write:playerBroadcasts", + "*" + ], + "mappedType": "text" + }, + "game_id": { + "name": "game_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, "precision": null, "scale": null, "default": null, "comment": null, "enumItems": [], - "mappedType": "string" + "mappedType": "integer" }, - "enabled": { - "name": "enabled", - "type": "tinyint(1)", + "created_by_user_id": { + "name": "created_by_user_id", + "type": "int", + "unsigned": true, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "integer" + }, + "created_at": { + "name": "created_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": false, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "updated_at": { + "name": "updated_at", + "type": "datetime", "unsigned": false, "autoincrement": false, "primary": false, "nullable": true, "unique": false, "length": null, - "precision": 3, - "scale": 0, - "default": "false", + "precision": null, + "scale": null, + "default": null, "comment": null, "enumItems": [], - "mappedType": "boolean" + "mappedType": "datetime" + }, + "revoked_at": { + "name": "revoked_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" + }, + "last_used_at": { + "name": "last_used_at", + "type": "datetime", + "unsigned": false, + "autoincrement": false, + "primary": false, + "nullable": true, + "unique": false, + "length": null, + "precision": null, + "scale": null, + "default": null, + "comment": null, + "enumItems": [], + "mappedType": "datetime" } }, - "name": "user_two_factor_auth", + "name": "apikey", "indexes": [ { - "columnNames": ["id"], + "columnNames": ["game_id"], + "composite": false, + "keyName": "apikey_game_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { + "columnNames": ["created_by_user_id"], + "composite": false, + "keyName": "apikey_created_by_user_id_index", + "constraint": false, + "primary": false, + "unique": false + }, + { "keyName": "PRIMARY", - "unique": true, + "columnNames": ["id"], + "composite": false, + "constraint": true, "primary": true, - "constraint": true + "unique": true } ], "checks": [], - "foreignKeys": {}, - "nativeEnums": {}, - "comment": "" + "foreignKeys": { + "apikey_game_id_foreign": { + "constraintName": "apikey_game_id_foreign", + "columnNames": ["game_id"], + "localTableName": "apikey", + "referencedColumnNames": ["id"], + "referencedTableName": "game", + "updateRule": "cascade" + }, + "apikey_created_by_user_id_foreign": { + "constraintName": "apikey_created_by_user_id_foreign", + "columnNames": ["created_by_user_id"], + "localTableName": "apikey", + "referencedColumnNames": ["id"], + "referencedTableName": "user", + "updateRule": "cascade" + } + }, + "nativeEnums": {} } ], "nativeEnums": {} diff --git a/src/migrations/20260327224537SchemaSnapshotChanges.ts b/src/migrations/20260327224537SchemaSnapshotChanges.ts new file mode 100644 index 00000000..4c0218a5 --- /dev/null +++ b/src/migrations/20260327224537SchemaSnapshotChanges.ts @@ -0,0 +1,59 @@ +import { Migration } from '@mikro-orm/migrations' + +export class SchemaSnapshotChanges extends Migration { + override async up(): Promise { + this.addSql( + `alter table \`user_recovery_code\` drop foreign key \`user_recovery_code_user_id_foreign\`;`, + ) + + this.addSql(`alter table \`player_prop\` modify \`created_at\` datetime not null;`) + + this.addSql(`alter table \`player_alias\` modify \`last_seen_at\` datetime not null;`) + + this.addSql( + `alter table \`leaderboard_entry_prop\` rename index \`leaderboard_entry_prop_entry_id_index\` to \`leaderboard_entry_prop_leaderboard_entry_id_index\`;`, + ) + + this.addSql( + `alter table \`user_two_factor_auth\` modify \`enabled\` tinyint(1) not null default false;`, + ) + + this.addSql( + `alter table \`user_recovery_code\` add constraint \`user_recovery_code_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update cascade on delete cascade;`, + ) + + this.addSql(`alter table \`data_export\` modify \`entities\` text not null;`) + + this.addSql(`alter table \`apikey\` modify \`scopes\` text not null;`) + } + + override async down(): Promise { + this.addSql( + `alter table \`user_recovery_code\` drop foreign key \`user_recovery_code_user_id_foreign\`;`, + ) + + this.addSql(`alter table \`apikey\` modify \`scopes\` text not null;`) + + this.addSql(`alter table \`data_export\` modify \`entities\` text not null;`) + + this.addSql( + `alter table \`leaderboard_entry_prop\` rename index \`leaderboard_entry_prop_leaderboard_entry_id_index\` to \`leaderboard_entry_prop_entry_id_index\`;`, + ) + + this.addSql( + `alter table \`player_alias\` modify \`last_seen_at\` datetime not null default CURRENT_TIMESTAMP;`, + ) + + this.addSql( + `alter table \`player_prop\` modify \`created_at\` datetime not null default CURRENT_TIMESTAMP;`, + ) + + this.addSql( + `alter table \`user_recovery_code\` add constraint \`user_recovery_code_user_id_foreign\` foreign key (\`user_id\`) references \`user\` (\`id\`) on update no action on delete cascade;`, + ) + + this.addSql( + `alter table \`user_two_factor_auth\` modify \`enabled\` tinyint(1) null default false;`, + ) + } +} diff --git a/src/migrations/20260327225535AddFailedJobFailedAtIndex.ts b/src/migrations/20260327225535AddFailedJobFailedAtIndex.ts new file mode 100644 index 00000000..199afef0 --- /dev/null +++ b/src/migrations/20260327225535AddFailedJobFailedAtIndex.ts @@ -0,0 +1,13 @@ +import { Migration } from '@mikro-orm/migrations' + +export class AddFailedJobFailedAtIndex extends Migration { + override async up(): Promise { + this.addSql( + `alter table \`failed_job\` add index \`failed_job_failed_at_index\`(\`failed_at\`);`, + ) + } + + override async down(): Promise { + this.addSql(`alter table \`failed_job\` drop index \`failed_job_failed_at_index\`;`) + } +} diff --git a/src/migrations/index.ts b/src/migrations/index.ts index 98547816..48b42481 100644 --- a/src/migrations/index.ts +++ b/src/migrations/index.ts @@ -65,6 +65,8 @@ import { AddPlayerGameStatUniqueConstraint } from './20260214224025AddPlayerGame import { AddGameFeedbackDeletedAtColumn } from './20260301000000AddGameFeedbackDeletedAtColumn' import { CreateGooglePlayGamesIntegrationEventTable } from './20260306091456CreateGooglePlayGamesIntegrationEventTable' import { AddLastUsageWarningThresholdColumn } from './20260327081802AddLastUsageWarningThresholdColumn' +import { SchemaSnapshotChanges } from './20260327224537SchemaSnapshotChanges' +import { AddFailedJobFailedAtIndex } from './20260327225535AddFailedJobFailedAtIndex' export default [ { @@ -335,4 +337,12 @@ export default [ name: 'AddLastUsageWarningThresholdColumn', class: AddLastUsageWarningThresholdColumn, }, + { + name: 'SchemaSnapshotChanges', + class: SchemaSnapshotChanges, + }, + { + name: 'AddFailedJobFailedAtIndex', + class: AddFailedJobFailedAtIndex, + }, ] diff --git a/src/routes/api/player-auth/common.ts b/src/routes/api/player-auth/common.ts index 7661a9aa..9592ebc8 100644 --- a/src/routes/api/player-auth/common.ts +++ b/src/routes/api/player-auth/common.ts @@ -44,9 +44,10 @@ export function createPlayerAuthActivity( ctx: APIRouteContext, player: Player, data: { type: PlayerAuthActivityType; extra?: Record }, + em: EntityManager = ctx.em, ): PlayerAuthActivity { return buildPlayerAuthActivity({ - em: ctx.em, + em, player, type: data.type, ip: ctx.request.ip, diff --git a/src/routes/api/player-auth/register.ts b/src/routes/api/player-auth/register.ts index 222732ba..757fd454 100644 --- a/src/routes/api/player-auth/register.ts +++ b/src/routes/api/player-auth/register.ts @@ -54,71 +54,86 @@ export const registerRoute = apiRoute({ const key = ctx.state.key - let player: Player | null = null - try { - player = await createPlayerFromIdentifyRequest({ - em, - key, - service: PlayerAliasService.TALO, - identifier, - devBuild: ctx.state.devBuild, + const sanitisedEmail = email?.trim().toLowerCase() + if (sanitisedEmail && !emailRegex.test(sanitisedEmail)) { + return throwPlayerAuthError({ + ctx, + status: 400, + message: 'Invalid email address', + errorCode: 'INVALID_EMAIL', }) - } catch (err) { - if (err instanceof PlayerCreationError) { - return ctx.throw(err.statusCode, { - message: err.message, - errorCode: err.errorCode, - field: err.field, - }) - } - if (err instanceof PricingPlanLimitError) { - return ctx.throw(402, err.message) - } - throw err } - const alias = player.aliases[0] - alias.player.auth = new PlayerAuth() - alias.player.auth.password = await bcrypt.hash(password, 10) + const hashedPassword = await bcrypt.hash(password, 10) - if (email?.trim()) { - const sanitisedEmail = email.trim().toLowerCase() - if (emailRegex.test(sanitisedEmail)) { - if (await isEmailTakenForGame(em, { email: sanitisedEmail, game: key.game })) { - return throwPlayerAuthError({ - ctx, - status: 400, - message: 'This email address is already in use', - errorCode: 'EMAIL_TAKEN', - }) - } - alias.player.auth.email = sanitisedEmail - } else { + const { alias, sessionToken, refreshToken } = await em.transactional(async (trx) => { + if ( + sanitisedEmail && + (await isEmailTakenForGame(trx, { email: sanitisedEmail, game: key.game })) + ) { return throwPlayerAuthError({ ctx, status: 400, - message: 'Invalid email address', - errorCode: 'INVALID_EMAIL', + message: 'This email address is already in use', + errorCode: 'EMAIL_TAKEN', }) } - } else { - alias.player.auth.email = null - } - alias.player.auth.verificationEnabled = Boolean(verificationEnabled) - em.persist(alias.player.auth) + let player: Player | null = null - const { sessionToken, refreshToken } = await alias.player.auth.createSession(alias, withRefresh) - const socketToken = await alias.createSocketToken(ctx.redis) + try { + player = await createPlayerFromIdentifyRequest({ + em: trx, + key, + service: PlayerAliasService.TALO, + identifier, + devBuild: ctx.state.devBuild, + }) + } catch (err) { + if (err instanceof PlayerCreationError) { + return ctx.throw(err.statusCode, { + message: err.message, + errorCode: err.errorCode, + field: err.field, + }) + } + if (err instanceof PricingPlanLimitError) { + return ctx.throw(402, err.message) + } + throw err + } - createPlayerAuthActivity(ctx, alias.player, { - type: PlayerAuthActivityType.REGISTERED, - extra: { - verificationEnabled: alias.player.auth.verificationEnabled, - }, + const alias = player.aliases[0] + alias.player.auth = new PlayerAuth() + alias.player.auth.password = hashedPassword + if (sanitisedEmail) { + alias.player.auth.email = sanitisedEmail + } + + alias.player.auth.verificationEnabled = Boolean(verificationEnabled) + trx.persist(alias.player.auth) + + const { sessionToken, refreshToken } = await alias.player.auth.createSession( + alias, + withRefresh, + ) + + createPlayerAuthActivity( + ctx, + alias.player, + { + type: PlayerAuthActivityType.REGISTERED, + extra: { + verificationEnabled: alias.player.auth.verificationEnabled, + }, + }, + trx, + ) + + return { alias, sessionToken, refreshToken } }) - await em.flush() + const socketToken = await alias.createSocketToken(ctx.redis) return { status: 200, diff --git a/tests/routes/api/player-auth/register.test.ts b/tests/routes/api/player-auth/register.test.ts index 8692a727..21351db6 100644 --- a/tests/routes/api/player-auth/register.test.ts +++ b/tests/routes/api/player-auth/register.test.ts @@ -1,7 +1,10 @@ import { randUserName } from '@ngneat/falso' import bcrypt from 'bcrypt' import request from 'supertest' +import { vi } from 'vitest' import { APIKeyScope } from '../../../../src/entities/api-key' +import Player from '../../../../src/entities/player' +import PlayerAuth from '../../../../src/entities/player-auth' import PlayerAuthActivity, { PlayerAuthActivityType, } from '../../../../src/entities/player-auth-activity' @@ -159,6 +162,24 @@ describe('Player auth API - register', () => { }) }) + it('should not register a player if the email is invalid even without verificationEnabled', async () => { + const [, token] = await createAPIKeyAndToken([ + APIKeyScope.READ_PLAYERS, + APIKeyScope.WRITE_PLAYERS, + ]) + + const res = await request(app) + .post('/v1/players/auth/register') + .send({ identifier: randUserName(), email: 'blah', password: 'password' }) + .auth(token, { type: 'bearer' }) + .expect(400) + + expect(res.body).toStrictEqual({ + message: 'Invalid email address', + errorCode: 'INVALID_EMAIL', + }) + }) + it('should trim whitespace from identifiers before storing', async () => { const [, token] = await createAPIKeyAndToken([ APIKeyScope.READ_PLAYERS, @@ -287,6 +308,28 @@ describe('Player auth API - register', () => { expect(res.body.message).toBe('Limit reached') }) + it('should not leave behind an orphaned player if auth creation fails inside the transaction', async () => { + const [, token] = await createAPIKeyAndToken([ + APIKeyScope.READ_PLAYERS, + APIKeyScope.WRITE_PLAYERS, + ]) + + const identifier = randUserName() + + vi.spyOn(PlayerAuth.prototype, 'createSession').mockRejectedValueOnce( + new Error('session failure'), + ) + + await request(app) + .post('/v1/players/auth/register') + .send({ identifier, password: 'password' }) + .auth(token, { type: 'bearer' }) + .expect(500) + + const player = await em.getRepository(Player).findOne({ aliases: { identifier } }) + expect(player).toBeNull() + }) + it('should return a refreshToken when withRefresh is true', async () => { const [, token] = await createAPIKeyAndToken([ APIKeyScope.READ_PLAYERS,