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", "class-validator": "^0.14.0",
"date-fns": "^4.1.0", "date-fns": "^4.1.0",
"fast-xml-parser": "^5.3.1", "fast-xml-parser": "^5.3.1",
"fs": "^0.0.1-security",
"helmet": "^7.1.0", "helmet": "^7.1.0",
"http-status": "^2.1.0", "http-status": "^2.1.0",
"moment": "^2.30.1", "moment": "^2.30.1",
"passport": "^0.7.0", "passport": "^0.7.0",
"passport-jwt": "^4.0.1", "passport-jwt": "^4.0.1",
"passport-local": "^1.0.0", "passport-local": "^1.0.0",
"path": "^0.12.7",
"prisma": "^7.0.1", "prisma": "^7.0.1",
"reflect-metadata": "^0.1.13", "reflect-metadata": "^0.1.13",
"rxjs": "^7.8.1", "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()) id Int @id @default(autoincrement())
stateXid Int @map("state_xid") stateXid Int @map("state_xid")
states States @relation(fields: [stateXid], references: [id], onDelete: Cascade) 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") isActive Boolean @default(true) @map("is_active")
createdAt DateTime @default(now()) @map("created_at") createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at") updatedAt DateTime @updatedAt @map("updated_at")
@@ -356,6 +356,7 @@ model Cities {
checkOutActivities Activities[] @relation("CheckOutCity") checkOutActivities Activities[] @relation("CheckOutCity")
schoolCompanies SchoolCompany[] schoolCompanies SchoolCompany[]
@@unique([stateXid, cityName])
@@map("cities") @@map("cities")
@@schema("mst") @@schema("mst")
} }
@@ -688,14 +689,14 @@ model Roles {
} }
model Connections { model Connections {
id Int @id @default(autoincrement()) id Int @id @default(autoincrement())
connectionType String @unique @map("connection_type") @db.VarChar(30) connectionType String @unique @map("connection_type") @db.VarChar(30)
connectionName String @map("connection_name") @db.VarChar(30) connectionName String @map("connection_name") @db.VarChar(30)
locationDetails String @map("location_details") @db.VarChar(100) locationDetails String @map("location_details") @db.VarChar(100)
isActive Boolean @default(true) @map("is_active") isActive Boolean @default(true) @map("is_active")
createdAt DateTime @default(now()) @map("created_at") createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @updatedAt @map("updated_at") updatedAt DateTime @updatedAt @map("updated_at")
deletedAt DateTime? @map("deleted_at") deletedAt DateTime? @map("deleted_at")
User User[] User User[]
@@map("connections") @@map("connections")

View File

@@ -1,6 +1,7 @@
import { PrismaClient } from '@prisma/client'; import { PrismaClient } from '@prisma/client';
import { PrismaPg } from '@prisma/adapter-pg'; import { PrismaPg } from '@prisma/adapter-pg';
import 'dotenv/config'; import 'dotenv/config';
import { seedCities } from './citiesSeeder'
const prisma = new PrismaClient({ const prisma = new PrismaClient({
adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }), adapter: new PrismaPg({ connectionString: process.env.DATABASE_URL }),
@@ -18,6 +19,60 @@ async function main() {
isActive: true, 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 // ✅ Currencies
await prisma.currencies.createMany({ await prisma.currencies.createMany({
@@ -423,7 +478,7 @@ async function main() {
{ interestXid: dogoodfeelgood.id, activityTypeName: 'Animal Volunteering', energyLevelXid: mediumEnergy.id }, { interestXid: dogoodfeelgood.id, activityTypeName: 'Animal Volunteering', energyLevelXid: mediumEnergy.id },
{ interestXid: dogoodfeelgood.id, activityTypeName: 'Beach Clean Ups', energyLevelXid: highEnergy.id }, { interestXid: dogoodfeelgood.id, activityTypeName: 'Beach Clean Ups', energyLevelXid: highEnergy.id },
{ interestXid: dogoodfeelgood.id, activityTypeName: 'Educating Children', energyLevelXid: mediumEnergy.id }, { interestXid: dogoodfeelgood.id, activityTypeName: 'Educating Children', energyLevelXid: mediumEnergy.id },
], ],
skipDuplicates: true, 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: '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: '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: '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: '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 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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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 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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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 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: '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: '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 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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: '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: 'Wifi', amenitiesIcon: 'https://minglar-dev-bucket.s3.ap-south-1.amazonaws.com/StaticImages/Amenities/Wifi.png' }
], ],
skipDuplicates: true, // prevents error if already seeded skipDuplicates: true, // prevents error if already seeded
}); });
@@ -659,6 +714,10 @@ async function main() {
skipDuplicates: true, skipDuplicates: true,
}); });
console.log('🚀 Starting city seeding...')
await seedCities(prisma)
console.log('✅ City seeding finished')
// ✅ PQQ Categories + Questions + Answers // ✅ PQQ Categories + Questions + Answers
const categoriesData = [ const categoriesData = [
{ {
@@ -1617,8 +1676,6 @@ async function main() {
}); });
} }
console.log('✅ Seed data inserted successfully!'); console.log('✅ Seed data inserted successfully!');
} }

View File

@@ -34,14 +34,15 @@ export const handler = safeHandler(async (
throw new ApiError(404, 'Host not found'); 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 { try {
body = event.body ? JSON.parse(event.body) : {}; body = event.body ? JSON.parse(event.body) : {};
} catch { } catch {
throw new ApiError(400, 'Invalid JSON payload'); 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'); throw new ApiError(400, 'Missing required fields');
} }
@@ -63,12 +64,15 @@ export const handler = safeHandler(async (
} }
await schedulingService.cancelSlotForActivity( await schedulingService.cancelMultipleSlotsForActivity(
Number(body.scheduleHeaderXid), body.cancellations.map((item: any) => ({
Number(body.slotXid), scheduleHeaderXid: Number(item.scheduleHeaderXid),
body.cancellationReason || 'No reason provided' slotXid: Number(item.slotXid),
cancellationReason: item.cancellationReason
}))
); );
const result = await schedulingService.getVenueDurationByAct(Number(body.activityXid), Number(hostId)); const result = await schedulingService.getVenueDurationByAct(Number(body.activityXid), Number(hostId));
return { return {

View File

@@ -694,24 +694,23 @@ export class SchedulingService {
return result; return result;
} }
async cancelSlotForActivity( async cancelMultipleSlotsForActivity(cancellations: {
scheduleHeaderXid: number, scheduleHeaderXid: number;
slotXid?: number, slotXid: number;
cancellationReason?: string cancellationReason?: string;
) { }[]) {
return await this.prisma.cancellations.create({ return await this.prisma.cancellations.createMany({
data: { data: cancellations.map(item => ({
scheduleHeader: { scheduleHeaderXid: item.scheduleHeaderXid,
connect: { id: scheduleHeaderXid }, slotXid: item.slotXid,
}, cancellationReason: item.cancellationReason || 'No reason provided'
slot: { })),
connect: { id: slotXid }, skipDuplicates: true
}, });
cancellationReason
}
})
} }
async openCanceledSlot( async openCanceledSlot(
cancellationXid: number, cancellationXid: number,
slotXid?: number, slotXid?: number,