Commit bf936715 authored by nanahira's avatar nanahira

Merge branch 'mc'

parents 3a937f24 7016800d
Pipeline #5718 passed with stages
in 80 minutes and 20 seconds
...@@ -11,6 +11,8 @@ const typedefs_json_1 = __importDefault(require("./data/typedefs.json")); ...@@ -11,6 +11,8 @@ const typedefs_json_1 = __importDefault(require("./data/typedefs.json"));
const proto_structs_json_1 = __importDefault(require("./data/proto_structs.json")); const proto_structs_json_1 = __importDefault(require("./data/proto_structs.json"));
const constants_json_1 = __importDefault(require("./data/constants.json")); const constants_json_1 = __importDefault(require("./data/constants.json"));
class Handler { class Handler {
handler;
synchronous;
constructor(handler, synchronous) { constructor(handler, synchronous) {
this.handler = handler; this.handler = handler;
this.synchronous = synchronous || false; this.synchronous = synchronous || false;
...@@ -28,6 +30,13 @@ class Handler { ...@@ -28,6 +30,13 @@ class Handler {
} }
} }
class YGOProMessagesHelper { class YGOProMessagesHelper {
handlers;
structs;
structs_declaration;
typedefs;
proto_structs;
constants;
singleHandleLimit;
constructor(singleHandleLimit) { constructor(singleHandleLimit) {
this.handlers = { this.handlers = {
STOC: [new Map(), STOC: [new Map(),
......
...@@ -8,6 +8,9 @@ const axios_1 = __importDefault(require("axios")); ...@@ -8,6 +8,9 @@ const axios_1 = __importDefault(require("axios"));
const querystring_1 = __importDefault(require("querystring")); const querystring_1 = __importDefault(require("querystring"));
const moment_1 = __importDefault(require("moment")); const moment_1 = __importDefault(require("moment"));
class AthleticChecker { class AthleticChecker {
config;
athleticDeckCache;
lastAthleticDeckFetchTime;
constructor(config) { constructor(config) {
this.config = config; this.config = config;
} }
......
...@@ -40,35 +40,40 @@ const jszip_1 = __importDefault(require("jszip")); ...@@ -40,35 +40,40 @@ const jszip_1 = __importDefault(require("jszip"));
const fs = __importStar(require("fs")); const fs = __importStar(require("fs"));
require("reflect-metadata"); require("reflect-metadata");
class DataManager { class DataManager {
config;
log;
ready;
db;
constructor(config, log) { constructor(config, log) {
this.config = config; this.config = config;
this.ready = false;
this.log = log; this.log = log;
this.ready = false;
} }
async transaction(fun) { async transaction(fun) {
const runner = this.db.createQueryRunner();
await runner.connect();
await runner.startTransaction();
let result = false;
try { try {
result = await fun(runner.manager); // @ts-ignore
if (this.config.type !== 'sqlite') {
this.db.transaction(async (mdb) => {
const result = await fun(mdb);
if (!result) {
throw new Error('Rollback requested.');
}
});
}
else {
await fun(this.db.manager);
}
} }
catch (e) { catch (e) {
result = false; this.log.warn(`Transaction failed: ${e.toString()}`);
this.log.warn(`Failed running transaction: ${e.toString()}`);
}
if (result) {
await runner.commitTransaction();
} }
else {
await runner.rollbackTransaction();
}
await runner.release();
} }
async init() { async init() {
this.db = await typeorm_1.createConnection({ this.db = await typeorm_1.createConnection({
type: "mysql", type: "mysql",
synchronize: true, synchronize: true,
supportBigNumbers: true,
bigNumberStrings: false,
entities: ["./data-manager/entities/*.js"], entities: ["./data-manager/entities/*.js"],
...this.config ...this.config
}); });
...@@ -76,8 +81,13 @@ class DataManager { ...@@ -76,8 +81,13 @@ class DataManager {
} }
async getCloudReplaysFromKey(key) { async getCloudReplaysFromKey(key) {
try { try {
const replays = await this.db.createQueryBuilder(CloudReplay_1.CloudReplay, "replay") const replaysQuery = this.db.createQueryBuilder(CloudReplay_1.CloudReplay, "replay");
.where("exists (select id from cloud_replay_player where cloud_replay_player.cloudReplayId = replay.id and cloud_replay_player.key = :key)", { key }) const sqb = replaysQuery.subQuery()
.select('splayer.id')
.from(CloudReplayPlayer_1.CloudReplayPlayer, 'splayer')
.where('splayer.cloudReplayId = replay.id')
.andWhere('splayer.key = :key');
const replays = await replaysQuery.where(`exists ${sqb.getQuery()}`, { key })
.orderBy("replay.date", "DESC") .orderBy("replay.date", "DESC")
.limit(10) .limit(10)
.leftJoinAndSelect("replay.players", "player") .leftJoinAndSelect("replay.players", "player")
...@@ -275,18 +285,24 @@ class DataManager { ...@@ -275,18 +285,24 @@ class DataManager {
queryBuilder.andWhere("duelLog.duelCount = :duelCount", { duelCount }); queryBuilder.andWhere("duelLog.duelCount = :duelCount", { duelCount });
} }
if (playerName != null && playerName.length || playerScore != null && !isNaN(playerScore)) { if (playerName != null && playerName.length || playerScore != null && !isNaN(playerScore)) {
let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id"; const sqb = queryBuilder.subQuery()
.select('splayer.id')
.from(DuelLogPlayer_1.DuelLogPlayer, 'splayer')
.where('splayer.duelLogId = duelLog.id');
//let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id";
const innerQueryParams = {}; const innerQueryParams = {};
if (playerName != null && playerName.length) { if (playerName != null && playerName.length) {
//const escapedPlayerName = this.getEscapedString(playerName); //const escapedPlayerName = this.getEscapedString(playerName);
innerQuery += " and duel_log_player.realName = :playerName"; sqb.andWhere('splayer.realName = :playerName');
//innerQuery += " and duel_log_player.realName = :playerName";
innerQueryParams.playerName = playerName; innerQueryParams.playerName = playerName;
} }
if (playerScore != null && !isNaN(playerScore)) { if (playerScore != null && !isNaN(playerScore)) {
innerQuery += " and duel_log_player.score = :playerScore"; //innerQuery += " and duel_log_player.score = :playerScore";
sqb.andWhere('splayer.score = :playerScore');
innerQueryParams.playerScore = playerScore; innerQueryParams.playerScore = playerScore;
} }
queryBuilder.andWhere(`exists (${innerQuery})`, innerQueryParams); queryBuilder.andWhere(`exists ${sqb.getQuery()}`, innerQueryParams);
} }
queryBuilder.orderBy("duelLog.id", "DESC") queryBuilder.orderBy("duelLog.id", "DESC")
.leftJoinAndSelect("duelLog.players", "player"); .leftJoinAndSelect("duelLog.players", "player");
...@@ -313,8 +329,16 @@ class DataManager { ...@@ -313,8 +329,16 @@ class DataManager {
async getDuelLogFromRecoverSearch(realName) { async getDuelLogFromRecoverSearch(realName) {
const repo = this.db.getRepository(DuelLog_1.DuelLog); const repo = this.db.getRepository(DuelLog_1.DuelLog);
try { try {
const duelLogs = await repo.createQueryBuilder("duelLog") const duelLogsQuery = repo.createQueryBuilder("duelLog")
.where("startDeckBuffer is not null and currentDeckBuffer is not null and roomMode != 2 and exists (select id from duel_log_player where duel_log_player.duelLogId = duelLog.id and duel_log_player.realName = :realName)", { realName }) .where('startDeckBuffer is not null')
.andWhere('currentDeckBuffer is not null')
.andWhere('roomMode != 2');
const sqb = duelLogsQuery.subQuery()
.select('splayer.id')
.from(DuelLogPlayer_1.DuelLogPlayer, 'splayer')
.andWhere('splayer.duelLogId = duelLog.id')
.andWhere('splayer.realName = :realName');
const duelLogs = await duelLogsQuery.andWhere(`exists ${sqb.getQuery()}`, { realName })
.orderBy("duelLog.id", "DESC") .orderBy("duelLog.id", "DESC")
.limit(10) .limit(10)
.leftJoinAndSelect("duelLog.players", "player") .leftJoinAndSelect("duelLog.players", "player")
......
import moment from "moment"; import moment from "moment";
import bunyan from "bunyan"; import bunyan from "bunyan";
import {Connection, ConnectionOptions, createConnection, EntityManager} from "typeorm"; import {Connection, createConnection, EntityManager} from "typeorm";
import {CloudReplay} from "./entities/CloudReplay"; import {CloudReplay} from "./entities/CloudReplay";
import {CloudReplayPlayer} from "./entities/CloudReplayPlayer"; import {CloudReplayPlayer} from "./entities/CloudReplayPlayer";
import {Ban} from "./entities/Ban"; import {Ban} from "./entities/Ban";
...@@ -16,6 +16,7 @@ import {RandomDuelScore} from "./entities/RandomDuelScore"; ...@@ -16,6 +16,7 @@ import {RandomDuelScore} from "./entities/RandomDuelScore";
import JSZip from "jszip"; import JSZip from "jszip";
import * as fs from "fs"; import * as fs from "fs";
import "reflect-metadata"; import "reflect-metadata";
import { MysqlConnectionOptions } from "typeorm/driver/mysql/MysqlConnectionOptions";
interface BasePlayerInfo { interface BasePlayerInfo {
name: string; name: string;
...@@ -42,37 +43,34 @@ export interface DuelLogQuery {roomName: string, duelCount: number, playerName: ...@@ -42,37 +43,34 @@ export interface DuelLogQuery {roomName: string, duelCount: number, playerName:
export class DataManager { export class DataManager {
config: ConnectionOptions;
ready: boolean; ready: boolean;
db: Connection; private db: Connection;
log: bunyan; constructor(private config: MysqlConnectionOptions, private log: bunyan) {
constructor(config: ConnectionOptions, log: bunyan) {
this.config = config;
this.ready = false; this.ready = false;
this.log = log;
} }
private async transaction(fun: (mdb: EntityManager) => Promise<boolean>) { private async transaction(fun: (mdb: EntityManager) => Promise<boolean>) {
const runner = this.db.createQueryRunner();
await runner.connect();
await runner.startTransaction();
let result = false;
try { try {
result = await fun(runner.manager); // @ts-ignore
} catch(e) { if (this.config.type !== 'sqlite') {
result = false; this.db.transaction(async (mdb) => {
this.log.warn(`Failed running transaction: ${e.toString()}`) const result = await fun(mdb);
} if (!result) {
if(result) { throw new Error('Rollback requested.');
await runner.commitTransaction(); }
} else { });
await runner.rollbackTransaction(); } else {
await fun(this.db.manager);
}
} catch (e) {
this.log.warn(`Transaction failed: ${e.toString()}`);
} }
await runner.release();
} }
async init() { async init() {
this.db = await createConnection({ this.db = await createConnection({
type: "mysql", type: "mysql",
synchronize: true, synchronize: true,
supportBigNumbers: true,
bigNumberStrings: false,
entities: ["./data-manager/entities/*.js"], entities: ["./data-manager/entities/*.js"],
...this.config ...this.config
}); });
...@@ -80,8 +78,13 @@ export class DataManager { ...@@ -80,8 +78,13 @@ export class DataManager {
} }
async getCloudReplaysFromKey(key: string) { async getCloudReplaysFromKey(key: string) {
try { try {
const replays = await this.db.createQueryBuilder(CloudReplay, "replay") const replaysQuery = this.db.createQueryBuilder(CloudReplay, "replay");
.where("exists (select id from cloud_replay_player where cloud_replay_player.cloudReplayId = replay.id and cloud_replay_player.key = :key)", { key }) const sqb = replaysQuery.subQuery()
.select('splayer.id')
.from(CloudReplayPlayer, 'splayer')
.where('splayer.cloudReplayId = replay.id')
.andWhere('splayer.key = :key');
const replays = await replaysQuery.where(`exists ${sqb.getQuery()}`, { key })
.orderBy("replay.date", "DESC") .orderBy("replay.date", "DESC")
.limit(10) .limit(10)
.leftJoinAndSelect("replay.players", "player") .leftJoinAndSelect("replay.players", "player")
...@@ -282,19 +285,25 @@ export class DataManager { ...@@ -282,19 +285,25 @@ export class DataManager {
if(duelCount != null && !isNaN(duelCount)) { if(duelCount != null && !isNaN(duelCount)) {
queryBuilder.andWhere("duelLog.duelCount = :duelCount", { duelCount }); queryBuilder.andWhere("duelLog.duelCount = :duelCount", { duelCount });
} }
if(playerName != null && playerName.length || playerScore != null && !isNaN(playerScore)) { if (playerName != null && playerName.length || playerScore != null && !isNaN(playerScore)) {
let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id"; const sqb = queryBuilder.subQuery()
.select('splayer.id')
.from(DuelLogPlayer, 'splayer')
.where('splayer.duelLogId = duelLog.id');
//let innerQuery = "select id from duel_log_player where duel_log_player.duelLogId = duelLog.id";
const innerQueryParams: any = {}; const innerQueryParams: any = {};
if(playerName != null && playerName.length) { if(playerName != null && playerName.length) {
//const escapedPlayerName = this.getEscapedString(playerName); //const escapedPlayerName = this.getEscapedString(playerName);
innerQuery += " and duel_log_player.realName = :playerName"; sqb.andWhere('splayer.realName = :playerName');
//innerQuery += " and duel_log_player.realName = :playerName";
innerQueryParams.playerName = playerName; innerQueryParams.playerName = playerName;
} }
if(playerScore != null && !isNaN(playerScore)) { if(playerScore != null && !isNaN(playerScore)) {
innerQuery += " and duel_log_player.score = :playerScore"; //innerQuery += " and duel_log_player.score = :playerScore";
sqb.andWhere('splayer.score = :playerScore');
innerQueryParams.playerScore = playerScore; innerQueryParams.playerScore = playerScore;
} }
queryBuilder.andWhere(`exists (${innerQuery})`, innerQueryParams); queryBuilder.andWhere(`exists ${sqb.getQuery()}`, innerQueryParams);
} }
queryBuilder.orderBy("duelLog.id", "DESC") queryBuilder.orderBy("duelLog.id", "DESC")
.leftJoinAndSelect("duelLog.players", "player"); .leftJoinAndSelect("duelLog.players", "player");
...@@ -322,8 +331,16 @@ export class DataManager { ...@@ -322,8 +331,16 @@ export class DataManager {
async getDuelLogFromRecoverSearch(realName: string) { async getDuelLogFromRecoverSearch(realName: string) {
const repo = this.db.getRepository(DuelLog); const repo = this.db.getRepository(DuelLog);
try { try {
const duelLogs = await repo.createQueryBuilder("duelLog") const duelLogsQuery = repo.createQueryBuilder("duelLog")
.where("startDeckBuffer is not null and currentDeckBuffer is not null and roomMode != 2 and exists (select id from duel_log_player where duel_log_player.duelLogId = duelLog.id and duel_log_player.realName = :realName)", { realName }) .where('startDeckBuffer is not null')
.andWhere('currentDeckBuffer is not null')
.andWhere('roomMode != 2');
const sqb = duelLogsQuery.subQuery()
.select('splayer.id')
.from(DuelLogPlayer, 'splayer')
.andWhere('splayer.duelLogId = duelLog.id')
.andWhere('splayer.realName = :realName');
const duelLogs = await duelLogsQuery.andWhere(`exists ${sqb.getQuery()}`, { realName })
.orderBy("duelLog.id", "DESC") .orderBy("duelLog.id", "DESC")
.limit(10) .limit(10)
.leftJoinAndSelect("duelLog.players", "player") .leftJoinAndSelect("duelLog.players", "player")
......
...@@ -13,9 +13,12 @@ exports.Ban = void 0; ...@@ -13,9 +13,12 @@ exports.Ban = void 0;
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let Ban = class Ban extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let Ban = class Ban extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
id;
ip;
name;
}; };
__decorate([ __decorate([
typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: "bigint" }), typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: global.PrimaryKeyType || 'bigint' }),
__metadata("design:type", Number) __metadata("design:type", Number)
], Ban.prototype, "id", void 0); ], Ban.prototype, "id", void 0);
__decorate([ __decorate([
......
...@@ -4,7 +4,7 @@ import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase"; ...@@ -4,7 +4,7 @@ import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase";
@Entity() @Entity()
@Unique(["ip", "name"]) @Unique(["ip", "name"])
export class Ban extends CreateAndUpdateTimeBase { export class Ban extends CreateAndUpdateTimeBase {
@PrimaryGeneratedColumn({ unsigned: true, type: "bigint" }) @PrimaryGeneratedColumn({ unsigned: true, type: (global as any).PrimaryKeyType as ('bigint' | 'integer') || 'bigint' })
id: number; id: number;
@Index() @Index()
......
...@@ -13,9 +13,12 @@ exports.BasePlayer = void 0; ...@@ -13,9 +13,12 @@ exports.BasePlayer = void 0;
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
class BasePlayer extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { class BasePlayer extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
id;
name;
pos;
} }
__decorate([ __decorate([
typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: "bigint" }), typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: global.PrimaryKeyType || 'bigint' }),
__metadata("design:type", Number) __metadata("design:type", Number)
], BasePlayer.prototype, "id", void 0); ], BasePlayer.prototype, "id", void 0);
__decorate([ __decorate([
......
import {Column, PrimaryGeneratedColumn} from "typeorm"; import {Column, PrimaryGeneratedColumn} from "typeorm";
import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase"; import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase";
export abstract class BasePlayer extends CreateAndUpdateTimeBase { export abstract class BasePlayer extends CreateAndUpdateTimeBase {
@PrimaryGeneratedColumn({unsigned: true, type: "bigint"}) @PrimaryGeneratedColumn({unsigned: true, type: (global as any).PrimaryKeyType as ('bigint' | 'integer') || 'bigint'})
id: number; id: number;
@Column({ type: "varchar", length: 20 }) @Column({ type: "varchar", length: 20 })
...@@ -10,4 +9,4 @@ export abstract class BasePlayer extends CreateAndUpdateTimeBase { ...@@ -10,4 +9,4 @@ export abstract class BasePlayer extends CreateAndUpdateTimeBase {
@Column({ type: "tinyint" }) @Column({ type: "tinyint" })
pos: number; pos: number;
} }
\ No newline at end of file
...@@ -19,15 +19,19 @@ const underscore_1 = __importDefault(require("underscore")); ...@@ -19,15 +19,19 @@ const underscore_1 = __importDefault(require("underscore"));
const moment_1 = __importDefault(require("moment")); const moment_1 = __importDefault(require("moment"));
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let CloudReplay = class CloudReplay extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let CloudReplay = class CloudReplay extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
id;
data;
fromBuffer(buffer) { fromBuffer(buffer) {
this.data = buffer.toString("base64"); this.data = buffer.toString("base64");
} }
toBuffer() { toBuffer() {
return Buffer.from(this.data, "base64"); return Buffer.from(this.data, "base64");
} }
date;
getDateString() { getDateString() {
return moment_1.default(this.date).format('YYYY-MM-DD HH:mm:ss'); return moment_1.default(this.date).format('YYYY-MM-DD HH:mm:ss');
} }
players;
getPlayerNamesString() { getPlayerNamesString() {
const playerInfos = underscore_1.default.clone(this.players); const playerInfos = underscore_1.default.clone(this.players);
playerInfos.sort((p1, p2) => p1.pos - p2.pos); playerInfos.sort((p1, p2) => p1.pos - p2.pos);
...@@ -38,7 +42,7 @@ let CloudReplay = class CloudReplay extends CreateAndUpdateTimeBase_1.CreateAndU ...@@ -38,7 +42,7 @@ let CloudReplay = class CloudReplay extends CreateAndUpdateTimeBase_1.CreateAndU
} }
}; };
__decorate([ __decorate([
typeorm_1.PrimaryColumn({ unsigned: true, type: "bigint" }), typeorm_1.PrimaryColumn({ unsigned: true, type: global.PrimaryKeyType || 'bigint' }),
__metadata("design:type", Number) __metadata("design:type", Number)
], CloudReplay.prototype, "id", void 0); ], CloudReplay.prototype, "id", void 0);
__decorate([ __decorate([
......
...@@ -10,7 +10,7 @@ import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase"; ...@@ -10,7 +10,7 @@ import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase";
} }
}) })
export class CloudReplay extends CreateAndUpdateTimeBase { export class CloudReplay extends CreateAndUpdateTimeBase {
@PrimaryColumn({ unsigned: true, type: "bigint" }) @PrimaryColumn({ unsigned: true, type: (global as any).PrimaryKeyType as ('bigint' | 'integer') || 'bigint' })
id: number; id: number;
@Column({ type: "text" }) @Column({ type: "text" })
......
...@@ -15,6 +15,8 @@ const typeorm_1 = require("typeorm"); ...@@ -15,6 +15,8 @@ const typeorm_1 = require("typeorm");
const CloudReplay_1 = require("./CloudReplay"); const CloudReplay_1 = require("./CloudReplay");
const BasePlayer_1 = require("./BasePlayer"); const BasePlayer_1 = require("./BasePlayer");
let CloudReplayPlayer = CloudReplayPlayer_1 = class CloudReplayPlayer extends BasePlayer_1.BasePlayer { let CloudReplayPlayer = CloudReplayPlayer_1 = class CloudReplayPlayer extends BasePlayer_1.BasePlayer {
key;
cloudReplay;
static fromPlayerInfo(info) { static fromPlayerInfo(info) {
const p = new CloudReplayPlayer_1(); const p = new CloudReplayPlayer_1();
p.key = info.key; p.key = info.key;
......
...@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true }); ...@@ -12,6 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateAndUpdateTimeBase = void 0; exports.CreateAndUpdateTimeBase = void 0;
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
class CreateAndUpdateTimeBase { class CreateAndUpdateTimeBase {
createTime;
updateTime;
} }
__decorate([ __decorate([
typeorm_1.CreateDateColumn(), typeorm_1.CreateDateColumn(),
......
...@@ -19,6 +19,15 @@ const moment_1 = __importDefault(require("moment")); ...@@ -19,6 +19,15 @@ const moment_1 = __importDefault(require("moment"));
const underscore_1 = __importDefault(require("underscore")); const underscore_1 = __importDefault(require("underscore"));
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let DuelLog = class DuelLog extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let DuelLog = class DuelLog extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
id;
time;
name;
roomId;
cloudReplayId; // not very needed to become a relation
replayFileName;
roomMode;
duelCount;
players;
getViewString() { getViewString() {
const viewPlayers = underscore_1.default.clone(this.players); const viewPlayers = underscore_1.default.clone(this.players);
viewPlayers.sort((p1, p2) => p1.pos - p2.pos); viewPlayers.sort((p1, p2) => p1.pos - p2.pos);
...@@ -47,7 +56,7 @@ let DuelLog = class DuelLog extends CreateAndUpdateTimeBase_1.CreateAndUpdateTim ...@@ -47,7 +56,7 @@ let DuelLog = class DuelLog extends CreateAndUpdateTimeBase_1.CreateAndUpdateTim
} }
}; };
__decorate([ __decorate([
typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: "bigint" }), typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: global.PrimaryKeyType || 'bigint' }),
__metadata("design:type", Number) __metadata("design:type", Number)
], DuelLog.prototype, "id", void 0); ], DuelLog.prototype, "id", void 0);
__decorate([ __decorate([
...@@ -65,7 +74,7 @@ __decorate([ ...@@ -65,7 +74,7 @@ __decorate([
__metadata("design:type", Number) __metadata("design:type", Number)
], DuelLog.prototype, "roomId", void 0); ], DuelLog.prototype, "roomId", void 0);
__decorate([ __decorate([
typeorm_1.Column("bigint"), typeorm_1.Column(global.PrimaryKeyType || 'bigint'),
__metadata("design:type", Number) __metadata("design:type", Number)
], DuelLog.prototype, "cloudReplayId", void 0); ], DuelLog.prototype, "cloudReplayId", void 0);
__decorate([ __decorate([
......
...@@ -10,7 +10,7 @@ import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase"; ...@@ -10,7 +10,7 @@ import {CreateAndUpdateTimeBase} from "./CreateAndUpdateTimeBase";
} }
}) })
export class DuelLog extends CreateAndUpdateTimeBase { export class DuelLog extends CreateAndUpdateTimeBase {
@PrimaryGeneratedColumn({unsigned: true, type: "bigint"}) @PrimaryGeneratedColumn({unsigned: true, type: (global as any).PrimaryKeyType as ('bigint' | 'integer') || 'bigint'})
id: number; id: number;
@Index() @Index()
...@@ -24,7 +24,7 @@ export class DuelLog extends CreateAndUpdateTimeBase { ...@@ -24,7 +24,7 @@ export class DuelLog extends CreateAndUpdateTimeBase {
@Column("int") @Column("int")
roomId: number; roomId: number;
@Column("bigint") @Column((global as any).PrimaryKeyType as ('bigint' | 'integer') || 'bigint')
cloudReplayId: number; // not very needed to become a relation cloudReplayId: number; // not very needed to become a relation
@Column({type: "varchar", length: 256}) @Column({type: "varchar", length: 256})
...@@ -67,4 +67,4 @@ export class DuelLog extends CreateAndUpdateTimeBase { ...@@ -67,4 +67,4 @@ export class DuelLog extends CreateAndUpdateTimeBase {
} }
return data; return data;
} }
} }
\ No newline at end of file
...@@ -16,6 +16,15 @@ const BasePlayer_1 = require("./BasePlayer"); ...@@ -16,6 +16,15 @@ const BasePlayer_1 = require("./BasePlayer");
const DuelLog_1 = require("./DuelLog"); const DuelLog_1 = require("./DuelLog");
const DeckEncoder_1 = require("../DeckEncoder"); const DeckEncoder_1 = require("../DeckEncoder");
let DuelLogPlayer = DuelLogPlayer_1 = class DuelLogPlayer extends BasePlayer_1.BasePlayer { let DuelLogPlayer = DuelLogPlayer_1 = class DuelLogPlayer extends BasePlayer_1.BasePlayer {
realName;
ip;
isFirst;
score;
lp;
cardCount;
startDeckBuffer;
currentDeckBuffer;
winner;
setStartDeck(deck) { setStartDeck(deck) {
if (deck === null) { if (deck === null) {
this.startDeckBuffer = null; this.startDeckBuffer = null;
...@@ -36,6 +45,7 @@ let DuelLogPlayer = DuelLogPlayer_1 = class DuelLogPlayer extends BasePlayer_1.B ...@@ -36,6 +45,7 @@ let DuelLogPlayer = DuelLogPlayer_1 = class DuelLogPlayer extends BasePlayer_1.B
getCurrentDeck() { getCurrentDeck() {
return DeckEncoder_1.decodeDeck(Buffer.from(this.currentDeckBuffer, "base64")); return DeckEncoder_1.decodeDeck(Buffer.from(this.currentDeckBuffer, "base64"));
} }
duelLog;
static fromDuelLogPlayerInfo(info) { static fromDuelLogPlayerInfo(info) {
const p = new DuelLogPlayer_1(); const p = new DuelLogPlayer_1();
p.name = info.name; p.name = info.name;
......
...@@ -13,6 +13,11 @@ exports.RandomDuelBan = void 0; ...@@ -13,6 +13,11 @@ exports.RandomDuelBan = void 0;
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let RandomDuelBan = class RandomDuelBan extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let RandomDuelBan = class RandomDuelBan extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
ip;
time;
count;
reasons;
needTip;
setNeedTip(need) { setNeedTip(need) {
this.needTip = need ? 1 : 0; this.needTip = need ? 1 : 0;
} }
......
...@@ -13,6 +13,11 @@ exports.RandomDuelScore = void 0; ...@@ -13,6 +13,11 @@ exports.RandomDuelScore = void 0;
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let RandomDuelScore = class RandomDuelScore extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let RandomDuelScore = class RandomDuelScore extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
name;
winCount;
loseCount;
fleeCount;
winCombo;
getDisplayName() { getDisplayName() {
return this.name.split("$")[0]; return this.name.split("$")[0];
} }
......
...@@ -19,9 +19,16 @@ const VipKey_1 = require("./VipKey"); ...@@ -19,9 +19,16 @@ const VipKey_1 = require("./VipKey");
const moment_1 = __importDefault(require("moment")); const moment_1 = __importDefault(require("moment"));
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let User = class User extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let User = class User extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
key;
chatColor;
vipExpireDate;
isVip() { isVip() {
return this.vipExpireDate && moment_1.default().isBefore(this.vipExpireDate); return this.vipExpireDate && moment_1.default().isBefore(this.vipExpireDate);
} }
victory;
words;
dialogues;
usedKeys;
}; };
__decorate([ __decorate([
typeorm_1.PrimaryColumn({ type: "varchar", length: 128 }), typeorm_1.PrimaryColumn({ type: "varchar", length: 128 }),
......
...@@ -13,6 +13,10 @@ exports.UserDialog = void 0; ...@@ -13,6 +13,10 @@ exports.UserDialog = void 0;
const typeorm_1 = require("typeorm"); const typeorm_1 = require("typeorm");
const User_1 = require("./User"); const User_1 = require("./User");
let UserDialog = class UserDialog { let UserDialog = class UserDialog {
id;
cardCode;
text;
user;
}; };
__decorate([ __decorate([
typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: "bigint" }), typeorm_1.PrimaryGeneratedColumn({ unsigned: true, type: "bigint" }),
......
...@@ -14,6 +14,11 @@ const typeorm_1 = require("typeorm"); ...@@ -14,6 +14,11 @@ const typeorm_1 = require("typeorm");
const User_1 = require("./User"); const User_1 = require("./User");
const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase"); const CreateAndUpdateTimeBase_1 = require("./CreateAndUpdateTimeBase");
let VipKey = class VipKey extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase { let VipKey = class VipKey extends CreateAndUpdateTimeBase_1.CreateAndUpdateTimeBase {
id;
key;
type;
isUsed;
usedBy;
toJSON() { toJSON() {
return { key: this.key, type: this.type }; return { key: this.key, type: this.type };
} }
......
...@@ -404,6 +404,7 @@ init = () -> ...@@ -404,6 +404,7 @@ init = () ->
log.info('Saving migrated settings.') log.info('Saving migrated settings.')
await setting_save(settings) await setting_save(settings)
if settings.modules.mysql.enabled if settings.modules.mysql.enabled
global.PrimaryKeyType = if settings.modules.mysql.db.type == 'sqlite' then 'integer' else 'bigint'
DataManager = require('./data-manager/DataManager.js').DataManager DataManager = require('./data-manager/DataManager.js').DataManager
dataManager = global.dataManager = new DataManager(settings.modules.mysql.db, log) dataManager = global.dataManager = new DataManager(settings.modules.mysql.db, log)
log.info('Connecting to database.') log.info('Connecting to database.')
......
...@@ -520,6 +520,7 @@ ...@@ -520,6 +520,7 @@
await setting_save(settings); await setting_save(settings);
} }
if (settings.modules.mysql.enabled) { if (settings.modules.mysql.enabled) {
global.PrimaryKeyType = settings.modules.mysql.db.type === 'sqlite' ? 'integer' : 'bigint';
DataManager = require('./data-manager/DataManager.js').DataManager; DataManager = require('./data-manager/DataManager.js').DataManager;
dataManager = global.dataManager = new DataManager(settings.modules.mysql.db, log); dataManager = global.dataManager = new DataManager(settings.modules.mysql.db, log);
log.info('Connecting to database.'); log.info('Connecting to database.');
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment