1
1
import express from 'express' ;
2
2
import { Op } from 'sequelize' ;
3
3
import { like , searchLimit , searchOffset } from '#utils/database' ;
4
- import { authContext } from '#utils/auth' ;
4
+ import { authContext , authDiscord } from '#utils/auth' ;
5
5
import { pick , omit } from 'lodash-es' ;
6
6
import {
7
7
Team ,
@@ -11,6 +11,7 @@ import {
11
11
LevelStats ,
12
12
Level ,
13
13
Setting ,
14
+ BnKuskiRule ,
14
15
} from '../data/models' ;
15
16
16
17
const router = express . Router ( ) ;
@@ -88,6 +89,91 @@ const ChangeSettings = async data => {
88
89
return 1 ;
89
90
} ;
90
91
92
+ const BnKuskiRuleAttributes = [
93
+ 'BattleTypes' ,
94
+ 'Designers' ,
95
+ 'LevelPatterns' ,
96
+ 'BattleAttributes' ,
97
+ 'MinDuration' ,
98
+ 'MaxDuration' ,
99
+ 'IgnoreList' ,
100
+ ] ;
101
+
102
+ const BnSettings = async DiscordId => {
103
+ const get = await Setting . findOne ( {
104
+ where : { DiscordId } ,
105
+ attributes : [ 'KuskiIndex' , 'DiscordId' , 'BnEnabled' ] ,
106
+ include : [
107
+ {
108
+ model : BnKuskiRule ,
109
+ as : 'BnKuskiRules' ,
110
+ attributes : BnKuskiRuleAttributes ,
111
+ } ,
112
+ ] ,
113
+ } ) ;
114
+ return get ;
115
+ } ;
116
+
117
+ const AllActiveBnSettings = async ( ) => {
118
+ const get = await Setting . findAll ( {
119
+ attributes : [ 'KuskiIndex' , 'DiscordId' , 'BnEnabled' ] ,
120
+ include : [
121
+ {
122
+ model : BnKuskiRule ,
123
+ as : 'BnKuskiRules' ,
124
+ attributes : BnKuskiRuleAttributes ,
125
+ required : true ,
126
+ } ,
127
+ ] ,
128
+ } ) ;
129
+ return get ;
130
+ } ;
131
+
132
+ const ChangeBnEnabledSetting = async data => {
133
+ const setting = await Setting . findOne ( {
134
+ where : { DiscordId : data . DiscordId } ,
135
+ attributes : [ 'KuskiIndex' ] ,
136
+ } ) ;
137
+ if ( setting ?. KuskiIndex ) {
138
+ await Setting . update (
139
+ { BnEnabled : data . BnEnabled } ,
140
+ { where : { KuskiIndex : setting . KuskiIndex } } ,
141
+ ) ;
142
+ }
143
+ return 1 ;
144
+ } ;
145
+
146
+ const ChangeBnSettings = async data => {
147
+ const setting = await Setting . findOne ( {
148
+ where : { DiscordId : data . DiscordId } ,
149
+ attributes : [ 'KuskiIndex' ] ,
150
+ } ) ;
151
+ if ( setting ?. KuskiIndex ) {
152
+ // get BnKuskiRules from user, if there are none and it is setting new rules, set BnEnabled to true
153
+ const rules = await BnKuskiRule . findAll ( {
154
+ where : { KuskiIndex : setting . KuskiIndex } ,
155
+ } ) ;
156
+ const isFirstTimeSetup = ! rules . length && data . BnKuskiRules . length > 0 ;
157
+ await Setting . update (
158
+ { BnEnabled : isFirstTimeSetup ? 1 : undefined } ,
159
+ { where : { KuskiIndex : setting . KuskiIndex } } ,
160
+ ) ;
161
+
162
+ // delete all BnKuskiRules from this user
163
+ await BnKuskiRule . destroy ( { where : { KuskiIndex : setting . KuskiIndex } } ) ;
164
+ // for each rule, create a new BnKuskiRule
165
+ await Promise . all (
166
+ data . BnKuskiRules . map ( async rule => {
167
+ await BnKuskiRule . create ( {
168
+ KuskiIndex : setting . KuskiIndex ,
169
+ ...rule ,
170
+ } ) ;
171
+ } ) ,
172
+ ) ;
173
+ }
174
+ return 1 ;
175
+ } ;
176
+
91
177
const Player = async ( IdentifierType , KuskiIdentifier , currentUser ) => {
92
178
const query = {
93
179
where : { } ,
@@ -310,6 +396,34 @@ router
310
396
res . sendStatus ( 401 ) ;
311
397
}
312
398
} )
399
+ . get ( '/bn/:DiscordId/linked' , authDiscord , async ( req , res ) => {
400
+ const data = await Setting . findOne ( {
401
+ where : { DiscordId : req . params . DiscordId } ,
402
+ } ) ;
403
+ res . json ( Boolean ( data ) ) ;
404
+ } )
405
+ . get ( '/bn/:DiscordId' , authDiscord , async ( req , res ) => {
406
+ const data = await BnSettings ( req . params . DiscordId ) ;
407
+ res . json ( data ) ;
408
+ } )
409
+ . get ( '/bn' , authDiscord , async ( req , res ) => {
410
+ const data = await AllActiveBnSettings ( ) ;
411
+ res . json ( data ) ;
412
+ } )
413
+ . post ( '/bn/:DiscordId/toggle/:BnEnabled' , authDiscord , async ( req , res ) => {
414
+ const data = await ChangeBnEnabledSetting ( {
415
+ DiscordId : req . params . DiscordId ,
416
+ BnEnabled : Number ( req . params . BnEnabled ) ,
417
+ } ) ;
418
+ res . json ( data ) ;
419
+ } )
420
+ . post ( '/bn/:DiscordId' , authDiscord , async ( req , res ) => {
421
+ const data = await ChangeBnSettings ( {
422
+ ...req . body ,
423
+ DiscordId : req . params . DiscordId ,
424
+ } ) ;
425
+ res . json ( data ) ;
426
+ } )
313
427
. post ( '/ignore/:Kuski' , async ( req , res ) => {
314
428
const auth = authContext ( req ) ;
315
429
if ( auth . auth ) {
0 commit comments