Commit 1c949e19 authored by nanahira's avatar nanahira

transaction

parent f6e10b09
Pipeline #2455 passed with stages
in 42 seconds
...@@ -718,9 +718,12 @@ export class AppService { ...@@ -718,9 +718,12 @@ export class AppService {
battleHistory.isfirstwin = firstWin; battleHistory.isfirstwin = firstWin;
battleHistory.decka = deckA; battleHistory.decka = deckA;
battleHistory.deckb = deckB; battleHistory.deckb = deckB;
await this.transaction(this.mcdb, async (db) => {
const repo = db.getRepository(BattleHistory);
try {
await Promise.all([ await Promise.all([
repo.save(battleHistory), repo.save(battleHistory),
this.mcdb db
.createQueryBuilder() .createQueryBuilder()
.update(UserInfo) .update(UserInfo)
.set({ .set({
...@@ -733,7 +736,7 @@ export class AppService { ...@@ -733,7 +736,7 @@ export class AppService {
}) })
.where('username = :username', { username: userA.username }) .where('username = :username', { username: userA.username })
.execute(), .execute(),
this.mcdb db
.createQueryBuilder() .createQueryBuilder()
.update(UserInfo) .update(UserInfo)
.set({ .set({
...@@ -747,6 +750,12 @@ export class AppService { ...@@ -747,6 +750,12 @@ export class AppService {
.where('username = :username', { username: userB.username }) .where('username = :username', { username: userB.username })
.execute(), .execute(),
]); ]);
return true;
} catch (e) {
this.log.error(`Failed to report score: ${e.toString()}`);
return false;
}
});
} else { } else {
const expResult = EloUtility.getExpScore( const expResult = EloUtility.getExpScore(
userA.exp, userA.exp,
...@@ -788,33 +797,42 @@ export class AppService { ...@@ -788,33 +797,42 @@ export class AppService {
battleHistory.isfirstwin = firstWin; battleHistory.isfirstwin = firstWin;
battleHistory.decka = deckA; battleHistory.decka = deckA;
battleHistory.deckb = deckB; battleHistory.deckb = deckB;
await this.transaction(this.mcdb, async (db) => {
const repo = db.getRepository(BattleHistory);
try {
await Promise.all([ await Promise.all([
repo.save(battleHistory), repo.save(battleHistory),
this.mcdb db
.createQueryBuilder() .createQueryBuilder()
.update(UserInfo) .update(UserInfo)
.set({ .set({
exp: expResult.expA, exp: expResult.expA,
athleticWin: () => `athletic_win + ${paramA.athletic_win}`, entertainWin: () => `entertain_win + ${paramA.entertain_win}`,
athleticLose: () => `athletic_lose + ${paramA.athletic_win}`, entertainLose: () => `entertain_lose + ${paramA.entertain_win}`,
athleticDraw: () => `athletic_draw + ${paramA.athletic_win}`, entertainDraw: () => `entertain_draw + ${paramA.entertain_win}`,
athleticAll: () => `athletic_all + ${paramA.athletic_win}`, entertainAll: () => `entertain_all + ${paramA.entertain_win}`,
}) })
.where('username = :username', { username: userA.username }) .where('username = :username', { username: userA.username })
.execute(), .execute(),
this.mcdb db
.createQueryBuilder() .createQueryBuilder()
.update(UserInfo) .update(UserInfo)
.set({ .set({
exp: expResult.expB, exp: expResult.expB,
athleticWin: () => `athletic_win + ${paramB.athletic_win}`, entertainWin: () => `entertain_win + ${paramB.entertain_win}`,
athleticLose: () => `athletic_lose + ${paramB.athletic_win}`, entertainLose: () => `entertain_lose + ${paramB.entertain_win}`,
athleticDraw: () => `athletic_draw + ${paramB.athletic_win}`, entertainDraw: () => `entertain_draw + ${paramB.entertain_win}`,
athleticAll: () => `athletic_all + ${paramB.athletic_win}`, entertainAll: () => `entertain_all + ${paramB.entertain_win}`,
}) })
.where('username = :username', { username: userB.username }) .where('username = :username', { username: userB.username })
.execute(), .execute(),
]); ]);
return true;
} catch (e) {
this.log.error(`Failed to report score: ${e.toString()}`);
return false;
}
});
} }
return null; return null;
...@@ -893,11 +911,14 @@ export class AppService { ...@@ -893,11 +911,14 @@ export class AppService {
const date_time = moment().format('YYYY-MM-DD'); const date_time = moment().format('YYYY-MM-DD');
const create_time = moment().toDate(); const create_time = moment().toDate();
const repo = this.mcdb.getRepository(VoteResult); let statusCode = 200;
await this.transaction(this.mcdb, async (db) => {
const repo = db.getRepository(VoteResult);
try { try {
if (multiple) { if (multiple) {
if (!opids) { if (!opids) {
return 400; statusCode = 400;
return false;
} }
const voteResults = opids.map((opid) => { const voteResults = opids.map((opid) => {
const voteResult = new VoteResult(); const voteResult = new VoteResult();
...@@ -908,9 +929,7 @@ export class AppService { ...@@ -908,9 +929,7 @@ export class AppService {
voteResult.createTime = create_time; voteResult.createTime = create_time;
return voteResult; return voteResult;
}); });
await Promise.all( await repo.save(voteResults);
voteResults.map((voteResult) => repo.save(voteResult)),
);
} else { } else {
const voteResult = new VoteResult(); const voteResult = new VoteResult();
voteResult.voteId = voteid; voteResult.voteId = voteid;
...@@ -921,15 +940,18 @@ export class AppService { ...@@ -921,15 +940,18 @@ export class AppService {
await repo.save(voteResult); await repo.save(voteResult);
} }
if (username) { if (username) {
await this.mcdb await db
.getRepository(UserInfo) .getRepository(UserInfo)
.update({ username }, { exp: () => 'exp + 1', id: parseInt(user) }); .update({ username }, { exp: () => 'exp + 1', id: parseInt(user) });
} }
return 200; return true;
} catch (e) { } catch (e) {
this.log.error(`Failed updating vote result: ${e.toString()}`); this.log.error(`Failed updating vote result: ${e.toString()}`);
return 500; statusCode = 500;
return false;
} }
});
return statusCode;
} }
private async fetchVoteOptionCount( private async fetchVoteOptionCount(
......
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