При обновлении Категории на сайте, метод Update
Я хочу генерировать slug (url), но если такой slug уже занят, то добавлять к названию цифру 1, если занят, то цифру 2 и так далее...
Мой код работает не корректно при повторном update да и длинный очень, кажется усложнил я.
Если дадите пример как организовать генерацию слага если он уже занят буду благодарен.
async update(id: string, dto: UpdateCategoriesPostDto) {
const existsPostCat = await this.CategoriesPostModel.findById(id).exec();
if (existsPostCat) {
//сгенерировать слаг
let generateSlug = cyrillicToTranslit({ preset: 'ru' })
.transform(`${dto.name}`, '_')
.toLowerCase();
//если слаг менялся, то ищем есть ли уже такой
if (existsPostCat.slug !== dto.slug) {
//проверить слаг на уникальность
let oldSlug = await this.CategoriesPostModel.findOne({
slug: generateSlug,
}).exec();
if (oldSlug) {
let counter = 1;
while (oldSlug) {
counter++;
generateSlug = `${generateSlug}${counter}`;
oldSlug = await this.CategoriesPostModel.findOne({
slug: generateSlug,
}).exec();
}
}
}
const currentCat = await this.CategoriesPostModel.findByIdAndUpdate(
id,
{
name: dto.name,
slug: generateSlug,
description: dto.description,
},
{
new: true,
},
);
return currentCat;
} else {
throw new NotFoundException(CATEGORY_NOT_FOUNd_ERROR);
}
}