working buytoken (untested)

This commit is contained in:
peter
2020-02-08 15:05:17 +01:00
parent 59f518679e
commit d1b679d55a
6 changed files with 113 additions and 17 deletions
+12 -3
View File
@@ -141,6 +141,8 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
await this.userManager.decrementCurrency(record.user, item.tier, 1) await this.userManager.decrementCurrency(record.user, item.tier, 1)
const modifier = await this.calculatePriorities(itemname, character) const modifier = await this.calculatePriorities(itemname, character)
const tx = await this.admin.knex.transaction()
if(streaks.length > 0){ if(streaks.length > 0){
const myStreak = streaks.find(token => token.itemname === itemname) const myStreak = streaks.find(token => token.itemname === itemname)
if(myStreak){ if(myStreak){
@@ -148,6 +150,7 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
//getLogger('ItemManager').debug('update signupid and increment level') //getLogger('ItemManager').debug('update signupid and increment level')
await this.admin await this.admin
.knex(item.tier+'tokens') .knex(item.tier+'tokens')
.transacting(tx)
.where({ .where({
characterid: character.id, characterid: character.id,
itemname: item.itemname itemname: item.itemname
@@ -162,6 +165,7 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
//getLogger('ItemManager').debug('delete streaks') //getLogger('ItemManager').debug('delete streaks')
await Promise.all(streaks.map(async s => await this.admin await Promise.all(streaks.map(async s => await this.admin
.knex(item.tier+'tokens') .knex(item.tier+'tokens')
.transacting(tx)
.where({ .where({
itemname: s.itemname, itemname: s.itemname,
characterid: character.id, characterid: character.id,
@@ -170,15 +174,18 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
.del() .del()
)) ))
if(myStreak) if(myStreak){
await tx.commit()
return await this.getToken(character, item) return await this.getToken(character, item)
}
} }
const matchingReserve = activeTokens.find(token => token.itemname === itemname) const matchingReserve = activeTokens.find(token => token.itemname === itemname)
if(matchingReserve){ if(matchingReserve){
getLogger('ItemManager').debug('upgrade reserve') //getLogger('ItemManager').debug('upgrade reserve')
await this.admin await this.admin
.knex(item.tier+'tokens') .knex(item.tier+'tokens')
.transacting(tx)
.increment('level') .increment('level')
.where({ .where({
signupid: signup.id, signupid: signup.id,
@@ -186,9 +193,10 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
itemname: item.itemname itemname: item.itemname
}) })
}else{ }else{
getLogger('ItemManager').debug('new reserve') //getLogger('ItemManager').debug('new reserve')
await this.admin await this.admin
.knex(item.tier+'tokens') .knex(item.tier+'tokens')
.transacting(tx)
.insert({ .insert({
characterid: character.id, characterid: character.id,
itemname: item.itemname, itemname: item.itemname,
@@ -196,6 +204,7 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
signupid: signup.id signupid: signup.id
}) })
} }
await tx.commit()
return await this.getToken(character, item) return await this.getToken(character, item)
} }
+2 -2
View File
@@ -2,8 +2,8 @@ import { Raid, Signup, Character, RaidData, User, Spec } from "../../Types/Types
export class IRaidManager{ export class IRaidManager{
getRaids: () => Promise<Raid[]> getRaids: () => Promise<Raid[]>
createRaid: (raid:Raid) => Promise<any> createRaid: (raid:Raid) => Promise<Raid>
addSignup: (signup: Signup) => Promise<any> addSignup: (signup: Signup) => Promise<Signup>
removeSignup: (signup: Signup) => Promise<any> removeSignup: (signup: Signup) => Promise<any>
getSignups: (raid:Raid) => Promise<(Signup & Character & Spec & User)[]> getSignups: (raid:Raid) => Promise<(Signup & Character & Spec & User)[]>
sign: (userToken: string, character:Character, raid:Raid, late:boolean) => Promise<any> sign: (userToken: string, character:Character, raid:Raid, late:boolean) => Promise<any>
+16 -7
View File
@@ -66,7 +66,7 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
table.string('description').notNullable() table.string('description').notNullable()
table.string('title').notNullable() table.string('title').notNullable()
table.integer('size').defaultTo(40) table.integer('size').defaultTo(40)
table.enu('tier', _Tiers).defaultTo(null as any) table.string('tier').defaultTo('null')
} }
},{ },{
name: 'archive', name: 'archive',
@@ -90,13 +90,22 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
] ]
} }
createRaid = async (raid:Raid) => await this.admin createRaid = async (raid:Raid) : Promise<Raid>=> {
.knex('raids') const ids:number[] = await this.admin
.insert(raid) .knex('raids')
.insert(raid)
addSignup = async (signup: Signup) => await this.admin return await this.admin.knex('raids').where({id: ids[0]}).first()
.knex('signups') }
.insert(signup)
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 removeSignup = async (signup: Signup) => await this.admin
.knex('signups') .knex('signups')
@@ -25,7 +25,7 @@ status="control">
<br/><br /> <br/><br />
<span *ngFor="let token of tokens"> <span *ngFor="let token of tokens">
[ {{token.level}} ] [ {{token.level}} ]
<wowhead [item]="token"></wowhead><br /> <wowhead [item]="token"></wowhead>
</span> </span>
</nb-card-body> </nb-card-body>
</nb-card> </nb-card>
@@ -33,6 +33,10 @@ export class FrontcraftCreateRaidsComponent implements OnInit {
loadNext(cardData) { loadNext(cardData) {
} }
onTierSelect(){
}
onTemplateSelect(){ onTemplateSelect(){
const templateDate = new Date(this.template.start) const templateDate = new Date(this.template.start)
this.title = this.template.title this.title = this.template.title
+75 -1
View File
@@ -9,6 +9,7 @@ import { SpecT } from "../src/backend/Types/PlayerSpecs";
type protoAccount<C extends Class = Class> = { type protoAccount<C extends Class = Class> = {
name : string, name : string,
pwHash?: string
rank : Rank, rank : Rank,
race: Race, race: Race,
class: C, class: C,
@@ -200,7 +201,8 @@ describe('Frontcraft', () => {
adminClient.manageRaid.createRaid(insertRaid).then(() => { adminClient.manageRaid.createRaid(insertRaid).then(() => {
client.RaidManager.getRaids().then((r)=>{ client.RaidManager.getRaids().then((r)=>{
if(r[0].title === insertRaid.title if(r[0].title === insertRaid.title
&& r[0].description === insertRaid.description){ && r[0].description === insertRaid.description
&& r[0].tier === "MC"){
raids.push(r[0]) raids.push(r[0])
done() done()
} }
@@ -612,4 +614,76 @@ describe('Frontcraft', () => {
}) })
}) })
}) })
it('implements loot system correctly', (done)=>{
const ONE_WEEK = 4800000000
const Raid = (week:number, tier:string) => {
return <Raid>{
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)
})
})
}) })