Fix search

This commit is contained in:
Erik 2024-02-16 11:40:10 +02:00
parent d59e6e11d5
commit 901277bd5b
4 changed files with 15 additions and 6 deletions

View File

@ -546,8 +546,12 @@ class Server extends EventEmitter
if (this.#server)
{
this.#logger.info('Closing server');
let closing = false;
const cleanUp = async () =>
{
if (closing)
return;
closing = true;
await this.#mongodb.close();
await this.#mariadb?.close();
await this.#memoryStoreProvider.close();
@ -566,9 +570,8 @@ class Server extends EventEmitter
});
setTimeout(() =>
{
this.#logger.warn('Server close timed out, cleaning up and exiting');
this.#logger.warn('Server close timed out, forcefully closing connections');
this.#server?.closeAllConnections();
cleanUp();
}, 10_000);
}

View File

@ -149,7 +149,7 @@ class UserDatabase implements UserDatabaseInterface
return true;
}
async fetchUsers ({ ids, page, pageSize, name, roleId, id }: UserQuery = {}): Promise<User[]>
async fetchUsers ({ ids, page, pageSize, name, roleId, id, partialName }: UserQuery = {}): Promise<User[]>
{
const query: Filter<UserData> = {};
@ -162,7 +162,12 @@ class UserDatabase implements UserDatabaseInterface
// Does not scale, but works for our users collection since it should always remain relatively small
if (name)
{
if (partialName)
query.name = { $regex: name };
else
query.name = { $regex: `^${name}$`, $options: 'i' };
}
const findOptions: {limit?: number, skip?: number} = {};
if (typeof page !== 'undefined' && typeof pageSize !== 'undefined')

View File

@ -60,7 +60,7 @@ class UsersEndpoint extends ApiEndpoint
if (page < 0)
page = 0;
const users = await this.#users.fetchUsers({ page, pageSize, name });
const users = await this.#users.fetchUsers({ page, pageSize, name, partialName: true });
res.json({
users: users.map(user => user.json),
page: page + 1,

View File

@ -8,7 +8,8 @@ export type Query<T, TData> = {
ids?: (string | T | TData)[],
page?: number,
pageSize?: number,
name?: string | null
name?: string | null,
partialName?: boolean
}
export type RoleQuery = Query<Role, RoleData>