From d1b679d55a1e5dac20b34d23e12989ac5b99889b Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 8 Feb 2020 15:05:17 +0100 Subject: [PATCH] working buytoken (untested) --- src/backend/Components/Item/ItemManager.ts | 17 ++++- src/backend/Components/Raid/Interface.ts | 4 +- src/backend/Components/Raid/RaidManager.ts | 27 ++++--- .../pages/character/character.component.html | 2 +- .../pages/raids/createraid.compontent.ts | 4 + test/backendTest.ts | 76 ++++++++++++++++++- 6 files changed, 113 insertions(+), 17 deletions(-) diff --git a/src/backend/Components/Item/ItemManager.ts b/src/backend/Components/Item/ItemManager.ts index 25969a6..630bc63 100644 --- a/src/backend/Components/Item/ItemManager.ts +++ b/src/backend/Components/Item/ItemManager.ts @@ -141,6 +141,8 @@ implements FrontworkComponent, TableDefin await this.userManager.decrementCurrency(record.user, item.tier, 1) const modifier = await this.calculatePriorities(itemname, character) + const tx = await this.admin.knex.transaction() + if(streaks.length > 0){ const myStreak = streaks.find(token => token.itemname === itemname) if(myStreak){ @@ -148,6 +150,7 @@ implements FrontworkComponent, TableDefin //getLogger('ItemManager').debug('update signupid and increment level') await this.admin .knex(item.tier+'tokens') + .transacting(tx) .where({ characterid: character.id, itemname: item.itemname @@ -162,6 +165,7 @@ implements FrontworkComponent, TableDefin //getLogger('ItemManager').debug('delete streaks') await Promise.all(streaks.map(async s => await this.admin .knex(item.tier+'tokens') + .transacting(tx) .where({ itemname: s.itemname, characterid: character.id, @@ -169,16 +173,19 @@ implements FrontworkComponent, TableDefin }) .del() )) - - if(myStreak) + + if(myStreak){ + await tx.commit() return await this.getToken(character, item) + } } const matchingReserve = activeTokens.find(token => token.itemname === itemname) if(matchingReserve){ - getLogger('ItemManager').debug('upgrade reserve') + //getLogger('ItemManager').debug('upgrade reserve') await this.admin .knex(item.tier+'tokens') + .transacting(tx) .increment('level') .where({ signupid: signup.id, @@ -186,9 +193,10 @@ implements FrontworkComponent, TableDefin itemname: item.itemname }) }else{ - getLogger('ItemManager').debug('new reserve') + //getLogger('ItemManager').debug('new reserve') await this.admin .knex(item.tier+'tokens') + .transacting(tx) .insert({ characterid: character.id, itemname: item.itemname, @@ -196,6 +204,7 @@ implements FrontworkComponent, TableDefin signupid: signup.id }) } + await tx.commit() return await this.getToken(character, item) } diff --git a/src/backend/Components/Raid/Interface.ts b/src/backend/Components/Raid/Interface.ts index 2dd4ef5..ee89249 100644 --- a/src/backend/Components/Raid/Interface.ts +++ b/src/backend/Components/Raid/Interface.ts @@ -2,8 +2,8 @@ import { Raid, Signup, Character, RaidData, User, Spec } from "../../Types/Types export class IRaidManager{ getRaids: () => Promise - createRaid: (raid:Raid) => Promise - addSignup: (signup: Signup) => Promise + createRaid: (raid:Raid) => Promise + addSignup: (signup: Signup) => Promise removeSignup: (signup: Signup) => Promise getSignups: (raid:Raid) => Promise<(Signup & Character & Spec & User)[]> sign: (userToken: string, character:Character, raid:Raid, late:boolean) => Promise diff --git a/src/backend/Components/Raid/RaidManager.ts b/src/backend/Components/Raid/RaidManager.ts index d723584..f98c216 100644 --- a/src/backend/Components/Raid/RaidManager.ts +++ b/src/backend/Components/Raid/RaidManager.ts @@ -66,7 +66,7 @@ implements FrontworkComponent, IRaidManag table.string('description').notNullable() table.string('title').notNullable() table.integer('size').defaultTo(40) - table.enu('tier', _Tiers).defaultTo(null as any) + table.string('tier').defaultTo('null') } },{ name: 'archive', @@ -90,14 +90,23 @@ implements FrontworkComponent, IRaidManag ] } - createRaid = async (raid:Raid) => await this.admin - .knex('raids') - .insert(raid) - - addSignup = async (signup: Signup) => await this.admin - .knex('signups') - .insert(signup) - + createRaid = async (raid:Raid) : Promise=> { + const ids:number[] = await this.admin + .knex('raids') + .insert(raid) + + return await this.admin.knex('raids').where({id: ids[0]}).first() + } + + addSignup = async (signup: Signup) => { + + const ids:number[] = await this.admin + .knex('signups') + .insert(signup) + return await this.admin.knex('signups').where({id: ids[0]}).first() + + } + removeSignup = async (signup: Signup) => await this.admin .knex('signups') .where({ diff --git a/src/frontend/src/app/frontcraft/pages/character/character.component.html b/src/frontend/src/app/frontcraft/pages/character/character.component.html index e3fdec9..7e0fe63 100644 --- a/src/frontend/src/app/frontcraft/pages/character/character.component.html +++ b/src/frontend/src/app/frontcraft/pages/character/character.component.html @@ -25,7 +25,7 @@ status="control">

[ {{token.level}} ] -
+
diff --git a/src/frontend/src/app/frontcraft/pages/raids/createraid.compontent.ts b/src/frontend/src/app/frontcraft/pages/raids/createraid.compontent.ts index 23b03f1..98dc41a 100644 --- a/src/frontend/src/app/frontcraft/pages/raids/createraid.compontent.ts +++ b/src/frontend/src/app/frontcraft/pages/raids/createraid.compontent.ts @@ -33,6 +33,10 @@ export class FrontcraftCreateRaidsComponent implements OnInit { loadNext(cardData) { } + onTierSelect(){ + + } + onTemplateSelect(){ const templateDate = new Date(this.template.start) this.title = this.template.title diff --git a/test/backendTest.ts b/test/backendTest.ts index f7a3a12..227a1ce 100644 --- a/test/backendTest.ts +++ b/test/backendTest.ts @@ -9,6 +9,7 @@ import { SpecT } from "../src/backend/Types/PlayerSpecs"; type protoAccount = { name : string, + pwHash?: string rank : Rank, race: Race, class: C, @@ -200,7 +201,8 @@ describe('Frontcraft', () => { adminClient.manageRaid.createRaid(insertRaid).then(() => { client.RaidManager.getRaids().then((r)=>{ if(r[0].title === insertRaid.title - && r[0].description === insertRaid.description){ + && r[0].description === insertRaid.description + && r[0].tier === "MC"){ raids.push(r[0]) done() } @@ -612,4 +614,76 @@ describe('Frontcraft', () => { }) }) }) + + it('implements loot system correctly', (done)=>{ + const ONE_WEEK = 4800000000 + + const Raid = (week:number, tier:string) => { + return { + description: tier+" Test raid 1", + title: tier, + start: (week*ONE_WEEK + Date.now()).toString(), + tier: tier + } + } + const user = Object.values(users)[0] + const createRaid = adminClient.manageRaid.createRaid + const sign = async (raid:Raid, late = false) => await adminClient.signup.sign(user.auth.token.value, user.character, raid, late) + const buyToken = async (signup: Signup, itemname: string) => await client.ItemManager.buyToken(user.auth.token.value, user.character.charactername, itemname, signup) + + createRaid(Raid(0, 'MC')).then(async (MC0:Raid) => { + const T1_0 = await client.ItemManager.getItem(T1[0]) + //const BWL0 = await createRaid(Raid(0, 'BWL')) + const signupMC0 = await sign(MC0) + let token = await buyToken(signupMC0, T1[0]) + if(!token){ + console.log(MC0, signupMC0) + done("No token created") + return + } + + let reserves = await client.ItemManager.getTokens(user.character, [MC0.tier], true) + let streaks = await client.ItemManager.getTokens(user.character, [MC0.tier], false) + if(reserves!.length != 1 + || streaks!.length != 0 + || reserves![0].itemname !== T1_0.itemname + || reserves![0].level !== 7){ + console.log(reserves, streaks); + done("Bad token status") + return + } + await adminClient.manageRaid.startRaid(MC0) + reserves = await client.ItemManager.getTokens(user.character, [MC0.tier], true) + streaks = await client.ItemManager.getTokens(user.character, [MC0.tier], false) + if(reserves!.length != 0 + || streaks!.length != 1 + || streaks![0].itemname !== T1[0] + || streaks![0].level !== 7){ + console.log(reserves, streaks); + done("Bad token status") + return + } + + const MC1 = await createRaid(Raid(1, 'MC')) + const signupMC1 = await sign(MC1) + token = await buyToken(signupMC1, T1[1]) + reserves = await client.ItemManager.getTokens(user.character, [MC1.tier], true) + streaks = await client.ItemManager.getTokens(user.character, [MC1.tier], false) + if(reserves!.length != 1 + || streaks!.length != 0 + || reserves![0].itemname !== T1[1] + || reserves![0].level !== 1){ + console.log(reserves, streaks); + done("Bad token status") + return + } + + done() + + }).catch(e => { + console.log(e); + + done(e) + }) + }) }) \ No newline at end of file