more precise force search

This commit is contained in:
Julian Krauser 2025-04-03 08:09:36 +02:00
parent 4aa2d3ba8f
commit 03e11867b5

View file

@ -1,4 +1,4 @@
import { Brackets } from "typeorm"; import { Brackets, Like } from "typeorm";
import { dataSource } from "../../data-source"; import { dataSource } from "../../data-source";
import { force } from "../../entity/configuration/force"; import { force } from "../../entity/configuration/force";
import DatabaseActionException from "../../exceptions/databaseActionException"; import DatabaseActionException from "../../exceptions/databaseActionException";
@ -24,19 +24,29 @@ export default abstract class ForceService {
let query = dataSource.getRepository(force).createQueryBuilder("force"); let query = dataSource.getRepository(force).createQueryBuilder("force");
if (search != "") { if (search != "") {
search.split(" ").forEach((term, index) => { let searchBits = search.split(" ");
const searchQuery = `%${term}%`;
const dynamic = "searchQuery" + Math.random().toString(36).substring(2); if (searchBits.length < 2) {
if (index == 0) { query = query.where(`member.firstname LIKE :searchQuery OR member.lastname LIKE :searchQuery`, {
query = query.where(`force.firstname LIKE :${dynamic} OR force.lastname LIKE :${dynamic}`, { searchQuery: `%${searchBits[0]}%`,
[dynamic]: searchQuery, });
} else {
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]}%`) })
)
);
}); });
} else { }
query = query.orWhere(`force.firstname LIKE :${dynamic} OR force.lastname LIKE :${dynamic}`, {
[dynamic]: searchQuery,
});
}
});
} }
if (ids.length != 0) { if (ids.length != 0) {