@@ -5,7 +5,7 @@ const snakeCaseKeys = require('snakecase-keys');
5
5
const { experienceToLevel } = require ( './skills' ) ;
6
6
7
7
const CREATE_TABLES = fs
8
- . readFileSync ( `${ __dirname } /../rsc-data-server .sql` )
8
+ . readFileSync ( `${ __dirname } /../create-tables .sql` )
9
9
. toString ( ) ;
10
10
11
11
const SET_PLAYER_ATTRIBUTES = [
@@ -61,7 +61,10 @@ const PLAYER_JSON_FIELDS = [
61
61
const TOTAL_EXP = `(\`exp_${ skills . join ( '` + `exp_' ) } \`) AS \`experience\`` ;
62
62
const RANKS_PER_PAGE = 16 ;
63
63
64
- function getPages ( database ) {
64
+ const SUMMARY_LENGTH = 140 ;
65
+ const NEWS_PER_PAGE = 10 ;
66
+
67
+ function getHiscorePages ( database ) {
65
68
return Math . ceil (
66
69
database . prepare ( 'SELECT COUNT(1) FROM `hiscore_ranks`' ) . pluck ( ) . get ( ) /
67
70
RANKS_PER_PAGE
@@ -138,8 +141,21 @@ class QueryHandler {
138
141
getPlayerRanks :
139
142
`SELECT ${ skills . map (
140
143
( skill ) => `\`exp_${ skill } \`, \`rank_${ skill } \``
141
- ) } , \`total_level\`, ${ TOTAL_EXP } , \`rank_total\` `+
142
- 'FROM `players` WHERE `username` = ?'
144
+ ) } , \`total_level\`, ${ TOTAL_EXP } , \`rank_total\` ` +
145
+ 'FROM `players` WHERE `username` = ?' ,
146
+ searchNews :
147
+ 'SELECT `id`, `date`, `category`, `title`, ' +
148
+ `substr(\`body\`, 0, ${ SUMMARY_LENGTH } ) AS \`summary\` ` +
149
+ 'FROM `news` WHERE ' +
150
+ 'CASE WHEN :category > -1 THEN `category` = :category ELSE ' +
151
+ 'true END AND ' +
152
+ 'CASE WHEN LENGTH(:terms) > 0 THEN `title` LIKE :terms OR ' +
153
+ '`body` LIKE :terms ELSE true END AND ' +
154
+ 'CASE WHEN :before > -1 AND :after > -1 THEN ' +
155
+ '`date` < :before AND `date` >= :after ELSE true END ' +
156
+ 'ORDER BY `date` DESC ' +
157
+ `LIMIT ${ NEWS_PER_PAGE } OFFSET (:page * ${ NEWS_PER_PAGE } )` ,
158
+ getNews : 'SELECT * FROM `news` WHERE `id` = ?'
143
159
} ;
144
160
145
161
for ( const [ name , statement ] of Object . entries ( this . statements ) ) {
@@ -162,7 +178,7 @@ class QueryHandler {
162
178
'`players`.`id`)'
163
179
) ;
164
180
165
- return getPages ( this . database ) ;
181
+ return getHiscorePages ( this . database ) ;
166
182
} ) ;
167
183
168
184
this . statements . getSkillHiscoreRanks = { } ;
@@ -205,7 +221,7 @@ class QueryHandler {
205
221
'`players`.`id`);'
206
222
) ;
207
223
208
- return getPages ( this . database ) ;
224
+ return getHiscorePages ( this . database ) ;
209
225
}
210
226
) ;
211
227
}
@@ -435,6 +451,17 @@ class QueryHandler {
435
451
return ranks ;
436
452
}
437
453
454
+ getNews ( query ) {
455
+ if ( query . id !== - 1 ) {
456
+ return this . statements . getNews . get ( query . id ) ;
457
+ }
458
+
459
+ delete query . id ;
460
+ query . terms = `%${ query . terms . replace ( / % | _ / g, '' ) } %` ;
461
+
462
+ return this . statements . searchNews . all ( query ) ;
463
+ }
464
+
438
465
sync ( ) {
439
466
this . database . pragma ( 'journal_mode = WAL' ) ;
440
467
this . createTables ( ) ;
0 commit comments