pretty up
This commit is contained in:
@@ -56,7 +56,7 @@ implements TableDefinitionExporter, IAdmin {
|
||||
connection: {
|
||||
filename: Path.join(__dirname, "data/frontworkAdmin.sqlite")
|
||||
},
|
||||
useNullAsDefault: true
|
||||
useNullAsDefault: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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!,
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user