pretty up

This commit is contained in:
peter
2020-02-07 17:30:55 +01:00
parent 59990af4d2
commit e3eb1f123c
29 changed files with 376 additions and 90 deletions
+1 -1
View File
@@ -56,7 +56,7 @@ implements TableDefinitionExporter, IAdmin {
connection: {
filename: Path.join(__dirname, "data/frontworkAdmin.sqlite")
},
useNullAsDefault: true
useNullAsDefault: true,
}
}
}
+2 -2
View File
@@ -7,8 +7,8 @@ export class IItemManager{
setPriority: (itemname:string, priority: any) => Promise<void>
calculatePriorities: (itemname: string, character:Character) => Promise<number>
deletePriority: (priority:SRPriority) => Promise<void>
getTokens: (character:Character) => Promise<SRToken[]>
getToken: (character:Character, item:Item) => Promise<(SRToken & Character & Item) | void>
getTokens: (character:Character, valid?:boolean) => Promise<SRToken[]>
getToken: (character:Character, item:Item, valid?:boolean) => Promise<(SRToken & Character & Item) | void>
getAllPriorities: () => Promise<(SRPriority & Spec & Item)[]>
wipeCurrencyAndItems: () => Promise<void>
}
+22 -6
View File
@@ -146,18 +146,27 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
if(matchingtoken){
//update signupid and increment level
console.log("delete shadow tokens");
await this.admin
.knex('tokens')
.update({
signupid: signup.id,
level: matchingtoken.level+1
})
.where({
characterid: character.id,
itemname: item.itemname
})
.update({
signupid: signup.id,
level: matchingtoken.level+1
})
await this.admin
.knex('tokens')
.where({
characterid: character.id,
itemname: item.itemname,
signupid: null
}).del()
return await this.getToken(character, item)
}
}
@@ -248,7 +257,7 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
}).reduce((prev, curr) => prev+curr, 0)
}
getToken = async (character:Character, item:Item): Promise<(SRToken & Character & Item) | void>=> {
getToken = async (character:Character, item:Item,valid=true): Promise<(SRToken & Character & Item) | void>=> {
return await this.admin
.knex('tokens as t')
.select('*')
@@ -258,6 +267,13 @@ implements FrontworkComponent<ItemManagerIfc, ItemManagerFeatureIfc>, TableDefin
characterid: character.id,
"i.itemname": item.itemname
})
.andWhere(function(){
if(valid){
this.whereNotNull('t.signupid')
}else{
this.whereNull('t.signupid')
}
})
.first()
}
+1
View File
@@ -14,4 +14,5 @@ export class IRaidManager{
getPastRaids: (limit: number) => Promise<RaidData[]>
getArchiveRaid: (id:number) => Promise<RaidData>
startRaid: (raid:Raid) => Promise<RaidData>
adminUnsign: (character:Character, raid:Raid) => Promise<any>
}
@@ -17,6 +17,7 @@ export type RaidManagerFeatureIfc = {
archiveRaid: IRaidManager['archiveRaid']
setBenched: IRaidManager['setBenched']
startRaid: IRaidManager['startRaid']
adminUnsign: IRaidManager['adminUnsign']
}
signup: {
getSignups: IRaidManager['getSignups']
+105 -15
View File
@@ -7,6 +7,9 @@ import { IRaidManager } from "./Interface";
import { IUserManager } from "../User/Interface";
import { ICharacterManager } from "../Character/Interface";
import { _Tiers } from "../../Types/Items";
import { IItemManager } from "../Item/Interface";
import { ItemManager } from "../Item/ItemManager";
import { SpecT } from "../../Types/PlayerSpecs";
@Injectable(IRaidManager)
export class RaidManager
@@ -22,6 +25,9 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
@Inject(ICharacterManager)
private characterManager: ICharacterManager
@Inject(ItemManager)
private itemManager: IItemManager
exportRPCs = () => [
this.getRaids,
this.getRaidData,
@@ -38,7 +44,8 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
this.removeSignup,
this.archiveRaid,
this.setBenched,
this.startRaid
this.startRaid,
this.adminUnsign
]
},{
name: 'signup' as 'signup',
@@ -136,15 +143,20 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
archiveRaid = async (raid:Raid) : Promise<RaidData> => {
const raidData = await this.getRaidData(raid)
const tx = await this.admin.knex.transaction()
await this.admin.knex('archive')
.transacting(tx)
.insert({
id:raidData.id,
raiddata: JSON.stringify(raidData)
})
await Promise.all(
Object.values(raidData.participants).flat().flatMap((signup) => this.admin
Object.values(raidData.participants).flat().flatMap((signup) => this.admin
.knex('tokens')
.transacting(tx)
.where({
characterid: signup.characterid,
signupid: null
@@ -153,8 +165,11 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
))
await this.admin.knex('raids')
.transacting(tx)
.where('id', '=', raid.id)
.del()
await tx.commit()
const row = await this.admin.knex('archive')
.select('*')
@@ -162,7 +177,6 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
id:raidData.id,
})
.first()
return JSON.parse(row.raiddata)
}
@@ -184,7 +198,7 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
}
getRaidData = async (raid:Raid) : Promise<RaidData> => {
const ret = {
const raiddata = {
participants:{
Druid: <(Signup&Character&Spec)[]>[],
Hunter: <(Signup&Character&Spec)[]>[],
@@ -198,8 +212,11 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
late: <(Signup&Character&Spec)[]>[],
bench: <(Signup&Character&Spec)[]>[],
},
tokens:{}
tokens:{},
healers:<(Signup&Character&Spec)[]>[],
tanks:<(Signup&Character&Spec)[]>[]
}
const tx = await this.admin.knex.transaction()
const subQuery = this.admin
.knex('signups')
@@ -211,14 +228,17 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
})
.as('signupcount')
const raidInDb: Raid = await this.admin.knex('raids')
.select('*', subQuery)
.transacting(tx)
.where('id','=',raid.id)
.first()
const characterData: (Signup & Character & Spec)[] = await this.admin
.knex('signups as s')
.select('s.id as id', 'charactername', 'class', 'specname', 'race', 'userid', 'benched', 'late', 'raidid', 'characterid')
.transacting(tx)
.select('s.id as id', 'charactername', 'class', 'specid', 'specname', 'race', 'userid', 'benched', 'late', 'raidid', 'characterid', 'specid')
.join('raids as r', 's.raidid','=','r.id')
.join('characters as c', 's.characterid','=','c.id')
.join('users as u', 'c.userid','=','u.id')
@@ -227,18 +247,19 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
characterData.forEach(data => {
if(data.benched){
ret.participants.bench.push(data)
raiddata.participants.bench.push(data)
return
}
if(data.late){
ret.participants.late.push(data)
raiddata.participants.late.push(data)
return
}
ret.participants[data.class].push(data)
raiddata.participants[data.class].push(data)
})
const tokenData: (Character & SRToken & Item)[] = await this.admin
.knex('signups as s')
.transacting(tx)
.select('*', 's.id as id')
.join('raids as r', 's.raidid','=','r.id')
.where('r.id','=',raid.id)
@@ -249,14 +270,33 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
.join('tokens as t', 't.characterid','=','c.id')
.join('items as i', 'i.itemname','=','t.itemname')
await tx.commit()
tokenData.forEach(data => {
if(!ret.tokens[data.itemname])
ret.tokens[data.itemname] = []
ret.tokens[data.itemname].push(data)
if(!raiddata.tokens[data.itemname])
raiddata.tokens[data.itemname] = []
raiddata.tokens[data.itemname].push(data)
})
raiddata.tanks = Object.values(raiddata.participants).flatMap(
(tanks:any[]) => tanks.filter((p:any) =>
!p.benched
&& !p.late
&& (p.specname==="Protection"
|| p.specname==="Feral (Tank)"))
)
raiddata.healers = Object.values(raiddata.participants).flatMap(
(healers:any[]) => healers.filter((p:any) =>
!p.benched
&& !p.late
&& (p.specname==="Holy"
|| p.specname==="Discipline"
|| p.specname==="Restoration"))
)
return {
...raidInDb,
...ret
...raiddata
}
}
@@ -273,9 +313,11 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
if(!maybeUserRecord || maybeUserRecord.user.id != character.userid){
throw new Error("Bad Usertoken")
}
const tx = await this.admin.knex.transaction()
const exists = await this.admin
.knex('signups')
.transacting(tx)
.select('*')
.where({
raidid: raid.id!,
@@ -286,20 +328,28 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
if(!exists){
await this.admin
.knex('signups')
.transacting(tx)
.insert({
raidid: raid.id!,
characterid: character.id!,
late: late
late: late,
benched: false,
})
}else{
await this.admin
.knex('signups')
.transacting(tx)
.where({
id: exists.id
})
.update({
raidid: raid.id!,
characterid: character.id!,
late: late
late: late,
benched: false,
})
}
await tx.commit()
return await this.admin
.knex('signups')
@@ -317,6 +367,46 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
throw new Error("Bad Usertoken")
}
return await this.adminUnsign(character, raid)
}
adminUnsign = async (character:Character, raid:Raid) => {
const user = await this.characterManager.getUserOfCharacter(character)
const signup = await this.admin.knex('signups as si')
.where({
"si.raidid": raid.id!,
"si.characterid": character.id!,
}).first()
const tokens = await this.admin.knex('tokens as t')
.where('t.signupid', signup.id)
//check if token has to be deleted
Promise.all(
tokens.map(async token => {
await this.userManager.incrementCurrency(user, 1)
const prio = await this.itemManager.calculatePriorities(token.itemname, character)
if(token.level <= prio+1){
await this.admin.knex('tokens')
.where({
characterid: character.id,
itemname: token.itemname
}).del()
}else{
await this.admin.knex('tokens')
.where({
characterid: character.id,
itemname: token.itemname
}).update({
signupid: null,
level: token.level-1
})
}
})
)
await this.admin.knex('signups')
.where({
raidid: raid.id!,
+2
View File
@@ -58,6 +58,8 @@ export type RaidData = Raid & {
tokens: {
[itemname in string]: (Character & SRToken & Item)[]
}
tanks: (Signup & Character & Spec)[]
healers: (Signup & Character & Spec)[]
}
export type SRToken = {