import { ICollection, IDb, WithId } from '@p81-common/p81-mongo-client'; import { UrlCategories, UrlCategoriesMetadata } from '@p81-common/p81-mongo-validation-schemas'; export default class CategoriesService { readonly categoryMap: Map>; categories!: ICollection; constructor(protected db: IDb) { this.categories = db.collection(UrlCategoriesMetadata); this.categoryMap = new Map(); } private setCategories(categories: WithId[]) { for (const category of categories) { for (const code of category.codes) { this.categoryMap.set(code, category); } } } async init() { const categories = await this.categories.find({}).toArray(); this.setCategories(categories); } async findByIds(categoryIds: string[]): Promise { if (this.categoryMap.size === 0) { await this.init(); } let result: string[] = []; for (const categoryId of categoryIds) { const category: WithId | undefined = this.getById(categoryId); if (category) { result = [...result, ...category.codes]; } } return result; } getById(categoryId: string): WithId | undefined { return this.categoryMap.get(categoryId); } }