taking array of cancellations and seeded cities of india

This commit is contained in:
2026-02-23 12:26:56 +05:30
parent 4f8217c95a
commit c50c4b1c5a
7 changed files with 290 additions and 110 deletions

53
insertCities.js Normal file
View File

@@ -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();

View File

@@ -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",

64
prisma/citiesSeeder.ts Normal file
View File

@@ -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!')
}

View File

@@ -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")

View File

@@ -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!');
}

View File

@@ -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 {

View File

@@ -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,