update seeder
This commit is contained in:
@@ -19,65 +19,99 @@ import { InventorySeeder } from './inventory.seeder';
|
|||||||
|
|
||||||
export class DatabaseSeeder extends Seeder {
|
export class DatabaseSeeder extends Seeder {
|
||||||
async run(em: EntityManager) {
|
async run(em: EntityManager) {
|
||||||
|
const TOTAL_STEPS = 15;
|
||||||
|
console.info('[Seeder] Starting database seed');
|
||||||
// 1. Create Permissions
|
// 1. Create Permissions
|
||||||
|
console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating permissions`);
|
||||||
const permissionsSeeder = new PermissionsSeeder();
|
const permissionsSeeder = new PermissionsSeeder();
|
||||||
const permissions = await permissionsSeeder.run(em);
|
const permissions = await permissionsSeeder.run(em);
|
||||||
|
console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 2. Create Roles
|
// 2. Create Roles
|
||||||
|
console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Creating roles`);
|
||||||
const rolesSeeder = new RolesSeeder();
|
const rolesSeeder = new RolesSeeder();
|
||||||
const rolesMap = await rolesSeeder.run(em, permissions);
|
const rolesMap = await rolesSeeder.run(em, permissions);
|
||||||
|
console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 3. Create Restaurants
|
// 3. Create Restaurants
|
||||||
|
console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Creating restaurants`);
|
||||||
const restaurantsSeeder = new RestaurantsSeeder();
|
const restaurantsSeeder = new RestaurantsSeeder();
|
||||||
const restaurantsMap = await restaurantsSeeder.run(em);
|
const restaurantsMap = await restaurantsSeeder.run(em);
|
||||||
|
console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 4. Create Payment Methods for all Restaurants
|
// 4. Create Payment Methods for all Restaurants
|
||||||
|
console.info(`[Seeder] Step 4/${TOTAL_STEPS}: Creating payment methods`);
|
||||||
const allRestaurants = await em.find(Restaurant, {});
|
const allRestaurants = await em.find(Restaurant, {});
|
||||||
const paymentMethodsSeeder = new PaymentMethodsSeeder();
|
const paymentMethodsSeeder = new PaymentMethodsSeeder();
|
||||||
await paymentMethodsSeeder.run(em, allRestaurants);
|
await paymentMethodsSeeder.run(em, allRestaurants);
|
||||||
|
console.info(`[Seeder] Step 4/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 5. Create Delivery Methods for all Restaurants
|
// 5. Create Delivery Methods for all Restaurants
|
||||||
|
console.info(`[Seeder] Step 5/${TOTAL_STEPS}: Creating delivery methods`);
|
||||||
const deliveryMethodsSeeder = new DeliveryMethodsSeeder();
|
const deliveryMethodsSeeder = new DeliveryMethodsSeeder();
|
||||||
await deliveryMethodsSeeder.run(em, allRestaurants);
|
await deliveryMethodsSeeder.run(em, allRestaurants);
|
||||||
|
console.info(`[Seeder] Step 5/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 6. Create Schedules for all Restaurants
|
// 6. Create Schedules for all Restaurants
|
||||||
|
console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Creating schedules`);
|
||||||
const schedulesSeeder = new SchedulesSeeder();
|
const schedulesSeeder = new SchedulesSeeder();
|
||||||
await schedulesSeeder.run(em, allRestaurants);
|
await schedulesSeeder.run(em, allRestaurants);
|
||||||
|
console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 7. Create Notification Preferences for all Restaurants
|
// 7. Create Notification Preferences for all Restaurants
|
||||||
|
console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Creating notification preferences`);
|
||||||
const notificationPreferencesSeeder = new NotificationPreferencesSeeder();
|
const notificationPreferencesSeeder = new NotificationPreferencesSeeder();
|
||||||
await notificationPreferencesSeeder.run(em, allRestaurants);
|
await notificationPreferencesSeeder.run(em, allRestaurants);
|
||||||
|
console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 8. Create Categories
|
// 8. Create Categories
|
||||||
|
console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Creating categories`);
|
||||||
const categoriesSeeder = new CategoriesSeeder();
|
const categoriesSeeder = new CategoriesSeeder();
|
||||||
const categoriesMap = await categoriesSeeder.run(em, restaurantsMap);
|
const categoriesMap = await categoriesSeeder.run(em, restaurantsMap);
|
||||||
|
console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 9. Create Foods
|
// 9. Create Foods
|
||||||
|
console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Creating foods`);
|
||||||
const foodsSeeder = new FoodsSeeder();
|
const foodsSeeder = new FoodsSeeder();
|
||||||
await foodsSeeder.run(em, restaurantsMap, categoriesMap);
|
await foodsSeeder.run(em, restaurantsMap, categoriesMap);
|
||||||
|
console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 10. Create Inventory for all Foods
|
// 10. Create Inventory for all Foods
|
||||||
|
console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Creating inventory`);
|
||||||
const inventorySeeder = new InventorySeeder();
|
const inventorySeeder = new InventorySeeder();
|
||||||
await inventorySeeder.run(em);
|
await inventorySeeder.run(em);
|
||||||
|
console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 11. Create Coupons
|
// 11. Create Coupons
|
||||||
|
console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Creating coupons`);
|
||||||
const couponsSeeder = new CouponsSeeder();
|
const couponsSeeder = new CouponsSeeder();
|
||||||
await couponsSeeder.run(em, restaurantsMap);
|
await couponsSeeder.run(em, restaurantsMap);
|
||||||
|
console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 12. Create Admins
|
// 12. Create Admins
|
||||||
|
console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating admins`);
|
||||||
const adminsSeeder = new AdminsSeeder();
|
const adminsSeeder = new AdminsSeeder();
|
||||||
await adminsSeeder.run(em, rolesMap, restaurantsMap);
|
await adminsSeeder.run(em, rolesMap, restaurantsMap);
|
||||||
|
console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 13. Create Users
|
// 13. Create Users
|
||||||
|
console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating users`);
|
||||||
const usersSeeder = new UsersSeeder();
|
const usersSeeder = new UsersSeeder();
|
||||||
await usersSeeder.run(em);
|
await usersSeeder.run(em);
|
||||||
|
console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 14. Create User Wallets
|
// 14. Create User Wallets
|
||||||
|
console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Creating user wallets`);
|
||||||
const userWalletsSeeder = new UserWalletsSeeder();
|
const userWalletsSeeder = new UserWalletsSeeder();
|
||||||
await userWalletsSeeder.run(em);
|
await userWalletsSeeder.run(em);
|
||||||
|
console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
// 15. Create Notifications for admins and users for all restaurants
|
// 15. Create Notifications for admins and users for all restaurants
|
||||||
|
console.info(`[Seeder] Step 15/${TOTAL_STEPS}: (optional) creating notifications`);
|
||||||
// const notificationsSeeder = new NotificationsSeeder();
|
// const notificationsSeeder = new NotificationsSeeder();
|
||||||
// await notificationsSeeder.run(em);
|
// await notificationsSeeder.run(em);
|
||||||
|
console.info(`[Seeder] Step 15/${TOTAL_STEPS}: Done`);
|
||||||
|
|
||||||
|
console.info('[Seeder] Database seed completed');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -13,9 +13,31 @@ export class FoodsSeeder {
|
|||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
for (const foodData of foodsData) {
|
for (const foodData of foodsData) {
|
||||||
const restaurant = restaurantsMap.get(foodData.restaurantSlug);
|
const restaurant = restaurantsMap.get(foodData.restaurantSlug);
|
||||||
const category = categoriesMap.get(`${foodData.restaurantSlug}-${foodData.categoryTitle}`);
|
const key = `${foodData.restaurantSlug}-${foodData.categoryTitle}`;
|
||||||
|
|
||||||
if (!restaurant || !category) continue;
|
const normalize = (s: string) => (s || '').replace(/\s+/g, ' ').trim();
|
||||||
|
|
||||||
|
let category = categoriesMap.get(key);
|
||||||
|
|
||||||
|
// Fallback: try to find category by normalized title if exact key not found
|
||||||
|
if (!category) {
|
||||||
|
for (const [k, v] of categoriesMap.entries()) {
|
||||||
|
const parts = k.split('-');
|
||||||
|
const kSlug = parts[0];
|
||||||
|
const kTitle = parts.slice(1).join('-');
|
||||||
|
if (kSlug === foodData.restaurantSlug && normalize(kTitle) === normalize(foodData.categoryTitle)) {
|
||||||
|
category = v;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!restaurant || !category) {
|
||||||
|
console.warn(
|
||||||
|
`Skipping food \"${foodData.title}\" — missing ${!restaurant ? 'restaurant' : 'category'} for key ${key}`,
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
const existing = await em.findOne(Food, {
|
const existing = await em.findOne(Food, {
|
||||||
title: foodData.title,
|
title: foodData.title,
|
||||||
|
|||||||
@@ -11,8 +11,9 @@ export class RestaurantsSeeder {
|
|||||||
if (!restaurant) {
|
if (!restaurant) {
|
||||||
restaurant = em.create(Restaurant, {
|
restaurant = em.create(Restaurant, {
|
||||||
...restaurantData,
|
...restaurantData,
|
||||||
subscriptionEndDate: new Date('2025-12-26'),
|
subscriptionStartDate: new Date('2026-01-01'),
|
||||||
subscriptionStartDate: new Date('2026-12-26'),
|
subscriptionEndDate: new Date('2026-01-07'),
|
||||||
|
isActive: true,
|
||||||
});
|
});
|
||||||
em.persist(restaurant);
|
em.persist(restaurant);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user