diff --git a/.gitignore b/.gitignore index ca28fe8..8a56228 100644 --- a/.gitignore +++ b/.gitignore @@ -55,4 +55,7 @@ pids # Diagnostic reports (https://nodejs.org/api/report.html) report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json -/react/* \ No newline at end of file +/react/* + + +/*.sql \ No newline at end of file diff --git a/src/seeders/DatabaseSeeder.ts b/src/seeders/DatabaseSeeder.ts index dc3442a..d9095f7 100644 --- a/src/seeders/DatabaseSeeder.ts +++ b/src/seeders/DatabaseSeeder.ts @@ -15,102 +15,109 @@ import { CouponsSeeder } from './coupons.seeder'; import { NotificationPreferencesSeeder } from './notification-preferences.seeder'; import { UserWalletsSeeder } from './user-wallets.seeder'; import { InventorySeeder } from './inventory.seeder'; +import { IconsSeeder } from './icons.seeder'; // import { NotificationsSeeder } from './notifications.seeder'; export class DatabaseSeeder extends Seeder { async run(em: EntityManager) { - const TOTAL_STEPS = 15; - console.info('[Seeder] Starting database seed'); - // 1. Create Permissions - console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating permissions`); - const permissionsSeeder = new PermissionsSeeder(); - const permissions = await permissionsSeeder.run(em); - console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Done`); + const TOTAL_STEPS = 16; + // console.info('[Seeder] Starting database seed'); + // // 1. Create Permissions + // console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Creating permissions`); + // const permissionsSeeder = new PermissionsSeeder(); + // const permissions = await permissionsSeeder.run(em); + // console.info(`[Seeder] Step 1/${TOTAL_STEPS}: Done`); - // 2. Create Roles - console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Creating roles`); - const rolesSeeder = new RolesSeeder(); - const rolesMap = await rolesSeeder.run(em, permissions); - console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Done`); + // // 2. Create Roles + // console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Creating roles`); + // const rolesSeeder = new RolesSeeder(); + // const rolesMap = await rolesSeeder.run(em, permissions); + // console.info(`[Seeder] Step 2/${TOTAL_STEPS}: Done`); - // 3. Create Restaurants - console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Creating restaurants`); - const restaurantsSeeder = new RestaurantsSeeder(); - const restaurantsMap = await restaurantsSeeder.run(em); - console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Done`); + // // 3. Create Restaurants + // console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Creating restaurants`); + // const restaurantsSeeder = new RestaurantsSeeder(); + // const restaurantsMap = await restaurantsSeeder.run(em); + // console.info(`[Seeder] Step 3/${TOTAL_STEPS}: Done`); - // 4. Create Payment Methods for all Restaurants - console.info(`[Seeder] Step 4/${TOTAL_STEPS}: Creating payment methods`); - const allRestaurants = await em.find(Restaurant, {}); - const paymentMethodsSeeder = new PaymentMethodsSeeder(); - await paymentMethodsSeeder.run(em, allRestaurants); - console.info(`[Seeder] Step 4/${TOTAL_STEPS}: Done`); + // // 4. Create Payment Methods for all Restaurants + // console.info(`[Seeder] Step 4/${TOTAL_STEPS}: Creating payment methods`); + // const allRestaurants = await em.find(Restaurant, {}); + // const paymentMethodsSeeder = new PaymentMethodsSeeder(); + // await paymentMethodsSeeder.run(em, allRestaurants); + // console.info(`[Seeder] Step 4/${TOTAL_STEPS}: Done`); - // 5. Create Delivery Methods for all Restaurants - console.info(`[Seeder] Step 5/${TOTAL_STEPS}: Creating delivery methods`); - const deliveryMethodsSeeder = new DeliveryMethodsSeeder(); - await deliveryMethodsSeeder.run(em, allRestaurants); - console.info(`[Seeder] Step 5/${TOTAL_STEPS}: Done`); + // // 5. Create Delivery Methods for all Restaurants + // console.info(`[Seeder] Step 5/${TOTAL_STEPS}: Creating delivery methods`); + // const deliveryMethodsSeeder = new DeliveryMethodsSeeder(); + // await deliveryMethodsSeeder.run(em, allRestaurants); + // console.info(`[Seeder] Step 5/${TOTAL_STEPS}: Done`); - // 6. Create Schedules for all Restaurants - console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Creating schedules`); - const schedulesSeeder = new SchedulesSeeder(); - await schedulesSeeder.run(em, allRestaurants); - console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Done`); + // // 6. Create Schedules for all Restaurants + // console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Creating schedules`); + // const schedulesSeeder = new SchedulesSeeder(); + // await schedulesSeeder.run(em, allRestaurants); + // console.info(`[Seeder] Step 6/${TOTAL_STEPS}: Done`); - // 7. Create Notification Preferences for all Restaurants - console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Creating notification preferences`); - const notificationPreferencesSeeder = new NotificationPreferencesSeeder(); - await notificationPreferencesSeeder.run(em, allRestaurants); + // 7. Create Icons + console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Creating icons`); + const iconsSeeder = new IconsSeeder(); + await iconsSeeder.run(em); console.info(`[Seeder] Step 7/${TOTAL_STEPS}: Done`); - // 8. Create Categories - console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Creating categories`); - const categoriesSeeder = new CategoriesSeeder(); - const categoriesMap = await categoriesSeeder.run(em, restaurantsMap); - console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Done`); + // // 8. Create Notification Preferences for all Restaurants + // console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Creating notification preferences`); + // const notificationPreferencesSeeder = new NotificationPreferencesSeeder(); + // await notificationPreferencesSeeder.run(em, allRestaurants); + // console.info(`[Seeder] Step 8/${TOTAL_STEPS}: Done`); - // 9. Create Foods - console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Creating foods`); - const foodsSeeder = new FoodsSeeder(); - await foodsSeeder.run(em, restaurantsMap, categoriesMap); - console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Done`); + // // 9. Create Categories + // console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Creating categories`); + // const categoriesSeeder = new CategoriesSeeder(); + // const categoriesMap = await categoriesSeeder.run(em, restaurantsMap); + // console.info(`[Seeder] Step 9/${TOTAL_STEPS}: Done`); - // 10. Create Inventory for all Foods - console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Creating inventory`); - const inventorySeeder = new InventorySeeder(); - await inventorySeeder.run(em); - console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Done`); + // // 10. Create Foods + // console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Creating foods`); + // const foodsSeeder = new FoodsSeeder(); + // await foodsSeeder.run(em, restaurantsMap, categoriesMap); + // console.info(`[Seeder] Step 10/${TOTAL_STEPS}: Done`); - // 11. Create Coupons - console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Creating coupons`); - const couponsSeeder = new CouponsSeeder(); - await couponsSeeder.run(em, restaurantsMap); - console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`); + // // 11. Create Inventory for all Foods + // console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Creating inventory`); + // const inventorySeeder = new InventorySeeder(); + // await inventorySeeder.run(em); + // console.info(`[Seeder] Step 11/${TOTAL_STEPS}: Done`); - // 12. Create Admins - console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating admins`); - const adminsSeeder = new AdminsSeeder(); - await adminsSeeder.run(em, rolesMap, restaurantsMap); - console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`); + // // 12. Create Coupons + // console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Creating coupons`); + // const couponsSeeder = new CouponsSeeder(); + // await couponsSeeder.run(em, restaurantsMap); + // console.info(`[Seeder] Step 12/${TOTAL_STEPS}: Done`); - // 13. Create Users - console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating users`); - const usersSeeder = new UsersSeeder(); - await usersSeeder.run(em); - console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Done`); + // // 13. Create Admins + // console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Creating admins`); + // const adminsSeeder = new AdminsSeeder(); + // await adminsSeeder.run(em, rolesMap, restaurantsMap); + // console.info(`[Seeder] Step 13/${TOTAL_STEPS}: Done`); - // 14. Create User Wallets - console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Creating user wallets`); - const userWalletsSeeder = new UserWalletsSeeder(); - await userWalletsSeeder.run(em); - console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Done`); + // // 14. Create Users + // console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Creating users`); + // const usersSeeder = new UsersSeeder(); + // await usersSeeder.run(em); + // console.info(`[Seeder] Step 14/${TOTAL_STEPS}: Done`); - // 15. Create Notifications for admins and users for all restaurants - console.info(`[Seeder] Step 15/${TOTAL_STEPS}: (optional) creating notifications`); - // const notificationsSeeder = new NotificationsSeeder(); - // await notificationsSeeder.run(em); - console.info(`[Seeder] Step 15/${TOTAL_STEPS}: Done`); + // // 15. Create User Wallets + // console.info(`[Seeder] Step 15/${TOTAL_STEPS}: Creating user wallets`); + // const userWalletsSeeder = new UserWalletsSeeder(); + // await userWalletsSeeder.run(em); + // 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'); } diff --git a/src/seeders/data/icons.data.ts b/src/seeders/data/icons.data.ts new file mode 100644 index 0000000..87ee7c4 --- /dev/null +++ b/src/seeders/data/icons.data.ts @@ -0,0 +1,14 @@ +export const iconsSeedData = [ + { + groupId: '01KD7DG4VCTWZRSA54M3PEJ6NW', + csvFile: 'icons.csv', + }, + { + groupId: '01KD7DGBDFX76VKXMKQKR51RJK', + csvFile: 'icons2.csv', + }, + { + groupId: '01KD7DGBDFX76VKXMKQKR61RJK', + csvFile: 'icons3.csv', + }, +] as const; diff --git a/src/seeders/icons.seeder.ts b/src/seeders/icons.seeder.ts new file mode 100644 index 0000000..d01bbd5 --- /dev/null +++ b/src/seeders/icons.seeder.ts @@ -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 { + 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(); + } +}