Browse Source

working buytoken (untested)

master
peter 5 years ago
parent
commit
d1b679d55a

+ 13
- 4
src/backend/Components/Item/ItemManager.ts View File

141
         await this.userManager.decrementCurrency(record.user, item.tier, 1)
141
         await this.userManager.decrementCurrency(record.user, item.tier, 1)
142
         const modifier = await this.calculatePriorities(itemname, character)
142
         const modifier = await this.calculatePriorities(itemname, character)
143
 
143
 
144
+        const tx = await this.admin.knex.transaction()
145
+
144
         if(streaks.length > 0){
146
         if(streaks.length > 0){
145
             const myStreak = streaks.find(token => token.itemname === itemname)
147
             const myStreak = streaks.find(token => token.itemname === itemname)
146
             if(myStreak){
148
             if(myStreak){
148
                 //getLogger('ItemManager').debug('update signupid and increment level')
150
                 //getLogger('ItemManager').debug('update signupid and increment level')
149
                 await this.admin
151
                 await this.admin
150
                 .knex(item.tier+'tokens')
152
                 .knex(item.tier+'tokens')
153
+                .transacting(tx)
151
                 .where({
154
                 .where({
152
                     characterid: character.id,
155
                     characterid: character.id,
153
                     itemname: item.itemname
156
                     itemname: item.itemname
162
             //getLogger('ItemManager').debug('delete streaks')
165
             //getLogger('ItemManager').debug('delete streaks')
163
             await Promise.all(streaks.map(async s => await this.admin
166
             await Promise.all(streaks.map(async s => await this.admin
164
                 .knex(item.tier+'tokens')
167
                 .knex(item.tier+'tokens')
168
+                .transacting(tx)
165
                 .where({
169
                 .where({
166
                     itemname: s.itemname,
170
                     itemname: s.itemname,
167
                     characterid: character.id,
171
                     characterid: character.id,
169
                 })
173
                 })
170
                 .del()
174
                 .del()
171
             ))
175
             ))
172
-            
173
-            if(myStreak)
176
+
177
+            if(myStreak){
178
+                await tx.commit()
174
                 return await this.getToken(character, item)
179
                 return await this.getToken(character, item)
180
+            }
175
         }
181
         }
176
 
182
 
177
         const matchingReserve = activeTokens.find(token => token.itemname === itemname)
183
         const matchingReserve = activeTokens.find(token => token.itemname === itemname)
178
         if(matchingReserve){
184
         if(matchingReserve){
179
-            getLogger('ItemManager').debug('upgrade reserve')
185
+            //getLogger('ItemManager').debug('upgrade reserve')
180
             await this.admin
186
             await this.admin
181
             .knex(item.tier+'tokens')
187
             .knex(item.tier+'tokens')
188
+            .transacting(tx)
182
             .increment('level')
189
             .increment('level')
183
             .where({
190
             .where({
184
                 signupid: signup.id,
191
                 signupid: signup.id,
186
                 itemname: item.itemname
193
                 itemname: item.itemname
187
             })
194
             })
188
         }else{
195
         }else{
189
-            getLogger('ItemManager').debug('new reserve')
196
+            //getLogger('ItemManager').debug('new reserve')
190
             await this.admin
197
             await this.admin
191
             .knex(item.tier+'tokens')
198
             .knex(item.tier+'tokens')
199
+            .transacting(tx)
192
             .insert({
200
             .insert({
193
                 characterid: character.id,
201
                 characterid: character.id,
194
                 itemname: item.itemname,
202
                 itemname: item.itemname,
196
                 signupid: signup.id
204
                 signupid: signup.id
197
             })
205
             })
198
         }
206
         }
207
+        await tx.commit()
199
         return await this.getToken(character, item)
208
         return await this.getToken(character, item)
200
     }
209
     }
201
 
210
 

+ 2
- 2
src/backend/Components/Raid/Interface.ts View File

2
 
2
 
3
 export class IRaidManager{
3
 export class IRaidManager{
4
     getRaids: () => Promise<Raid[]>
4
     getRaids: () => Promise<Raid[]>
5
-    createRaid: (raid:Raid) => Promise<any>
6
-    addSignup: (signup: Signup) => Promise<any>
5
+    createRaid: (raid:Raid) => Promise<Raid>
6
+    addSignup: (signup: Signup) => Promise<Signup>
7
     removeSignup: (signup: Signup) => Promise<any>    
7
     removeSignup: (signup: Signup) => Promise<any>    
8
     getSignups: (raid:Raid) => Promise<(Signup & Character & Spec & User)[]>
8
     getSignups: (raid:Raid) => Promise<(Signup & Character & Spec & User)[]>
9
     sign: (userToken: string, character:Character, raid:Raid, late:boolean) => Promise<any>
9
     sign: (userToken: string, character:Character, raid:Raid, late:boolean) => Promise<any>

+ 18
- 9
src/backend/Components/Raid/RaidManager.ts View File

66
                     table.string('description').notNullable()
66
                     table.string('description').notNullable()
67
                     table.string('title').notNullable()
67
                     table.string('title').notNullable()
68
                     table.integer('size').defaultTo(40)
68
                     table.integer('size').defaultTo(40)
69
-                    table.enu('tier', _Tiers).defaultTo(null as any)
69
+                    table.string('tier').defaultTo('null')
70
                 }
70
                 }
71
             },{
71
             },{
72
                 name: 'archive',
72
                 name: 'archive',
90
         ]
90
         ]
91
     }
91
     }
92
 
92
 
93
-    createRaid = async (raid:Raid) => await this.admin
94
-    .knex('raids')
95
-    .insert(raid)
96
-    
97
-    addSignup = async (signup: Signup) => await this.admin
98
-    .knex('signups')
99
-    .insert(signup)
100
-    
93
+    createRaid = async (raid:Raid) : Promise<Raid>=> {
94
+        const ids:number[] = await this.admin
95
+        .knex('raids')
96
+        .insert(raid)
97
+
98
+        return await this.admin.knex('raids').where({id: ids[0]}).first()
99
+    }
100
+
101
+    addSignup = async (signup: Signup) => {
102
+
103
+        const ids:number[] = await this.admin
104
+        .knex('signups')
105
+        .insert(signup)
106
+        return await this.admin.knex('signups').where({id: ids[0]}).first()
107
+
108
+    }
109
+
101
     removeSignup = async (signup: Signup) => await this.admin
110
     removeSignup = async (signup: Signup) => await this.admin
102
     .knex('signups')
111
     .knex('signups')
103
     .where({
112
     .where({

+ 1
- 1
src/frontend/src/app/frontcraft/pages/character/character.component.html View File

25
         <br/><br />
25
         <br/><br />
26
         <span *ngFor="let token of tokens">
26
         <span *ngFor="let token of tokens">
27
             [ {{token.level}} ]
27
             [ {{token.level}} ]
28
-            <wowhead [item]="token"></wowhead><br />
28
+            <wowhead [item]="token"></wowhead>
29
         </span>
29
         </span>
30
     </nb-card-body>
30
     </nb-card-body>
31
 </nb-card>
31
 </nb-card>

+ 4
- 0
src/frontend/src/app/frontcraft/pages/raids/createraid.compontent.ts View File

33
   loadNext(cardData) {
33
   loadNext(cardData) {
34
   }
34
   }
35
 
35
 
36
+  onTierSelect(){
37
+    
38
+  }
39
+
36
   onTemplateSelect(){
40
   onTemplateSelect(){
37
     const templateDate = new Date(this.template.start)
41
     const templateDate = new Date(this.template.start)
38
     this.title = this.template.title
42
     this.title = this.template.title

+ 75
- 1
test/backendTest.ts View File

9
 
9
 
10
 type protoAccount<C extends Class = Class> = {
10
 type protoAccount<C extends Class = Class> = {
11
     name : string,
11
     name : string,
12
+    pwHash?: string
12
     rank : Rank,
13
     rank : Rank,
13
     race: Race,
14
     race: Race,
14
     class: C,
15
     class: C,
200
         adminClient.manageRaid.createRaid(insertRaid).then(() => {
201
         adminClient.manageRaid.createRaid(insertRaid).then(() => {
201
             client.RaidManager.getRaids().then((r)=>{
202
             client.RaidManager.getRaids().then((r)=>{
202
                 if(r[0].title === insertRaid.title 
203
                 if(r[0].title === insertRaid.title 
203
-                && r[0].description === insertRaid.description){
204
+                && r[0].description === insertRaid.description
205
+                && r[0].tier === "MC"){
204
                     raids.push(r[0])
206
                     raids.push(r[0])
205
                     done()
207
                     done()
206
                 }
208
                 }
612
             })
614
             })
613
         })
615
         })
614
     })
616
     })
617
+
618
+    it('implements loot system correctly', (done)=>{
619
+        const ONE_WEEK = 4800000000
620
+        
621
+        const Raid = (week:number, tier:string) => {
622
+                return <Raid>{
623
+                description: tier+" Test raid 1",
624
+                title: tier,
625
+                start: (week*ONE_WEEK + Date.now()).toString(),
626
+                tier: tier
627
+            }
628
+        }
629
+        const user = Object.values(users)[0]
630
+        const createRaid = adminClient.manageRaid.createRaid
631
+        const sign = async (raid:Raid, late = false) => await adminClient.signup.sign(user.auth.token.value, user.character, raid, late)
632
+        const buyToken = async (signup: Signup, itemname: string) => await client.ItemManager.buyToken(user.auth.token.value, user.character.charactername, itemname, signup)
633
+
634
+        createRaid(Raid(0, 'MC')).then(async (MC0:Raid) => {
635
+            const T1_0 = await client.ItemManager.getItem(T1[0])
636
+            //const BWL0 = await createRaid(Raid(0, 'BWL'))
637
+            const signupMC0 = await sign(MC0)
638
+            let token = await buyToken(signupMC0, T1[0])
639
+            if(!token){
640
+                console.log(MC0, signupMC0)
641
+                done("No token created")
642
+                return
643
+            }
644
+
645
+            let reserves = await client.ItemManager.getTokens(user.character, [MC0.tier], true)
646
+            let streaks = await client.ItemManager.getTokens(user.character, [MC0.tier], false)
647
+            if(reserves!.length != 1 
648
+            || streaks!.length != 0
649
+            || reserves![0].itemname !== T1_0.itemname
650
+            || reserves![0].level !== 7){
651
+                console.log(reserves, streaks);
652
+                done("Bad token status")
653
+                return
654
+            }
655
+            await adminClient.manageRaid.startRaid(MC0)
656
+            reserves = await client.ItemManager.getTokens(user.character, [MC0.tier], true)
657
+            streaks = await client.ItemManager.getTokens(user.character, [MC0.tier], false)
658
+            if(reserves!.length != 0 
659
+            || streaks!.length != 1
660
+            || streaks![0].itemname !== T1[0]
661
+            || streaks![0].level !== 7){
662
+                console.log(reserves, streaks);
663
+                done("Bad token status")
664
+                return
665
+            }
666
+
667
+            const MC1 = await createRaid(Raid(1, 'MC'))
668
+            const signupMC1 = await sign(MC1)
669
+            token = await buyToken(signupMC1, T1[1])
670
+            reserves = await client.ItemManager.getTokens(user.character, [MC1.tier], true)
671
+            streaks = await client.ItemManager.getTokens(user.character, [MC1.tier], false)
672
+            if(reserves!.length != 1 
673
+            || streaks!.length != 0
674
+            || reserves![0].itemname !== T1[1]
675
+            || reserves![0].level !== 1){
676
+                console.log(reserves, streaks);
677
+                done("Bad token status")
678
+                return
679
+            }
680
+
681
+            done()
682
+
683
+        }).catch(e => {
684
+            console.log(e);
685
+            
686
+            done(e)
687
+        })
688
+    })
615
 })
689
 })

Loading…
Cancel
Save