more precise force search
This commit is contained in:
parent
4aa2d3ba8f
commit
03e11867b5
1 changed files with 23 additions and 13 deletions
|
@ -1,4 +1,4 @@
|
|||
import { Brackets } from "typeorm";
|
||||
import { Brackets, Like } from "typeorm";
|
||||
import { dataSource } from "../../data-source";
|
||||
import { force } from "../../entity/configuration/force";
|
||||
import DatabaseActionException from "../../exceptions/databaseActionException";
|
||||
|
@ -24,19 +24,29 @@ export default abstract class ForceService {
|
|||
let query = dataSource.getRepository(force).createQueryBuilder("force");
|
||||
|
||||
if (search != "") {
|
||||
search.split(" ").forEach((term, index) => {
|
||||
const searchQuery = `%${term}%`;
|
||||
const dynamic = "searchQuery" + Math.random().toString(36).substring(2);
|
||||
if (index == 0) {
|
||||
query = query.where(`force.firstname LIKE :${dynamic} OR force.lastname LIKE :${dynamic}`, {
|
||||
[dynamic]: searchQuery,
|
||||
let searchBits = search.split(" ");
|
||||
|
||||
if (searchBits.length < 2) {
|
||||
query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, {
|
||||
searchQuery: `%${searchBits[0]}%`,
|
||||
});
|
||||
} else {
|
||||
query = query.orWhere(`force.firstname LIKE :${dynamic} OR force.lastname LIKE :${dynamic}`, {
|
||||
[dynamic]: searchQuery,
|
||||
searchBits
|
||||
.flatMap((v, i) => searchBits.slice(i + 1).map((w) => [v, w]))
|
||||
.forEach((term) => {
|
||||
query = query
|
||||
.orWhere(
|
||||
new Brackets((qb) =>
|
||||
qb.where({ firstname: Like(`%${term[0]}%`) }).andWhere({ lastname: Like(`%${term[1]}%`) })
|
||||
)
|
||||
)
|
||||
.orWhere(
|
||||
new Brackets((qb) =>
|
||||
qb.where({ firstname: Like(`%${term[1]}%`) }).andWhere({ lastname: Like(`%${term[0]}%`) })
|
||||
)
|
||||
);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (ids.length != 0) {
|
||||
|
|
Loading…
Add table
Reference in a new issue