diff --git a/backend/src/app.ts b/backend/src/app.ts index f6bdcc8..70fbfba 100644 --- a/backend/src/app.ts +++ b/backend/src/app.ts @@ -49,7 +49,9 @@ app.post('/api/game', jsonParser, async (req, res) => { order: orderBy, where: filter }) - const pageCount = Math.ceil((await Character.count()) / count) + const pageCount = Math.ceil((await Game.count({ + where: filter + })) / count) res.setHeader('Content-Type', 'application/json') res.send({ gameData, pageCount }) diff --git a/backend/src/tokenizer.ts b/backend/src/tokenizer.ts index 6e01ab2..95dac4e 100644 --- a/backend/src/tokenizer.ts +++ b/backend/src/tokenizer.ts @@ -23,34 +23,35 @@ export class OrderByParser { } parse(orderBy: string) { - const output = [] - let holding = [] - this.lexer - .input(orderBy) - .tokens() - .forEach((token) => { - switch (token.type) { - case 'spacer': - output.push(holding) - holding = [] - break - case 'column': - case 'direction': - holding.push(token.value) - break - } - }) - if (holding) { - output.push(holding) - } - return output + const output = [] + let holding = [] + this.lexer + .input(orderBy) + .tokens() + .forEach((token) => { + switch (token.type) { + case 'spacer': + output.push(holding) + holding = [] + break + case 'column': + case 'direction': + holding.push(token.value) + break + } + }) + if (holding) { + output.push(holding) + } + return output } } const openGroupRegex = /\(/ const closeGroupRegex = /\)/ const conjunctinoRegex = /AND|OR/ -const equalityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([a-zA-Z\d"']+)/ +const equalityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?([a-zA-Z\d]+)/ +const stringEqualityRegex = /([a-zA-Z]+)\s?(=|!=|<|>|<=|>=|:)\s?\"([a-zA-Z\d\s]*)\"/ const spacerRegex = /\s/ const opperatorMap = { @@ -89,6 +90,12 @@ export class FilterParser { ctx.accept('value', m[3]) }) + this.lexer.rule(stringEqualityRegex, (ctx, m) => { + ctx.accept('column', m[1]) + ctx.accept('opperator', m[2]) + ctx.accept('value', m[3]) + }) + this.lexer.rule(spacerRegex, (ctx, m) => { ctx.ignore() }) @@ -141,18 +148,18 @@ export class FilterParser { let opperatorToken = this.lexer.consume('opperator') let valueToken = this.lexer.consume('value') - if (opperatorToken.value === ":") { - - return { - [columnToken.value]: { [opperatorMap[opperatorToken.value]]: `%${valueToken.value.toString()}%` } - } + if (opperatorToken.value === ':') { + return { + [columnToken.value]: { + [opperatorMap[opperatorToken.value]]: `%${valueToken.value.toString()}%` + } + } } else { - - return { - [columnToken.value]: { [opperatorMap[opperatorToken.value]]: valueToken.value.toString() } + return { + [columnToken.value]: { [opperatorMap[opperatorToken.value]]: valueToken.value.toString() } + } } } - } private parseGroup() { this.lexer.consume('opengroup')