Files
dmenu-api/src/seeders/notifications.seeder.ts
T
2025-12-21 13:05:48 +03:30

69 lines
2.7 KiB
TypeScript

import type { EntityManager } from '@mikro-orm/core';
import { Notification } from '../modules/notifications/entities/notification.entity';
import { Admin } from '../modules/admin/entities/admin.entity';
import { User } from '../modules/users/entities/user.entity';
import { Restaurant } from '../modules/restaurants/entities/restaurant.entity';
import { NotifTitleEnum } from '../modules/notifications/interfaces/notification.interface';
export class NotificationsSeeder {
/**
* Seeds notifications for all admins and users for every restaurant.
* Ensures up to 33 notifications exist per (restaurant, admin) and (restaurant, user).
*/
async run(em: EntityManager): Promise<void> {
const restaurants = await em.find(Restaurant, {});
const admins = await em.find(Admin, {});
const users = await em.find(User, {});
const titles = Object.values(NotifTitleEnum);
for (const restaurant of restaurants) {
if (!restaurant) continue;
// Admin notifications
for (const admin of admins) {
if (!admin) continue;
const existingCount = await em.count(Notification, {
restaurant: { id: restaurant.id },
admin: { id: admin.id },
});
const toCreate = Math.max(0, 33 - (existingCount || 0));
for (let i = 0; i < toCreate; i++) {
const notif = em.create(Notification, {
restaurant,
admin,
title: titles[i % titles.length] as NotifTitleEnum,
content: `Seeded notification ${i + 1} for admin ${admin.id} at ${restaurant.slug}`,
});
em.persist(notif);
}
}
// User notifications
for (const user of users) {
if (!user) continue;
const existingCount = await em.count(Notification, {
restaurant: { id: restaurant.id },
user: { id: user.id },
});
const toCreate = Math.max(0, 33 - (existingCount || 0));
for (let i = 0; i < toCreate; i++) {
const notif = em.create(Notification, {
restaurant,
user,
title: titles[i % titles.length] as NotifTitleEnum,
content: `Seeded notification ${i + 1} for user ${user.id} at ${restaurant.slug}`,
});
em.persist(notif);
}
}
}
await em.flush();
}
}