ソースを参照

working buytoken (untested)

master
peter 5年前
コミット
d1b679d55a

+ 13
- 4
src/backend/Components/Item/ItemManager.ts ファイルの表示

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

+ 2
- 2
src/backend/Components/Raid/Interface.ts ファイルの表示

@@ -2,8 +2,8 @@ import { Raid, Signup, Character, RaidData, User, Spec } from "../../Types/Types
2 2
 
3 3
 export class IRaidManager{
4 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 7
     removeSignup: (signup: Signup) => Promise<any>    
8 8
     getSignups: (raid:Raid) => Promise<(Signup & Character & Spec & User)[]>
9 9
     sign: (userToken: string, character:Character, raid:Raid, late:boolean) => Promise<any>

+ 18
- 9
src/backend/Components/Raid/RaidManager.ts ファイルの表示

@@ -66,7 +66,7 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
66 66
                     table.string('description').notNullable()
67 67
                     table.string('title').notNullable()
68 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 72
                 name: 'archive',
@@ -90,14 +90,23 @@ implements FrontworkComponent<RaidManagerIfc, RaidManagerFeatureIfc>, IRaidManag
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 110
     removeSignup = async (signup: Signup) => await this.admin
102 111
     .knex('signups')
103 112
     .where({

+ 1
- 1
src/frontend/src/app/frontcraft/pages/character/character.component.html ファイルの表示

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

+ 4
- 0
src/frontend/src/app/frontcraft/pages/raids/createraid.compontent.ts ファイルの表示

@@ -33,6 +33,10 @@ export class FrontcraftCreateRaidsComponent implements OnInit {
33 33
   loadNext(cardData) {
34 34
   }
35 35
 
36
+  onTierSelect(){
37
+    
38
+  }
39
+
36 40
   onTemplateSelect(){
37 41
     const templateDate = new Date(this.template.start)
38 42
     this.title = this.template.title

+ 75
- 1
test/backendTest.ts ファイルの表示

@@ -9,6 +9,7 @@ import { SpecT } from "../src/backend/Types/PlayerSpecs";
9 9
 
10 10
 type protoAccount<C extends Class = Class> = {
11 11
     name : string,
12
+    pwHash?: string
12 13
     rank : Rank,
13 14
     race: Race,
14 15
     class: C,
@@ -200,7 +201,8 @@ describe('Frontcraft', () => {
200 201
         adminClient.manageRaid.createRaid(insertRaid).then(() => {
201 202
             client.RaidManager.getRaids().then((r)=>{
202 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 206
                     raids.push(r[0])
205 207
                     done()
206 208
                 }
@@ -612,4 +614,76 @@ describe('Frontcraft', () => {
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
 })

読み込み中…
キャンセル
保存