icons seed

This commit is contained in:
2026-06-05 18:55:22 +03:30
parent 66413f4ce1
commit b07e97afc0
4 changed files with 143 additions and 78 deletions
+3
View File
@@ -56,3 +56,6 @@ pids
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
/react/* /react/*
/*.sql
+84 -77
View File
@@ -15,102 +15,109 @@ import { CouponsSeeder } from './coupons.seeder';
import { NotificationPreferencesSeeder } from './notification-preferences.seeder'; import { NotificationPreferencesSeeder } from './notification-preferences.seeder';
import { UserWalletsSeeder } from './user-wallets.seeder'; import { UserWalletsSeeder } from './user-wallets.seeder';
import { InventorySeeder } from './inventory.seeder'; import { InventorySeeder } from './inventory.seeder';
import { IconsSeeder } from './icons.seeder';
// import { NotificationsSeeder } from './notifications.seeder'; // import { NotificationsSeeder } from './notifications.seeder';
export class DatabaseSeeder extends Seeder { export class DatabaseSeeder extends Seeder {
async run(em: EntityManager) { async run(em: EntityManager) {
const TOTAL_STEPS = 15; const TOTAL_STEPS = 16;
console.info('[Seeder] Starting database seed'); // console.info('[Seeder] Starting database seed');
// 1. Create Permissions // // 1. Create Permissions
console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating 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`); // console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Done`);
// 2. Create Roles // // 2. Create Roles
console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Creating 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`); // console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Done`);
// 3. Create Restaurants // // 3. Create Restaurants
console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Creating 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`); // 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`); // 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`); // 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`); // 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`); // 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`); // 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`); // console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Done`);
// 7. Create Notification Preferences for all Restaurants // 7. Create Icons
console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Creating notification preferences`); console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Creating icons`);
const notificationPreferencesSeeder = new NotificationPreferencesSeeder(); const iconsSeeder = new IconsSeeder();
await notificationPreferencesSeeder.run(em, allRestaurants); await iconsSeeder.run(em);
console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Done`); console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Done`);
// 8. Create Categories // // 8. Create Notification Preferences for all Restaurants
console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Creating categories`); // console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Creating notification preferences`);
const categoriesSeeder = new CategoriesSeeder(); // const notificationPreferencesSeeder = new NotificationPreferencesSeeder();
const categoriesMap = await categoriesSeeder.run(em, restaurantsMap); // await notificationPreferencesSeeder.run(em, allRestaurants);
console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Done`);
// 9. Create Foods // // 9. Create Categories
console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Creating foods`); // console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Creating categories`);
const foodsSeeder = new FoodsSeeder(); // const categoriesSeeder = new CategoriesSeeder();
await foodsSeeder.run(em, restaurantsMap, categoriesMap); // const categoriesMap = await categoriesSeeder.run(em, restaurantsMap);
console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Done`);
// 10. Create Inventory for all Foods // // 10. Create Foods
console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Creating inventory`); // console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Creating foods`);
const inventorySeeder = new InventorySeeder(); // const foodsSeeder = new FoodsSeeder();
await inventorySeeder.run(em); // await foodsSeeder.run(em, restaurantsMap, categoriesMap);
console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Done`);
// 11. Create Coupons // // 11. Create Inventory for all Foods
console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Creating coupons`); // console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Creating inventory`);
const couponsSeeder = new CouponsSeeder(); // const inventorySeeder = new InventorySeeder();
await couponsSeeder.run(em, restaurantsMap); // await inventorySeeder.run(em);
console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`);
// 12. Create Admins // // 12. Create Coupons
console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating admins`); // console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating coupons`);
const adminsSeeder = new AdminsSeeder(); // const couponsSeeder = new CouponsSeeder();
await adminsSeeder.run(em, rolesMap, restaurantsMap); // await couponsSeeder.run(em, restaurantsMap);
console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`);
// 13. Create Users // // 13. Create Admins
console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating users`); // console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating admins`);
const usersSeeder = new UsersSeeder(); // const adminsSeeder = new AdminsSeeder();
await usersSeeder.run(em); // await adminsSeeder.run(em, rolesMap, restaurantsMap);
console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Done`);
// 14. Create User Wallets // // 14. Create Users
console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Creating user wallets`); // console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Creating users`);
const userWalletsSeeder = new UserWalletsSeeder(); // const usersSeeder = new UsersSeeder();
await userWalletsSeeder.run(em); // await usersSeeder.run(em);
console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Done`);
// 15. Create Notifications for admins and users for all restaurants // // 15. Create User Wallets
console.info(`[Seeder] Step 15/${TOTAL_STEPS}: (optional) creating notifications`); // console.info(`[Seeder] Step 15/${TOTAL_STEPS}: Creating user wallets`);
// const notificationsSeeder = new NotificationsSeeder(); // const userWalletsSeeder = new UserWalletsSeeder();
// await notificationsSeeder.run(em); // await userWalletsSeeder.run(em);
console.info(`[Seeder] Step 15/${TOTAL_STEPS}: Done`); // console.info(`[Seeder] Step 15/${TOTAL_STEPS}: Done`);
// // 16. Create Notifications for admins and users for all restaurants
// console.info(`[Seeder] Step 16/${TOTAL_STEPS}: (optional) creating notifications`);
// // const notificationsSeeder = new NotificationsSeeder();
// // await notificationsSeeder.run(em);
// console.info(`[Seeder] Step 16/${TOTAL_STEPS}: Done`);
console.info('[Seeder] Database seed completed'); console.info('[Seeder] Database seed completed');
} }
+14
View File
@@ -0,0 +1,14 @@
export const iconsSeedData = [
{
groupId: '01KD7DG4VCTWZRSA54M3PEJ6NW',
csvFile: 'icons.csv',
},
{
groupId: '01KD7DGBDFX76VKXMKQKR51RJK',
csvFile: 'icons2.csv',
},
{
groupId: '01KD7DGBDFX76VKXMKQKR61RJK',
csvFile: 'icons3.csv',
},
] as const;
+41
View File
@@ -0,0 +1,41 @@
import type { EntityManager } from '@mikro-orm/core';
import * as fs from 'fs';
import * as path from 'path';
import { Icon } from '../modules/icons/entities/icon.entity';
import { Group } from '../modules/icons/entities/group.entity';
import { iconsSeedData } from './data/icons.data';
export class IconsSeeder {
private loadUrlsFromCsv(csvFile: string): string[] {
const csvPath = path.join(process.cwd(), 'src', 'seeders', 'data', csvFile);
const csvContent = fs.readFileSync(csvPath, 'utf-8');
return csvContent
.split('\n')
.slice(1)
.map(line => line.trim().replace(/^"|"$/g, ''))
.filter(url => url.length > 0);
}
async run(em: EntityManager): Promise<void> {
for (const { groupId, csvFile } of iconsSeedData) {
const group = await em.findOne(Group, { id: groupId });
if (!group) {
console.warn(`[IconsSeeder] Skipping ${csvFile} — group ${groupId} not found`);
continue;
}
const urls = this.loadUrlsFromCsv(csvFile);
for (const url of urls) {
const existing = await em.findOne(Icon, { url, group });
if (existing) continue;
const icon = em.create(Icon, { url, group });
em.persist(icon);
}
}
await em.flush();
}
}