Commit a7efecc1 authored by nanahira's avatar nanahira

use rename other than delete

parent 416af402
...@@ -20,6 +20,25 @@ class DataManager { ...@@ -20,6 +20,25 @@ class DataManager {
this.ready = false; this.ready = false;
this.log = log; this.log = log;
} }
async transaction(fun) {
const runner = await this.db.createQueryRunner();
await runner.connect();
await runner.startTransaction();
let result = false;
try {
result = await fun(runner.manager);
}
catch (e) {
result = false;
this.log.warn(`Failed running transaction: ${e.toString()}`);
}
if (result) {
await runner.commitTransaction();
}
else {
await runner.rollbackTransaction();
}
}
async init() { async init() {
this.db = await typeorm_1.createConnection({ this.db = await typeorm_1.createConnection({
type: "mysql", type: "mysql",
...@@ -75,16 +94,18 @@ class DataManager { ...@@ -75,16 +94,18 @@ class DataManager {
const player = CloudReplayPlayer_1.CloudReplayPlayer.fromPlayerInfo(p); const player = CloudReplayPlayer_1.CloudReplayPlayer.fromPlayerInfo(p);
return player; return player;
}); });
await this.db.transaction(async (mdb) => { await this.transaction(async (mdb) => {
try { try {
const nreplay = await mdb.save(replay); const nreplay = await mdb.save(replay);
for (let player of players) { for (let player of players) {
player.cloudReplay = nreplay; player.cloudReplay = nreplay;
} }
await mdb.save(players); await mdb.save(players);
return true;
} }
catch (e) { catch (e) {
this.log.warn(`Failed to save replay R#${replay.id}: ${e.toString()}`); this.log.warn(`Failed to save replay R#${replay.id}: ${e.toString()}`);
return false;
} }
}); });
} }
...@@ -233,7 +254,6 @@ class DataManager { ...@@ -233,7 +254,6 @@ class DataManager {
return allDuelLogs.map(duelLog => duelLog.replayFileName); return allDuelLogs.map(duelLog => duelLog.replayFileName);
} }
async clearDuelLog() { async clearDuelLog() {
//await this.db.transaction(async (mdb) => {
const runner = this.db.createQueryRunner(); const runner = this.db.createQueryRunner();
try { try {
await runner.connect(); await runner.connect();
...@@ -248,7 +268,6 @@ class DataManager { ...@@ -248,7 +268,6 @@ class DataManager {
await runner.rollbackTransaction(); await runner.rollbackTransaction();
this.log.warn(`Failed to clear duel logs: ${e.toString()}`); this.log.warn(`Failed to clear duel logs: ${e.toString()}`);
} }
//});
} }
async saveDuelLog(name, roomId, cloudReplayId, replayFilename, roomMode, duelCount, playerInfos) { async saveDuelLog(name, roomId, cloudReplayId, replayFilename, roomMode, duelCount, playerInfos) {
const duelLog = new DuelLog_1.DuelLog(); const duelLog = new DuelLog_1.DuelLog();
...@@ -260,16 +279,18 @@ class DataManager { ...@@ -260,16 +279,18 @@ class DataManager {
duelLog.roomMode = roomMode; duelLog.roomMode = roomMode;
duelLog.duelCount = duelCount; duelLog.duelCount = duelCount;
const players = playerInfos.map(p => DuelLogPlayer_1.DuelLogPlayer.fromDuelLogPlayerInfo(p)); const players = playerInfos.map(p => DuelLogPlayer_1.DuelLogPlayer.fromDuelLogPlayerInfo(p));
await this.db.transaction(async (mdb) => { await this.transaction(async (mdb) => {
try { try {
const savedDuelLog = await mdb.save(duelLog); const savedDuelLog = await mdb.save(duelLog);
for (let player of players) { for (let player of players) {
player.duelLog = savedDuelLog; player.duelLog = savedDuelLog;
} }
await mdb.save(players); await mdb.save(players);
return true;
} }
catch (e) { catch (e) {
this.log.warn(`Failed to save duel log ${name}: ${e.toString()}`); this.log.warn(`Failed to save duel log ${name}: ${e.toString()}`);
return false;
} }
}); });
} }
...@@ -317,7 +338,7 @@ class DataManager { ...@@ -317,7 +338,7 @@ class DataManager {
return await this.saveUser(user); return await this.saveUser(user);
} }
async migrateChatColors(data) { async migrateChatColors(data) {
await this.db.transaction(async (mdb) => { await this.transaction(async (mdb) => {
try { try {
const users = []; const users = [];
for (let key in data) { for (let key in data) {
...@@ -331,10 +352,11 @@ class DataManager { ...@@ -331,10 +352,11 @@ class DataManager {
users.push(user); users.push(user);
} }
await mdb.save(users); await mdb.save(users);
return true;
} }
catch (e) { catch (e) {
this.log.warn(`Failed to migrate chat color data: ${e.toString()}`); this.log.warn(`Failed to migrate chat color data: ${e.toString()}`);
return null; return false;
} }
}); });
} }
......
...@@ -342,7 +342,7 @@ init = () -> ...@@ -342,7 +342,7 @@ init = () ->
chat_color = await loadJSONAsync('./config/chat_color.json') chat_color = await loadJSONAsync('./config/chat_color.json')
if chat_color if chat_color
await dataManager.migrateChatColors(chat_color.save_list); await dataManager.migrateChatColors(chat_color.save_list);
await fs.promises.unlink('./config/chat_color.json') await fs.promises.rename('./config/chat_color.json', './config/chat_color.json.bak')
log.info("Chat color migrated.") log.info("Chat color migrated.")
catch catch
try try
......
...@@ -443,7 +443,7 @@ ...@@ -443,7 +443,7 @@
chat_color = (await loadJSONAsync('./config/chat_color.json')); chat_color = (await loadJSONAsync('./config/chat_color.json'));
if (chat_color) { if (chat_color) {
await dataManager.migrateChatColors(chat_color.save_list); await dataManager.migrateChatColors(chat_color.save_list);
await fs.promises.unlink('./config/chat_color.json'); await fs.promises.rename('./config/chat_color.json', './config/chat_color.json.bak');
log.info("Chat color migrated."); log.info("Chat color migrated.");
} }
} catch (error1) { } catch (error1) {
......
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