get the longer string filters working
This commit is contained in:
@@ -49,7 +49,9 @@ app.post('/api/game', jsonParser, async (req, res) => {
|
|||||||
order: orderBy,
|
order: orderBy,
|
||||||
where: filter
|
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.setHeader('Content-Type', 'application/json')
|
||||||
res.send({ gameData, pageCount })
|
res.send({ gameData, pageCount })
|
||||||
|
|||||||
@@ -23,34 +23,35 @@ export class OrderByParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
parse(orderBy: string) {
|
parse(orderBy: string) {
|
||||||
const output = []
|
const output = []
|
||||||
let holding = []
|
let holding = []
|
||||||
this.lexer
|
this.lexer
|
||||||
.input(orderBy)
|
.input(orderBy)
|
||||||
.tokens()
|
.tokens()
|
||||||
.forEach((token) => {
|
.forEach((token) => {
|
||||||
switch (token.type) {
|
switch (token.type) {
|
||||||
case 'spacer':
|
case 'spacer':
|
||||||
output.push(holding)
|
output.push(holding)
|
||||||
holding = []
|
holding = []
|
||||||
break
|
break
|
||||||
case 'column':
|
case 'column':
|
||||||
case 'direction':
|
case 'direction':
|
||||||
holding.push(token.value)
|
holding.push(token.value)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
if (holding) {
|
if (holding) {
|
||||||
output.push(holding)
|
output.push(holding)
|
||||||
}
|
}
|
||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const openGroupRegex = /\(/
|
const openGroupRegex = /\(/
|
||||||
const closeGroupRegex = /\)/
|
const closeGroupRegex = /\)/
|
||||||
const conjunctinoRegex = /AND|OR/
|
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 spacerRegex = /\s/
|
||||||
|
|
||||||
const opperatorMap = {
|
const opperatorMap = {
|
||||||
@@ -89,6 +90,12 @@ export class FilterParser {
|
|||||||
ctx.accept('value', m[3])
|
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) => {
|
this.lexer.rule(spacerRegex, (ctx, m) => {
|
||||||
ctx.ignore()
|
ctx.ignore()
|
||||||
})
|
})
|
||||||
@@ -141,18 +148,18 @@ export class FilterParser {
|
|||||||
let opperatorToken = this.lexer.consume('opperator')
|
let opperatorToken = this.lexer.consume('opperator')
|
||||||
let valueToken = this.lexer.consume('value')
|
let valueToken = this.lexer.consume('value')
|
||||||
|
|
||||||
if (opperatorToken.value === ":") {
|
if (opperatorToken.value === ':') {
|
||||||
|
return {
|
||||||
return {
|
[columnToken.value]: {
|
||||||
[columnToken.value]: { [opperatorMap[opperatorToken.value]]: `%${valueToken.value.toString()}%` }
|
[opperatorMap[opperatorToken.value]]: `%${valueToken.value.toString()}%`
|
||||||
}
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
return {
|
||||||
return {
|
[columnToken.value]: { [opperatorMap[opperatorToken.value]]: valueToken.value.toString() }
|
||||||
[columnToken.value]: { [opperatorMap[opperatorToken.value]]: valueToken.value.toString() }
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
private parseGroup() {
|
private parseGroup() {
|
||||||
this.lexer.consume('opengroup')
|
this.lexer.consume('opengroup')
|
||||||
|
|||||||
Reference in New Issue
Block a user