From c50c4b1c5a272fa2ff0d20a24779e1bc46c5747e Mon Sep 17 00:00:00 2001 From: Mayank Mishra Date: Mon, 23 Feb 2026 12:26:56 +0530 Subject: [PATCH] taking array of cancellations and seeded cities of india --- insertCities.js | 53 +++++ package.json | 2 + prisma/citiesSeeder.ts | 64 ++++++ prisma/schema.prisma | 19 +- prisma/seed.ts | 215 +++++++++++------- .../Activity_Hub/Scheduling/cancelSlot.ts | 16 +- .../services/activityScheduling.service.ts | 31 ++- 7 files changed, 290 insertions(+), 110 deletions(-) create mode 100644 insertCities.js create mode 100644 prisma/citiesSeeder.ts diff --git a/insertCities.js b/insertCities.js new file mode 100644 index 0000000..22c77e6 --- /dev/null +++ b/insertCities.js @@ -0,0 +1,53 @@ +import { PrismaClient } from '@prisma/client'; +import fs from 'fs'; +import path from 'path'; + +const prisma = new PrismaClient(); + +async function insertCities() { + try { + const statesFolder = path.join(process.cwd(), 'states-cities'); + const files = fs.readdirSync(statesFolder); + + for (const file of files) { + if (!file.endsWith('.json')) continue; + + const stateName = file.replace('.json', ''); + + const state = await prisma.states.findFirst({ + where: { stateName }, + }); + + if (!state) { + console.log(`❌ State not found: ${stateName}`); + continue; + } + + const filePath = path.join(statesFolder, file); + const citiesData = JSON.parse( + fs.readFileSync(filePath, 'utf-8') + ); + + await prisma.cities.createMany({ + data: citiesData.map((city) => ({ + stateXid: state.id, + cityName: + typeof city === 'string' + ? city.trim() + : city.cityName.trim(), + })), + skipDuplicates: true, + }); + + console.log(`✅ ${stateName} cities inserted`); + } + + console.log('🎉 All cities inserted successfully'); + } catch (error) { + console.error('Error inserting cities:', error); + } finally { + await prisma.$disconnect(); + } +} + +insertCities(); diff --git a/package.json b/package.json index bc02f79..08d884c 100644 --- a/package.json +++ b/package.json @@ -54,12 +54,14 @@ "class-validator": "^0.14.0", "date-fns": "^4.1.0", "fast-xml-parser": "^5.3.1", + "fs": "^0.0.1-security", "helmet": "^7.1.0", "http-status": "^2.1.0", "moment": "^2.30.1", "passport": "^0.7.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", + "path": "^0.12.7", "prisma": "^7.0.1", "reflect-metadata": "^0.1.13", "rxjs": "^7.8.1", diff --git a/prisma/citiesSeeder.ts b/prisma/citiesSeeder.ts new file mode 100644 index 0000000..8f89c61 --- /dev/null +++ b/prisma/citiesSeeder.ts @@ -0,0 +1,64 @@ +import fs from 'fs' +import path from 'path' +import { PrismaClient } from '@prisma/client' + +export async function seedCities(prisma: PrismaClient) { + + const statesFolder = path.join(process.cwd(), 'states-cities') + const files = fs.readdirSync(statesFolder) + + for (const file of files) { + if (!file.endsWith('.json')) continue + + const stateName = file.replace('.json', '') + + const state = await prisma.states.findFirst({ + where: { + stateName: { + equals: stateName, + mode: 'insensitive', + }, + }, + }) + + if (!state) { + console.log(`❌ State not found: ${stateName}`) + continue + } + + const filePath = path.join(statesFolder, file) + const rawData = JSON.parse(fs.readFileSync(filePath, 'utf-8')) + + if (!rawData.districts) { + console.log(`❌ Invalid structure in ${file}`) + continue + } + + const allVillages: string[] = [] + + for (const district of rawData.districts) { + for (const sub of district.subDistricts || []) { + for (const village of sub.villages || []) { + if (village && village.trim()) { + allVillages.push(village.trim()) + } + } + } + } + + console.log(`📦 Total villages found in ${stateName}:`, allVillages.length) + + const result = await prisma.cities.createMany({ + data: allVillages.map((village) => ({ + stateXid: state.id, + cityName: village, + })), + skipDuplicates: true, + }) + + console.log(`✅ ${stateName} inserted: ${result.count}`) + } + + console.log('🎉 All states processed successfully!') +} + diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 162ef1a..b5740ba 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -342,7 +342,7 @@ model Cities { id Int @id @default(autoincrement()) stateXid Int @map("state_xid") states States @relation(fields: [stateXid], references: [id], onDelete: Cascade) - cityName String @unique @map("city_name") @db.VarChar(50) + cityName String @map("city_name") @db.VarChar(50) isActive Boolean @default(true) @map("is_active") createdAt DateTime @default(now()) @map("created_at") updatedAt DateTime @updatedAt @map("updated_at") @@ -356,6 +356,7 @@ model Cities { checkOutActivities Activities[] @relation("CheckOutCity") schoolCompanies SchoolCompany[] + @@unique([stateXid, cityName]) @@map("cities") @@schema("mst") } @@ -688,14 +689,14 @@ model Roles { } model Connections { - id Int @id @default(autoincrement()) - connectionType String @unique @map("connection_type") @db.VarChar(30) - connectionName String @map("connection_name") @db.VarChar(30) - locationDetails String @map("location_details") @db.VarChar(100) - isActive Boolean @default(true) @map("is_active") - createdAt DateTime @default(now()) @map("created_at") - updatedAt DateTime @updatedAt @map("updated_at") - deletedAt DateTime? @map("deleted_at") + id Int @id @default(autoincrement()) + connectionType String @unique @map("connection_type") @db.VarChar(30) + connectionName String @map("connection_name") @db.VarChar(30) + locationDetails String @map("location_details") @db.VarChar(100) + isActive Boolean @default(true) @map("is_active") + createdAt DateTime @default(now()) @map("created_at") + updatedAt DateTime @updatedAt @map("updated_at") + deletedAt DateTime? @map("deleted_at") User User[] @@map("connections") diff --git a/prisma/seed.ts b/prisma/seed.ts index 6273e03..ed155be 100644 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,6 +1,7 @@ import { PrismaClient } from '@prisma/client'; import { PrismaPg } from '@prisma/adapter-pg'; import 'dotenv/config'; +import { seedCities } from './citiesSeeder' const prisma = new PrismaClient({ adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }), @@ -18,6 +19,60 @@ async function main() { isActive: true, }, }); + // ================= STATES ================= + + const statesList = [ + 'Andhra Pradesh', + 'Arunachal Pradesh', + 'Assam', + 'Bihar', + 'Chhattisgarh', + 'Goa', + 'Gujarat', + 'Haryana', + 'Himachal Pradesh', + 'Jharkhand', + 'Karnataka', + 'Kerala', + 'Madhya Pradesh', + 'Maharashtra', + 'Manipur', + 'Meghalaya', + 'Mizoram', + 'Nagaland', + 'Odisha', + 'Punjab', + 'Rajasthan', + 'Sikkim', + 'Tamil Nadu', + 'Telangana', + 'Tripura', + 'Uttar Pradesh', + 'Uttarakhand', + 'West Bengal', + + // Union Territories + 'Andaman and Nicobar Islands', + 'Chandigarh', + 'Dadra and Nagar Haveli and Daman and Diu', + 'Delhi', + 'Jammu and Kashmir', + 'Ladakh', + 'Lakshadweep', + 'Puducherry' + ]; + + for (const stateName of statesList) { + await prisma.states.upsert({ + where: { stateName }, + update: {}, + create: { + countryXid: india.id, + stateName, + }, + }); + } + // ✅ Currencies await prisma.currencies.createMany({ @@ -423,7 +478,7 @@ async function main() { { interestXid: dogoodfeelgood.id, activityTypeName: 'Animal Volunteering', energyLevelXid: mediumEnergy.id }, { interestXid: dogoodfeelgood.id, activityTypeName: 'Beach Clean Ups', energyLevelXid: highEnergy.id }, { interestXid: dogoodfeelgood.id, activityTypeName: 'Educating Children', energyLevelXid: mediumEnergy.id }, - + ], skipDuplicates: true, }); @@ -450,82 +505,82 @@ async function main() { { amenitiesName: 'Baking sheet', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BakingSheet.png' }, { amenitiesName: 'Barbecue utensils', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BarbecueUtensils.png' }, { amenitiesName: 'Bath/Shower', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BathShower.png' }, - { amenitiesName: 'Batting cage', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BattingCage.png'}, - { amenitiesName: 'Beach access', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BeachAccess.png'}, - { amenitiesName: 'Beach essentials', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BeachEsstentials.png'}, - { amenitiesName: 'Bed linen', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BedLinen.png'}, - { amenitiesName: 'Bidet', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Bidet.png'}, - { amenitiesName: 'Bikes', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Bikes.png'}, - { amenitiesName: 'Blender', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Blender.png'}, - { amenitiesName: 'Board games', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BoardGames.png'}, - { amenitiesName: 'Boat berth', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BoatBerth.png'}, - { amenitiesName: 'Books and reading material', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BooksAndReadingMaterial.png'}, - { amenitiesName: 'Ceiling fan', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/CealingFan.png'}, - { amenitiesName: 'Cleaning available during stay', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/CleaningAvailable.png'}, - { amenitiesName: 'Coffee maker', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/CoffeeMaker.png'}, - { amenitiesName: 'Conditioner', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Conditioner.png'}, - { amenitiesName: 'Hot water', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/HotWater.png'}, - { amenitiesName: 'Indoor fireplace', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/IndoorFirePlace.png'}, - { amenitiesName: 'Iron', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Iron.png'}, - { amenitiesName: 'Kettle', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Kettle.png'}, - { amenitiesName: 'Kitchen', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Kitchen.png'}, - { amenitiesName: 'Lake access', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/LakeAccess.png'}, - { amenitiesName: 'Lift', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Lift.png'}, - { amenitiesName: 'Microwave', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MicroWave.png'}, - { amenitiesName: 'Mini fridge', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MiniFridge.png'}, - { amenitiesName: 'Fridge', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Fridge.png'}, - { amenitiesName: 'Games console', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/GamesConsole.png'}, - { amenitiesName: 'Garden', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Garden.png'}, - { amenitiesName: 'Gym', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Gym.png'}, - { amenitiesName: 'Hair dryer', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/HairDryer.png'}, - { amenitiesName: 'Hammock', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Hammock.png'}, - { amenitiesName: 'Hangers', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Hangers.png'}, - { amenitiesName: 'Heating', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Heating.png'}, - { amenitiesName: 'High chair', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/HighChair.png'}, - { amenitiesName: 'Ethernet connection', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/EthernetConnection.png'}, - { amenitiesName: 'EV charger', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/EVCharger.png'}, - { amenitiesName: 'Exercise equipment', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/ExerciseEquipment.png'}, - { amenitiesName: 'Extra pillows and blankets', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/ExtraPillowAndBlanket.png'}, - { amenitiesName: 'Fire extinguisher', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FireExtinguisher.png'}, - { amenitiesName: 'Firepit', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FirePit.png'}, - { amenitiesName: 'Fireplace guards', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FireplaceGuards.png'}, - { amenitiesName: 'First aid kit', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FirstAidKit.png'}, - { amenitiesName: 'Free on street parking', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FreeStreetParking.png'}, - { amenitiesName: 'Free parking on premises', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FreeParkingOnPremises.png'}, - { amenitiesName: 'Dedicated workspace', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/DedicatedWorkspace.png'}, - { amenitiesName: 'Dinning table', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/DiningTable.png'}, - { amenitiesName: 'Dishes and cutlery', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/DishesAndCutlery.png'}, - { amenitiesName: 'Dryer', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Dryer.png'}, - { amenitiesName: 'Essentials', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Essentials.png'}, - { amenitiesName: 'Safe', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Safe.png'}, - { amenitiesName: 'Shampoo', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Shampoo.png'}, - { amenitiesName: 'Shower gel', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/ShowerGel.png'}, - { amenitiesName: 'Mini golf', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MiniGolf.png'}, - { amenitiesName: 'Mosquito net', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MosquitoNet.png'}, - { amenitiesName: 'Mobile network', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MobileNet.png'}, - { amenitiesName: 'Outdoor dining area', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/OutdoorDiningArea.png'}, - { amenitiesName: 'Outdoor kitchen', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/OutdoorKitchen.png'}, - { amenitiesName: 'Oven', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Oven.png'}, - { amenitiesName: 'Paid parking off premises', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PaidParkingOffPremises.png'}, - { amenitiesName: 'Paid parking on premises', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PaidParkingOnPremises.png'}, - { amenitiesName: 'Patio or balcony', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PatioOrBalcony.png'}, - { amenitiesName: 'Piano', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Piano.png'}, - { amenitiesName: 'Mobile charging point', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MobileChargingPoint.png'}, - { amenitiesName: 'Pocket wifi', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PocketWifi.png'}, - { amenitiesName: 'Pool', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Pool.png'}, - { amenitiesName: 'Portable fans', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PortableFans.png'}, - { amenitiesName: 'Private entrance', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PrivateEntrance.png'}, - { amenitiesName: 'Skate ramp', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SkateRamp.png'}, - { amenitiesName: 'Ski-in/out', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Ski-InOut.png'}, - { amenitiesName: 'Smoke alarm', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SmokeAlarm.png'}, - { amenitiesName: 'Sound system', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SoundSystem.png'}, - { amenitiesName: 'Sun loungers', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SunLoungers.png'}, - { amenitiesName: 'Toaster', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Toaster.png'}, - { amenitiesName: 'Travel cot', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/TravelCot.png'}, - { amenitiesName: 'TV', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/TV.png'}, - { amenitiesName: 'Washing machine', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/WashingMachine.png'}, - { amenitiesName: 'Waterfront', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Waterfront.png'}, - { amenitiesName: 'Wifi', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Wifi.png'} + { amenitiesName: 'Batting cage', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BattingCage.png' }, + { amenitiesName: 'Beach access', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BeachAccess.png' }, + { amenitiesName: 'Beach essentials', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BeachEsstentials.png' }, + { amenitiesName: 'Bed linen', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BedLinen.png' }, + { amenitiesName: 'Bidet', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Bidet.png' }, + { amenitiesName: 'Bikes', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Bikes.png' }, + { amenitiesName: 'Blender', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Blender.png' }, + { amenitiesName: 'Board games', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BoardGames.png' }, + { amenitiesName: 'Boat berth', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BoatBerth.png' }, + { amenitiesName: 'Books and reading material', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/BooksAndReadingMaterial.png' }, + { amenitiesName: 'Ceiling fan', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/CealingFan.png' }, + { amenitiesName: 'Cleaning available during stay', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/CleaningAvailable.png' }, + { amenitiesName: 'Coffee maker', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/CoffeeMaker.png' }, + { amenitiesName: 'Conditioner', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Conditioner.png' }, + { amenitiesName: 'Hot water', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/HotWater.png' }, + { amenitiesName: 'Indoor fireplace', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/IndoorFirePlace.png' }, + { amenitiesName: 'Iron', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Iron.png' }, + { amenitiesName: 'Kettle', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Kettle.png' }, + { amenitiesName: 'Kitchen', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Kitchen.png' }, + { amenitiesName: 'Lake access', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/LakeAccess.png' }, + { amenitiesName: 'Lift', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Lift.png' }, + { amenitiesName: 'Microwave', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MicroWave.png' }, + { amenitiesName: 'Mini fridge', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MiniFridge.png' }, + { amenitiesName: 'Fridge', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Fridge.png' }, + { amenitiesName: 'Games console', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/GamesConsole.png' }, + { amenitiesName: 'Garden', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Garden.png' }, + { amenitiesName: 'Gym', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Gym.png' }, + { amenitiesName: 'Hair dryer', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/HairDryer.png' }, + { amenitiesName: 'Hammock', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Hammock.png' }, + { amenitiesName: 'Hangers', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Hangers.png' }, + { amenitiesName: 'Heating', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Heating.png' }, + { amenitiesName: 'High chair', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/HighChair.png' }, + { amenitiesName: 'Ethernet connection', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/EthernetConnection.png' }, + { amenitiesName: 'EV charger', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/EVCharger.png' }, + { amenitiesName: 'Exercise equipment', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/ExerciseEquipment.png' }, + { amenitiesName: 'Extra pillows and blankets', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/ExtraPillowAndBlanket.png' }, + { amenitiesName: 'Fire extinguisher', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FireExtinguisher.png' }, + { amenitiesName: 'Firepit', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FirePit.png' }, + { amenitiesName: 'Fireplace guards', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FireplaceGuards.png' }, + { amenitiesName: 'First aid kit', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FirstAidKit.png' }, + { amenitiesName: 'Free on street parking', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FreeStreetParking.png' }, + { amenitiesName: 'Free parking on premises', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/FreeParkingOnPremises.png' }, + { amenitiesName: 'Dedicated workspace', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/DedicatedWorkspace.png' }, + { amenitiesName: 'Dinning table', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/DiningTable.png' }, + { amenitiesName: 'Dishes and cutlery', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/DishesAndCutlery.png' }, + { amenitiesName: 'Dryer', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Dryer.png' }, + { amenitiesName: 'Essentials', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Essentials.png' }, + { amenitiesName: 'Safe', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Safe.png' }, + { amenitiesName: 'Shampoo', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Shampoo.png' }, + { amenitiesName: 'Shower gel', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/ShowerGel.png' }, + { amenitiesName: 'Mini golf', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MiniGolf.png' }, + { amenitiesName: 'Mosquito net', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MosquitoNet.png' }, + { amenitiesName: 'Mobile network', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MobileNet.png' }, + { amenitiesName: 'Outdoor dining area', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/OutdoorDiningArea.png' }, + { amenitiesName: 'Outdoor kitchen', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/OutdoorKitchen.png' }, + { amenitiesName: 'Oven', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Oven.png' }, + { amenitiesName: 'Paid parking off premises', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PaidParkingOffPremises.png' }, + { amenitiesName: 'Paid parking on premises', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PaidParkingOnPremises.png' }, + { amenitiesName: 'Patio or balcony', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PatioOrBalcony.png' }, + { amenitiesName: 'Piano', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Piano.png' }, + { amenitiesName: 'Mobile charging point', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/MobileChargingPoint.png' }, + { amenitiesName: 'Pocket wifi', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PocketWifi.png' }, + { amenitiesName: 'Pool', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Pool.png' }, + { amenitiesName: 'Portable fans', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PortableFans.png' }, + { amenitiesName: 'Private entrance', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/PrivateEntrance.png' }, + { amenitiesName: 'Skate ramp', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SkateRamp.png' }, + { amenitiesName: 'Ski-in/out', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Ski-InOut.png' }, + { amenitiesName: 'Smoke alarm', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SmokeAlarm.png' }, + { amenitiesName: 'Sound system', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SoundSystem.png' }, + { amenitiesName: 'Sun loungers', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/SunLoungers.png' }, + { amenitiesName: 'Toaster', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Toaster.png' }, + { amenitiesName: 'Travel cot', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/TravelCot.png' }, + { amenitiesName: 'TV', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/TV.png' }, + { amenitiesName: 'Washing machine', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/WashingMachine.png' }, + { amenitiesName: 'Waterfront', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Waterfront.png' }, + { amenitiesName: 'Wifi', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Wifi.png' } ], skipDuplicates: true, // prevents error if already seeded }); @@ -659,6 +714,10 @@ async function main() { skipDuplicates: true, }); + console.log('🚀 Starting city seeding...') + await seedCities(prisma) + console.log('✅ City seeding finished') + // ✅ PQQ Categories + Questions + Answers const categoriesData = [ { @@ -1617,8 +1676,6 @@ async function main() { }); } - - console.log('✅ Seed data inserted successfully!'); } diff --git a/src/modules/host/handlers/Activity_Hub/Scheduling/cancelSlot.ts b/src/modules/host/handlers/Activity_Hub/Scheduling/cancelSlot.ts index 49c6e70..7b5c0b2 100644 --- a/src/modules/host/handlers/Activity_Hub/Scheduling/cancelSlot.ts +++ b/src/modules/host/handlers/Activity_Hub/Scheduling/cancelSlot.ts @@ -34,14 +34,15 @@ export const handler = safeHandler(async ( throw new ApiError(404, 'Host not found'); } - let body: { activityXid: number; venueXid: number; scheduleHeaderXid: number; slotXid: number; cancellationReason?: string }; + let body: { activityXid: number; venueXid: number; cancellations: { scheduleHeaderXid: number; slotXid: number; cancellationReason: string }[] }; try { body = event.body ? JSON.parse(event.body) : {}; } catch { throw new ApiError(400, 'Invalid JSON payload'); } - if(!body.activityXid || !body.venueXid || !body.scheduleHeaderXid || !body.slotXid){ + + if (!body.activityXid || !body.venueXid || !Array.isArray(body.cancellations) || body.cancellations.length === 0) { throw new ApiError(400, 'Missing required fields'); } @@ -63,12 +64,15 @@ export const handler = safeHandler(async ( } - await schedulingService.cancelSlotForActivity( - Number(body.scheduleHeaderXid), - Number(body.slotXid), - body.cancellationReason || 'No reason provided' + await schedulingService.cancelMultipleSlotsForActivity( + body.cancellations.map((item: any) => ({ + scheduleHeaderXid: Number(item.scheduleHeaderXid), + slotXid: Number(item.slotXid), + cancellationReason: item.cancellationReason + })) ); + const result = await schedulingService.getVenueDurationByAct(Number(body.activityXid), Number(hostId)); return { diff --git a/src/modules/host/services/activityScheduling.service.ts b/src/modules/host/services/activityScheduling.service.ts index f30c2e1..b46f0fb 100644 --- a/src/modules/host/services/activityScheduling.service.ts +++ b/src/modules/host/services/activityScheduling.service.ts @@ -694,24 +694,23 @@ export class SchedulingService { return result; } - async cancelSlotForActivity( - scheduleHeaderXid: number, - slotXid?: number, - cancellationReason?: string - ) { - return await this.prisma.cancellations.create({ - data: { - scheduleHeader: { - connect: { id: scheduleHeaderXid }, - }, - slot: { - connect: { id: slotXid }, - }, - cancellationReason - } - }) + async cancelMultipleSlotsForActivity(cancellations: { + scheduleHeaderXid: number; + slotXid: number; + cancellationReason?: string; + }[]) { + return await this.prisma.cancellations.createMany({ + data: cancellations.map(item => ({ + scheduleHeaderXid: item.scheduleHeaderXid, + slotXid: item.slotXid, + cancellationReason: item.cancellationReason || 'No reason provided' + })), + skipDuplicates: true + }); } + + async openCanceledSlot( cancellationXid: number, slotXid?: number,